2011년 5월 24일 화요일

Chapter 4 UDDI - 2

6. UDDI API 소개
UDDI 레지스트리에 비즈니스 정보를 게시하고 찾기 위한 방법으로는 다음과 같은 두 가지 방법이 있습니다.
· UDDI 운영 사이트에 직접 방문
· 클라이언트 응용 프로그램을 이용
클라이언트 프로그램이 UDDI 레지스트리에 비즈니스 정보를 게시하거나 찾기 위해서는 클라이언트 의 요청을 XML 문서로 작성한 뒤에 이것을 다시 요청 SOAP 메시지로 포장하여 UDDI 레지스트리로 전송해야 한다.

UDDI API 엘리먼트
UDDI 버전 2 API 스펙에는 클라이언트가 UDDI 레지스트리에 어떤 작업을 요청하기 위해 클라이언트가 사용할 수 있는 다양한 XML 엘리먼트들을 정의해 놓고 있다. 이들 엘리먼트들은 다음 두 가지 종류로 구분된다.
· publish API 엘리먼트 : UDDI 레지스트리에 비즈니스 정보를 생성하고, 변경 및 삭제 시에 사용된다. 생성 및 변경은 <save_xxx> 삭제는 <delete_xxx>가 엘리먼트가 사용된다.
대상 엘리먼트
<save_xxx>
<delete_xxx>
<businessEntity>
<save_business>
<delete_business>
<businessService>
<save_service>
<delete_service>
<bindingTemplate>
<save_binding>
<delete_binding>
<tModel>
<save_tModel>
<delete_tModel>


· inquiry API 엘리먼트 : UDDI 레지스트리에서 비즈니스 정보를 찾기 위해 사용되는 <find_xxx>, <get_xxx> 엘리먼트가 여기에 속한다.
대상 엘리먼트
<find_xxx>
<get_xxx>
<businessEntity>
<find_business>
<get_businessDetail>
<businessService>
<find_service>
<get_serviceDetail>
<bindingTemplate>
<find_binding>
<get_bindingDetail>
<tModel>
<find_tModel>
<get_tModelDetail>


