< Anterior | Siguiente >

Lista de las bases de datos de usuarios disponibles

En esta lección aprenderá a utilizar la API CM de Rational para descubrir las bases de datos de Rational ClearQuest accesibles para un usuario determinado. Esta lista puede visualizarse ante el usuario antes de empezar a trabajar con los recursos de la base de datos, como por ejemplo, registros, campos y consultas.

En el ejemplo siguiente se utiliza el método CqProvider.doGeDbSetList() para obtener una lista de todos los conjuntos de bases de datos de Rational ClearQuest conocidos en el proveedor. (Algunas veces el conjunto de bases de datos recibe el nombre de depósito de esquemas o configuración). Al acceder a cada uno de estos conjuntos de bases de datos, se obtiene una lista de las bases de datos accesibles para el usuario.

En este ejemplo, cada base de datos de usuario se identifica mediante una combinación del nombre del conjunto de bases de datos (CqDbSet.DISPLAY_NAME) y el nombre de la base de datos de usuarios (CqUserDb.DISPLAY_NAME). Es el modo canónico de identificar una base de datos de usuarios en la API CM de Rational. La sintaxis completa de la ubicación de una base de datos de usuario es cq.userdb:<conjunto-bd>/<bd-usuario>.

public static void main(String[] args) throws Exception
    {
        try {
            CqProvider provider = Utilities.getProvider().cqProvider();
            
            System.out.println("CM API Library...\n" 
                                 + provider.stpProductInfo(null));
            System.out.println("ClearQuest Adaptor...\n" 
                                 + provider.stpProductInfo(Domain.CLEAR_QUEST));
            
            // Iterate over the database sets known to the provider
            for (CqDbSet set : provider.doGetDbSetList(DB_PROPS)) {
                // Skip database set if user doesn't have access
                if (set.getResourceError() != null)
                    continue;
                
                // Identify the user databases to which the user is subscribed
                for (CqUserDb userDb: set.getCurrentUser().getSubscribedDatabases()) {
                    CqProductInfo info = (CqProductInfo)userDb.getProductInfo();
                    System.out.println (userDb.getUserFriendlyLocation().getRepo()
                                        + ": " + info.getFullProductVersion() +
                                        " (" + info.getStageLabel()+ ", OMREV " 
                                        + (info.getObjectModelVersionMajor()*100
                                        + info.getObjectModelVersionMinor()) + ")");
                }
            }
        } catch(Throwable ex) {
            ex.printStackTrace();
        } finally {
            System.exit(0);  // to terminate Swing threads
        }
    }
    
    /** Properties to be displayed for subscribed user databases */
    static final PropertyRequest DB_PROPS =
                new PropertyRequest(CqDbSet.CURRENT_USER
                    .nest(CqUser.SUBSCRIBED_DATABASES
                          .nest(CqUserDb.USER_FRIENDLY_LOCATION,
                                CqUserDb.PRODUCT_INFO)));
}
Para utilizarlo en el resto de esta guía de aprendizaje, definimos Utilities.getUserDbList. Emplea la misma técnica que la que figura en el ejemplo anterior para calcular el conjunto de bases de datos de usuarios accesibles, donde cada proxy de base de datos de usuarios del resultado se llena con un conjunto de propiedades suministradas como argumento al método.
    static ResourceList<CqUserDb> getUserDbList(CqProvider provider, 
                                                PropertyRequest feedback)
    throws WvcmException
    {
        PropertyRequest wantedProps =
            new PropertyRequest(CqDbSet.CURRENT_USER
                .nest(CqUser.SUBSCRIBED_DATABASES.nest(feedback)));
        ResourceList<CqUserDb> result = provider.resourceList();

        for (CqDbSet set : provider.doGetDbSetList(wantedProps)) {
            if (set.getResourceError() == null)
                result.addAll(set.getCurrentUser().getSubscribedDatabases());
        }

        return result;
    }

La única interacción con la aplicación ClearQuest se produce durante la invocación del método CqProvider.doGetDbSetList al principio del bucle externo. La solicitud de propiedad anidada DB_PROPS utilizada en dicha invocación obliga a ClearQuest a conectar cada usuario con cada conjunto de bases de datos que conoce y obtener de dicho conjunto de bases de datos una lista de bases de datos de usuarios a las que está suscrito dicho usuario.

A medida que se ejecuta este método, el objeto Callback que se suministra al proveedor seguirá invocándose para cada conjunto de bases de datos con el fin de obtener la identidad y la contraseña de usuario para dicho conjunto de bases de datos. Si el usuario no puede facilitar las credenciales adecuadas para un conjunto de bases de datos determinadas, la excepción de inicio de sesión anómalo se almacena en el campo de errores de recursos del proxy devuelto. Un valor no nulo de este campo es la forma estándar de informar al cliente que no se ha podido acceder a una lista de recursos para atender una solicitud de propiedad.

Ahora que ya dispone de una lista de las bases de datos de usuarios disponibles, puede conectarse a una base de datos específica y a continuación empezar a trabajar con los recursos que contiene.

Punto de comprobación de la lección

Ahora ha aprendido a utilizar la API CM de Rational para listar repositorios de productos específicos como por ejemplo, bases de datos de usuarios.

En esta lección ha aprendido lo siguiente:
  • Cómo utilizar la API CM de Rational para obtener bases de datos de usuarios accesibles.
  • Información sobre los objetos CqUserDb.

Comentarios
< Anterior | Siguiente >