< 이전 | 다음 >

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

이 단원에서는 주어진 사용자에 액세스 가능한 Rational® ClearQuest® 데이터베이스를 찾아내기 위한 Rational CM API의 사용법을 학습합니다. 이러한 목록은 레코드, 필드 및 조회와 같은 데이터베이스 자원으로 작업을 시작하기 전에 사용자에게 제시될 수 있습니다.

다음 예제는 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));
            
            // Provider에 대해 알려진 데이터베이스 세트 반복
            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에서 알고 있는 각 데이터베이스 세트로 사용자가 로그인하여 해당 데이터베이스 세트로부터 사용자가 등록한 사용자 데이터베이스 목록을 가져오도록 강제합니다.

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

이제 사용 가능한 사용자 데이터베이스 목록을 가지게 되었으므로 특정 데이터베이스에 로그인한 다음 그 안에서 자원으로 작업을 시작할 수 있습니다.

단원 체크포인트

이제 사용자 데이터베이스와 같은 특정 제품 저장소 목록을 얻기 위해 Rational CM API를 사용하는 방법을 학습했습니다.
이 단원에서는 다음 사항을 학습했습니다.
  • 액세스 가능한 사용자 데이터베이스를 가져오기 위한 Rational CM API의 사용법.
  • CqUserDb 오브젝트.

피드백
< 이전 | 다음 >