< 前へ | 次へ >

使用可能なユーザー データベースのリスト

この演習では、RationalR CM API を使用して、指定されたユーザーがアクセスできる Rational ClearQuestR データベースを探し出す方法について学習します。ユーザーがレコード、フィールド、およびクエリーなどのデータベース リソースの操作を開始する前に、そのデータベースのリストをユーザーに示すことができます。

以下の例では、CqProvider.doGeDbSetList() メソッドを使用して、プロバイダに認識されているすべての Rational ClearQuest データベース セットのリストを取得します。(データベース セットは、構成またはスキーマ リポジトリと呼ばれることがあります。)それらの各データベース セットにアクセスすることによって、ユーザーがアクセス可能なデータベースの完全なリストが取得されます。

この例では、それぞれのユーザー データベースはデータベース セット名 (CqDbSet.DISPLAY_NAME) とそのユーザー データベース名 (CqUserDb.DISPLAY_NAME) の組み合わせで識別されます。 これが、Rational CM API でユーザー データベースを識別する正規の方法です。ユーザー データベースの完全なロケーション構文は 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));
            
            // プロバイダに認識されているデータベース セットごとに繰り返します。
            for (CqDbSet set : provider.doGetDbSetList(DB_PROPS)) {
                // ユーザーがアクセス権を持っていない場合はそのデータベースをスキップします
                if (set.getResourceError() != null)
                    continue;
                
                // ユーザーが登録しているユーザー データベースを識別します。
                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);  // Swing のスレッドを終了します。
        }
    }
    
    /** 登録されたユーザー データベースに関して表示されるプロパティ */
    static final PropertyRequest DB_PROPS =
                new PropertyRequest(CqDbSet.CURRENT_USER
                    .nest(CqUser.SUBSCRIBED_DATABASES
                          .nest(CqUserDb.USER_FRIENDLY_LOCATION,
                                CqUserDb.PRODUCT_INFO)));
}
このチュートリアルの残りの部分で使用するために、Utilities.getUserDbList を定義します。 これは前の例と同じ技法を使用して、アクセス可能なユーザー データベースのセットを計算します。計算の結果として得られる各ユーザー データベースのプロキシには、引数としてメソッドに提供されるプロパティのセットが取り込まれます。
    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;
    }

ClearQuest アプリケーションとの唯一の対話が、外部ループが開始される時点の CqProvider.doGetDbSetList メソッドの呼び出し中に行われます。その呼び出しで使用される DB_PROPS ネスト プロパティ要求は、ClearQuest に、認識している各データベース セット内にユーザーをログインさせ、そのデータベース セットから、ユーザーが登録されているユーザー データベースのリストを取得させます。

このメソッドが実行されると、プロバイダに渡されたコールバック オブジェクトが、それぞれのデータベース セットごとに呼び出され、そのデータベース セットのユーザー ID およびパスワードが取得されます。 ユーザーが、指定されたデータベース セットのための適切な認証を提供できないと、戻されるプロキシのリソース エラー フィールド内にログイン失敗の例外が保管されます。このフィールド内の値が NULL 以外になることで、リソースのリストにあるリソースへのアクセスが失敗し、プロパティ要求を満たすことができなかったことがクライアントに通知されます。

これで使用可能なユーザー データベースのリストができました。特定のデータベースにログインしてその中のリソースの操作を開始することができます。

演習のチェックポイント

Rational CM API を使用して、ユーザー データベースなど特定の製品リポジトリをリストする方法を学習しました。
この演習では、以下について学習しました。
  • Rational CM API を使用してアクセス可能なユーザー データベースを取得する方法。
  • CqUserDb オブジェクト。

フィードバック
< 前へ | 次へ >