다음 예제는 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))); }
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 및 비밀번호를 확보합니다. 사용자가 주어진 데이터베이스 세트에 대한 적절한 신임을 제공할 수 없는 경우, 리턴된 프록시의 자원 오류 필드에 로그인 실패 예외가 저장됩니다. 이 필드의 널이 아닌 값은 특성 요청을 충족시키기 위해 자원 목록에 액세스할 수 없음을 클라이언트에게 알리는 일반적인 방법입니다.