< Zurück | Weiter >

Verfügbare Benutzerdatenbanken auflisten

In dieser Lerneinheit erfahren Sie, wie Sie mithilfe der ClearQuest CM-API feststellen können, auf welche Rational ClearQuest-Datenbanken ein bestimmter Benutzer zugreifen kann. Eine solche Liste könnte dem Benutzer angezeigt werden, bevor er mit der Arbeit an Datenbankressourcen, z. B. Datensätzen, Feldern und Abfragen, beginnt.

Im folgenden Beispiel wird die Methode CqProvider.doGeDbSetList() verwendet, um eine Liste aller Rational ClearQuest-Datenbankgruppen zu erhalten, die dem Provider bekannt sind. (Eine Datenbankgruppe wird manchmal auch als Konfigurations-Repository oder Schema-Repository bezeichnet.) Wenn Sie jede dieser Datenbankgruppen aufrufen, erhalten Sie eine vollständige Liste der für den Benutzer verfügbaren Datenbanken.

In diesem Beispiel wird jede Benutzerdatenbank über eine Kombination aus dem Namen der Datenbankgruppe (CqDbSet.DISPLAY_NAME) und dem Namen der Benutzerdatenbank (CqUserDb.DISPLAY_NAME) identifiziert. Dies ist die kanonische Vorgehensweise zur Angabe einer Benutzerdatenbank in der ClearQuest CM-API. Die vollständige Syntax für die Position einer Benutzerdatenbank lautet wie folgt: cq.userdb:<db-gruppe>/<benutzer-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));
            
            // Dies für die dem Provider bekannten Datenbankgruppen iterieren
            for (CqDbSet set : provider.doGetDbSetList(DB_PROPS)) {
                // Datenbankgruppe überspringen, wenn der Benutzer keinen Zugriff hat
                if (set.getResourceError() != null)
                    continue;
                
                // Benutzerdatenbanken identifizieren, die der Benutzer subskribiert hat
                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);  // zum Beenden der Swing-Threads
        }
    }
    
    /** Eigenschaften, die für subskribierte Benutzerdatenbanken angezeigt werden sollen */
    static final PropertyRequest DB_PROPS =
                new PropertyRequest(CqDbSet.CURRENT_USER
                    .nest(CqUser.SUBSCRIBED_DATABASES
                          .nest(CqUserDb.USER_FRIENDLY_LOCATION,
                                CqUserDb.PRODUCT_INFO)));
}
Für die weitere Verwendung in diesem Lernprogramm wird Utilities.getUserDbList definiert. Es verwendet dieselbe Vorgehensweise wie das vorherige Beispiel, um die Gruppe der verfügbaren Benutzerdatenbanken zu ermitteln, wobei jeder Benutzerdatenbank-Proxy des Ergebnisses mit einer Gruppe von Eigenschaften gefüllt wird, die als Argument für die Methode angegeben werden.
    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;
    }

Die einzige Interaktion mit der ClearQuest-Anwendung findet während des Aufrufs der Methode CqProvider.doGetDbSetList am Anfang der äußeren Schleife statt. Die verschachtelte Eigenschaftsanforderung DB_PROPS, die in diesem Aufruf verwendet wird, zwingt ClearQuest dazu, den Benutzer bei jeder Datenbankgruppe anzumelden, die ihm bekannt ist, und aus dieser Datenbankgruppe eine Liste der Benutzerdatenbanken abzurufen, die dieser Benutzer subskribiert hat.

Während diese Methode ausgeführt wird, wird das dem Provider bereitgestellte Callback-Objekt für jede Datenbankgruppe aufgerufen, um die Benutzeridentität und das Kennwort für diese Datenbankgruppe abzurufen. Wenn der Benutzer die erforderlichen Berechtigungsnachweise für eine bestimmte Datenbankgruppe nicht angeben kann, wird eine Ausnahme über die fehlgeschlagene Anmeldung ("failed-login") im Feld "resource-error" des zurückgegebenen Proxy gespeichert. Ein Wert ungleich Null in diesem Feld ist die Standardmethode, mit der dem Client angezeigt wird, dass eine Ressource in einer Liste von Ressourcen nicht aufgerufen werden konnte, um eine Eigenschaftsanforderung zu erfüllen.

Nachdem jetzt eine Liste der verfügbaren Benutzerdatenbanken existiert, können Sie sich an einer bestimmten Datenbank anmelden und mit den darin enthaltenen Ressourcen arbeiten.

Prüfpunkt der Lerneinheit

Sie haben gelernt, wie Sie mit der ClearQuest CM-API bestimmte Produktrepositorys wie Benutzerdatenbanken auflisten können.
In dieser Lerneinheit haben Sie folgende Kenntnisse erworben:
  • Sie haben gelernt, wie die ClearQuest CM-API zum Abrufen zugänglicher Benutzerdatenbanken verwendet wird.
  • Sie haben Kenntnisse über CqUserDb-Objekte erworben.
< Zurück | Weiter >

Feedback