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