< Indietro | Avanti >

Elencare i database utente disponibili

In questa lezione, vengono fornite informazioni su come utilizzare Rational CM API per rilevare i database Rational ClearQuest accessibili a un determinato utente. Tale elenco potrebbe essere presentato all'utente prima di iniziare a gestire le risorse database come ad esempio i record, i campi e le query.

Il seguente esempio utilizza il metodo CqProvider.doGeDbSetList() per ottenere un elenco di tutte le serie di database Rational ClearQuest note al provider. (Una serie di database viene a volte denominata configurazione o repository di schemi.) Accedendo a ognuna di queste serie di database, si ottiene un elenco completo di database a cui l'utente può accedere.

In questo esempio, ciascun database utente viene identificato da una combinazione del relativo nome serie di database (CqDbSet.DISPLAY_NAME) e del relativo nome database utente (CqUserDb.DISPLAY_NAME). Si tratta del modo canonico di identificazione di un database utente in Rational CM API. La sintassi dell'ubicazione completa per un database utente è cq.userdb:<db-set>/<user-db>.

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));
            
            // Eseguire una ripetizione nelle serie di database note al provider
            for (CqDbSet set : provider.doGetDbSetList(DB_PROPS)) {
                // Tralasciare la serie di database se l'utente non dispone dell'accesso
                if (set.getResourceError() != null)
                    continue;
                
                // Identificare i database utente ai quali l'utente è sottoscritto
                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);  // per terminare i thread Swing
        }
    }
    
    /** Proprietà da visualizzare per i database utente sottoscritti */
    static final PropertyRequest DB_PROPS =
                new PropertyRequest(CqDbSet.CURRENT_USER
                    .nest(CqUser.SUBSCRIBED_DATABASES
                          .nest(CqUserDb.USER_FRIENDLY_LOCATION,
                                CqUserDb.PRODUCT_INFO)));
}
Per l'utilizzo nel resto di questa esercitazione, viene definito Utilities.getUserDbList. Utilizza la stessa tecnica dell'esempio precedente per calcolare la serie di database utente accessibili, in cui ciascun proxy del database utente del risultato viene popolato con una serie di proprietà fornite come argomento per il metodo.
    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;
    }

L'unica interazione con l'applicazione ClearQuest si verifica durante la chiamata del metodo CqProvider.doGetDbSetList all'avvio del loop esterno. La richiesta della proprietà nidificata DB_PROPS utilizzata in tale chiamata forza ClearQuest a far accedere l'utente in ciascuna serie di database nota e a ottenere, da tale serie di database, un elenco di database utente a cui l'utente è sottoscritto.

Durante l'esecuzione di questo metodo, l'oggetto Callback fornito al provider verrà richiamato per ciascuna serie di database al fine di ottenere l'identità utente e la password per tale serie di database. Se l'utente non è in grado di fornire le credenziali appropriate per una determinata serie di database, l'eccezione di accesso non riuscito viene memorizzata nel campo di errore delle risorse del proxy restituito. Un valore non nullo in questo campo rappresenta il modo standard per informare il client che non è stato possibile accedere a una risorsa in un elenco di risorse per soddisfare una richiesta di proprietà.

Ora che si dispone di un elenco di database utente disponibili, è possibile accedere a uno specifico database e quindi iniziare a gestire le risorse presenti in esso.

Punto di controllo della lezione

Ora sono state acquisite le informazioni su come utilizzare Rational CM API per elencare i repository specifici per il prodotto, come ad esempio i database utente.
In questa lezione, sono state fornite informazioni su quanto segue:
  • Come utilizzare Rational CM API per ottenere i database utente accessibili.
  • Informazioni sugli oggetti CqUserDb.

Feedback
< Indietro | Avanti >