7. JAXR(Java API for XML Registries)
UDDI 레지스트리에 정보를 저장하고 검색할 수 있는 표준 Java API를 제공한다. 이 기술의 기본 사용법은 JDBC 프로그래밍과 유사하다. 웹 서비스 클라이언트 개발자는 javax.xml.registry 패키지에 있는 인터페이스 메소드를 사용해서 JAXR 프로바이더가 UDDI 레지스트리와 작업을 하도록 코딩한다.
JAXR을 이용한 UDDI 레지스트리 검색 회사이름으로 회사 정보 찾기
예제를 실행하기전에 http://java.sun.com에 들어가서 JWSDP 최신버전을 설치 해야 합니다.
package webservice.uddi;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.Locale;
import java.util.Properties;
import javax.xml.registry.BulkResponse;
import javax.xml.registry.BusinessQueryManager;
import javax.xml.registry.Connection;
import javax.xml.registry.ConnectionFactory;
import javax.xml.registry.FindQualifier;
import javax.xml.registry.JAXRException;
import javax.xml.registry.RegistryService;
import javax.xml.registry.infomodel.EmailAddress;
import javax.xml.registry.infomodel.InternationalString;
import javax.xml.registry.infomodel.Organization;
import javax.xml.registry.infomodel.PersonName;
import javax.xml.registry.infomodel.TelephoneNumber;
import javax.xml.registry.infomodel.User;
public class uddiFindName {
public uddiFindName() {
}
/**
* 실행 메서드
* @throws javax.xml.registry.JAXRException
*/
public void exec()
throws JAXRException {
// Connection 객체를 생산하는 ConnectionFactory 객체 생성
ConnectionFactory factory = ConnectionFactory.newInstance();
factory.setProperties(setProperty());
// JAXR 프로바이더의 연결을 위한 Connection 객체 생성
Connection connection = factory.createConnection();
// RegistryService 객체 생성
RegistryService rs = connection.getRegistryService();
// 인쿼리 작업을 위해서 BusinessQueryManager 객체 생성
BusinessQueryManager bqm = rs.getBusinessQueryManager();
// 회사 이름으로 찾기
BulkResponse response =
bqm.findOrganizations(setSort(), setFinder(), null, null, null, null);
// 검색된 모든 회사(Organization) 얻어냄
Collection orgCollection = response.getCollection();
Iterator orgIterator = orgCollection.iterator();
// 검색된 회사가 있을 경우
while (orgIterator.hasNext()) {
// 한개의 회사(Organization) 뽑아
Organization org = (Organization) orgIterator.next();
// businessEntity 엘리먼트 내용에 대한 정보 얻기
System.out.println("n---businessEntity 엘리먼트 내용에 대한 정보 얻기");
// 회사 이름 설명 얻기
InternationalString localeOrgName = org.getName();
InternationalString localeOrgDesc = org.getDescription();
String strOrgName = localeOrgName.getValue(Locale.ENGLISH);
String strOrgDesc = localeOrgDesc.getValue(Locale.ENGLISH);
System.out.println("회사 이름: " + strOrgName);
System.out.println("회사 설명: " + strOrgDesc);
// 회사에 대한 contact 정보 얻기
User user = org.getPrimaryContact();
if (user!=null) {
// 회사 담당자 이름 얻기
PersonName personName = user.getPersonName();
String strContactName = personName.getFullName();
System.out.println("담당자: " + strContactName);
// 회사 전화 번호 얻기
Collection phoneCollection = user.getTelephoneNumbers(null);
Iterator phoneIterator = phoneCollection.iterator();
while (phoneIterator.hasNext()) {
TelephoneNumber phone = (TelephoneNumber) phoneIterator.next();
String strPhone = phone.getNumber();
System.out.println("전화번호: " + strPhone);
}
// 회사 이메일 주소 얻기
Collection emailCollection = user.getEmailAddresses();
Iterator emailIterator = emailCollection.iterator();
while (emailIterator.hasNext()) {
EmailAddress email = (EmailAddress) emailIterator.next();
String strEmail = email.getAddress();
System.out.println("이메일: " + strEmail);
}
}
}
}
/**
* 회사 이름으로 찾기 위해 Collenction 객체 생성
* @return
*/
private Collection setFinder() {
Collection namePatterns = new ArrayList();
namePatterns.add("%test%");
return namePatterns;
}
/**
* 검색된 결과를 소팅하기 위해 Collection 객체 생성
* @return
*/
private Collection setSort() {
Collection findQualifiers = new ArrayList();
findQualifiers.add(FindQualifier.SORT_BY_NAME_DESC);
return findQualifiers;
}
/**
* JAXR 프로바이더와 연결하기 위한 정보 셋팅
* @return 셋팅 정보
*/
private Properties setProperty() {
Properties props = new Properties();
props.setProperty("javax.xml.registry.queryManagerURL",
"http://uddi.microsoft.com/inquire");
return props;
}
public static void main(String[] args) {
uddiFindName uddiClient = new uddiFindName();
try {
uddiClient.exec();
} catch(JAXRException e) {
e.printStackTrace();
}
}
}


위 샘플 프로그램은 http://uddi.microsoft.com/inquire UDDI 레지스트리에 등록된 서비스 중에 “test” 단어가 포함된 회사명 검색 결과를 내림차순으로 정렬한 것이다.

댓글 없음:

댓글 쓰기

시스템 부팅시 도커 컨테이너 자동 실행

Docker 컨테이너를 운용중인 시스템이 Reboot 되버리면 컨테이너가 자동으로 올라오지 않아 불편해서 시스템 리붓시 컨테이너를 자동으로 시작되게 init 데몬에 등록하기로 했습니다. 서버는 Ubuntu 17.10 Docker는 17.0...