< 이전 | 다음 >

사용 가능한 사용자 데이터베이스 목록

이 레슨에서는 ClearQuest® CM API를 사용하여 지정된 사용자가 액세스할 수 있는 Rational® ClearQuest 데이터베이스를 발견하는 방법에 대해 학습합니다. 이 목록은 사용자가 레코드, 필드 및 조회와 같은 데이터베이스 자원에 대한 작업을 시작하기 전에 제시됩니다.

다음 예제에서는 CqProvider.doGeDbSetList() 메소드를 사용하여 모든 Rational ClearQuest 데이터베이스 세트 목록을 확보합니다. (데이터베이스 세트는 간혹 구성 또는 스키마 저장소라고 합니다.) 이 데이터베이스 세트 각각에 액세스하면 사용자가 액세스 가능한 전체 데이터베이스 목록을 확보할 수 있습니다.

이 예제에서, 각 사용자 데이터베이스는 해당되는 데이터베이스 세트 이름(CqDbSet.DISPLAY_NAME)과 해당되는 사용자 데이터베이스 이름(CqUserDb.DISPLAY_NAME)으로 식별됩니다. 이는 ClearQuest 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;
    }

ClearQuest 애플리케이션과의 유일한 상호작용은 외부 루프 시작 시 CqProvider.doGetDbSetList 메소드 호출 중에 발생합니다. 이 호출에 사용되는 DB_PROPS 중첩 특성 요청은 ClearQuest가 알고 있는 각 데이터베이스 세트에 사용자를 로그인하고, 해당 데이터베이스 세트에서 사용자가 등록된 사용자 데이터베이스 목록을 확보하도록 강제 실행합니다.

이 메소드가 실행되면 데이터베이스 세트마다 제공자에게 제공된 Callback 오브젝트가 호출되어 해당 데이터베이스 세트에 대한 사용자 ID 및 비밀번호를 알 수 있습니다. 사용자가 지정된 데이터베이스 세트에 적절한 신임 정보를 제공할 수 없는 경우 실패한 로그인 예외가 리턴된 프록시의 자원-오류 필드에 저장됩니다. 이 필드에서 널이 아닌 값은 자원 목록에 있는 자원이 특성 요청을 충족하기 위해 액세스될 수 없음을 클라이언트에 알리는 표준 방법입니다.

이제 사용 가능한 사용자 데이터베이스 목록을 보유하고 있으므로, 특정 데이터베이스에 로그인한 후 그 데이터베이스에서 자원에 대한 작업을 시작할 수 있습니다.

레슨 체크포인트

ClearQuest CM API를 사용하여 사용자 데이터베이스와 같은 특정 제품 저장소를 나열하는 방법에 대해 학습했습니다.
이 레슨에서 학습한 내용은 다음과 같습니다.
  • ClearQuest CM API를 사용하여 액세스 가능한 사용자 데이터베이스를 가져오는 방법
  • CqUserDb 오브젝트에 대한 정보
< 이전 | 다음 >

피드백