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