< 上一课 | 下一课 >

列出可用的用户数据库

在本课程中,您将了解如何利用 Rational® CM API 来发现给定用户可以访问的 Rational ClearQuest® 数据库。在用户开始使用数据库资源(例如,记录、字段和查询)之前,可向用户呈示数据库列表。

以下示例使用 CqProvider.doGeDbSetList() 方法来获取 Provider 已知的所有 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));
            
            // 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)));
}
为了在随后的课程中使用,我们定义了 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;
    }

只有在外层循环一开始调用 CqProvider.doGetDbSetList 方法期间,才会发生与 ClearQuest 应用程序的交互。调用过程中使用的 DB_PROPS 嵌套式属性请求强制 ClearQuest 让用户登录自己知道的每个数据库集,并从数据库集获取此用户预订的用户数据库集列表。

在执行此方法时,针对每个数据库集,都会调用 Provider 的 Callback 对象,以获取数据库集的用户标识和密码。如果用户无法提供给定数据库集的正确凭证,那么登录失败这个异常会存储在返回代理的 ResourceError 字段中。一般情况下,如果该字段为非空值,那么会通知客户机无法访问资源列表中的资源来满足属性请求。

既然已经得到了可用的用户数据库列表,那么可以登录某个特定的数据库,然后开始使用其中的资源。

课程检查点

现在,您已经了解了如何利用 Rational CM API 来列出特定的产品存储库,例如,用户数据库。
在本课程中,您学习到了以下内容:
  • 如何利用 Rational CM API 来获取可访问的用户数据库。
  • CqUserDb 对象。
< 上一课 | 下一课 >

反馈