2005년 5월 18일자 테크 팁 JAXR(Java API for XML Registries)에서는 JAXR을 이용하여 레지스트리를 질의하는 방법에 대해 알아보았다. 이번 테크팁에서는 J2EE 1.4 튜토리얼과 Java Web Services Developer Pack 1.6 튜토리얼(영문)에 실린 정보를 바탕으로 JAXR을 이용하여 레지스트리를 업데이트하는 방법을 배우도록 한다.
먼저 JAXR 아키텍처와 JAXR 접속을 만드는 방법을 복습해 보기로 하자. 이 두 가지는 모두 이전 테크팁에서 설명한 바 있다. JAXR 사양에 따르면 제공자는 반드시 다음 두 패키지로 키 인터페이스를 구현하도록 되어 있다는 것을 상기하도록 한다.
JAXR 커넥션 만들기
JAXR 클라이언트는 항상 처음에 추상 클래스
이상의 정보를 바탕으로 이제 레지스트리 업데이트를 수행하는 방법에 관해 알아보기로 하자.
레지스트리 데이터에 대한 업데이트 수행하기
클라이언트가 해당 권한(인가)을 가지고 있을 경우에는 레지스트리에 데이터를 제출, 수정, 삭제할 수 있으며, 클라이언트는
레지스트리로부터 인가 획득하기
클라이언트가 데이터를 제출하려면 반드시 먼저 일련의 신원 증명서(credentials) 내의 레지스트리에 사용자 이름과 비밀번호를 전송해야 한다.
클라이언트는 Organization 오브젝트를 생성하고 이를 퍼블리쉬하기 전에 데이터를 populate한다.
이전 팁에서는 조직들이 일반적으로 한 개 이상의 분류 스킴(taxonomy)을 기준으로 하는 한 가지 이상의 분류에 속하게 된다고 지적한 바 있다. 클라이언트가 taxonomy를 이용하여 조직에 대한 분류를 설정하려면 먼저 이용하고자 하는 분류 체계를 찾아야 하는데, 이때 클라이언트는
조직에 서비스 및 서비스 바인딩 추가하기
대부분의 조직은 서비스 제공을 위해 자신을 레지스트리에 추가하므로 JAXR API는 조직에 서비스와 서비스 바인딩을 추가하기 위한 기능을 가지고 있다.
서비스는 또한 일반적으로 서비스에 액세스하는 방법에 관한 정보를 제공하는 서비스 바인딩을 가지며,
다음 코드 단편은 서비스 컬렉션을 생성하고, 서비스에 서비스 바인딩을 추가한 다음, 조직에 서비스를 추가하는 방법을 보여주고 있는데, 여기서는 액세스 URI를 명시할 뿐, 사양 링크는 명시하지 않는다. 액세스 URI는 실재하지 않으며 JAXR는 기본값으로 퍼블리쉬된 URI의 타당성을 검사하기 때문에, 바인딩은 그
클라이언트가 조직 데이터를 추가하거나 수정하기 위해 사용하는 주 메소드는
클라이언트는 공개하고자 하는 정보를 조직에 populate한 후에 조직을 저장하고, 레지스트리가 그 응답으로 키를 반환하면 클라이언트는 이를 검색한다.
서비스 바인딩은 서비스 액세스 방법을 설명하는 기술 사양을 가질 수 있으며, 그 같은 사양의 일례로 WSDL 문서를 들 수 있다. 서비스 사양의 위치를 퍼블리쉬하려면(사양이 WSDL 문서인 경우),
다음의 예제를 살펴보자. 먼저
다른 누군가에 의해 컨셉트가 퍼블리쉬되었으나 키에 액세스할 수 없는 경우에는 이름과 분류를 이용하여 이를 찾을 수 있다. 코드는 JAXR 질의를 통해 WSDL 문서를 검색하는 데 사용하는 코드와 유사한데, 차이가 있다면 이름 패턴의 컬렉션을 함께 생성하여 이를 검색에 포함시킨다는 점이다. 다음은 관련 예제이다.
이전에 제출한 어떤 데이터든지 레지스트리에서 삭제할 수 있으며, 레지스트리가 반환한 키를
예제
본 팁의 예제에서는 JAXR을 이용하여 Java WSDP(Java Web Services Developer Pack) 1.6과 함께 제공되는 Service Registry 3.0 Early Access 릴리즈에 컨텐츠를 퍼블리쉬한다. 한편, 서비스 레지스트리는 UDDI 3.0와 마찬가지로 ebXML 3.0 사양을 구현한다.
시작하기
Service Registry를 이용하려면 먼저 Sun Java System Application Server를 시작해야 하고, Application Server를 시작하면 Service Rgistry와 Xindice 데이터베이스가 모두 자동으로 시작된다.
Sun Java System Application Server Platform Edition 8.1의 2005 Q2 릴리즈를 다운로드하여 설치한 다음 (아직 설치하지 않은 경우), Java WSDP 1.6을 설치한다. Java WSDP를 설치한 후 애플리케이션 서버를 재시작하고 어드민(admin) 콘솔(
웹 콘솔 시작하기
서비스 레지스트리를 위한 웹 콘솔을 시작한다. 웹 콘솔은 레지스트리에서 컨텐츠를 검색하고 퍼블리쉬할 수 있게 해주는 웹 기반 사용자 인터페이스이다. 웹 콘솔을 시작하려면
레지스트리 계정 생성하기
레지스트리에 컨텐츠를 퍼블리쉬하려면 먼저 레지스트리 계정을 생성해야 한다. 하지만 이 서비스 레지스트리의 Early Access Release에서는 사용자 등록이 disable(사용하지 않음) 상태로 되어 있다. 향후에는 웰컴 페이지의 ‘Create User Account’ 링크를 클릭하여 계정을 생성하게 될 것이며, Early Access Release에서는 모든 사용자가
레지스트리에 퍼블리쉬하기
본 팁을 위한 예제 코드(
예제 코드를 다운로드하여 압축을 해제한다. 그런 다음 JWSDP 1.6 내의 레지스트리 홈과 애플리케이션 서버 홈을 참조하도록
먼저 JAXR 아키텍처와 JAXR 접속을 만드는 방법을 복습해 보기로 하자. 이 두 가지는 모두 이전 테크팁에서 설명한 바 있다. JAXR 사양에 따르면 제공자는 반드시 다음 두 패키지로 키 인터페이스를 구현하도록 되어 있다는 것을 상기하도록 한다.
javax.xml.registry. API 인터페이스와 레지스트리 액세스 인터페이스를 정의하는 클래스로 이루어진다.
javax.xml.registry.infomodel. JAXR을 위한 정보 모델을 정의하는 인터페이스로 이루어지며, 이 인터페이스는 레지스트리 내에 상주하는 오브젝트의 타입과 오브젝트가 간의 관계 방식을 정의한다. 이 패키지에서 가장 일반적으로 사용되는 인터페이스는RegistryObject인터페이스이고, 서브인터페이스에는Organization,Service,ServiceBinding등이 포함된다.
javax.xml.registry 패키지가 특히 중요한 이유는 다음과 같은 여러 가지 유용한 클라이언트 인터페이스를 포함하고 있기 때문이다.
Connection. 레지스트리 제공자와 연결된 클라이언트 세션을 나타낸다. 클라이언트가 레지스트리를 사용하려면 반드시 JAXR 제공자와 커넥션을 생성해야 한다.
RegistryService. 클라이언트는 해당 연결로부터RegistryService오브젝트를 획득한다.RegistryService오브젝트는 클라이언트가 레지스트리에 액세스하기 위해 사용하는 인터페이스BusinessQueryManager,BusinessLifeCycleManager등을 획득할 수 있게 해준다.
BusinessQueryManager. 이 인터페이스를 구현하는 오브젝트는 클라이언트가javax.xml.registry.infomodel인터페이스와 일치하는 정보를 레지스트리에서 검색할 수 있게 해준다.
BusinessLifeCycleManager. 이 인터페이스를 구현하는 오브젝트는 클라이언트가 레지스트리 내의 정보를 수정하거나 삭제할 수 있게 해준다.
BusinessLifeCycleManager 오브젝트를 이용하여 Java WSDP(Java Web Services Developer Pack) 1.6에 포함된 Service Registry 3.0 Early Access 릴리즈를 업데이트하는 방법에 관해 알아보기로 하자. JAXR 커넥션 만들기
JAXR 클라이언트는 항상 처음에 추상 클래스
ConnectionFactory의 인스턴스를 생성한다. import javax.xml.registry.*;
...
ConnectionFactory connFactory =
ConnectionFactory.newInstance();
이어서 클라이언트는 액세스가 진행되고 있는 레지스트리의 URL을 지정하는 일련의 속성을 생성한다. 예를 들어, 다음 코드는 서비스 레지스트리를 위한 질의 서비스와 퍼블리쉬 서비스의 URL을 제공한다. Properties props = new Properties();
props.setProperty("javax.xml.registry.queryManagerURL",
"http://localhost:8080/soar/registry/soap");
props.setProperty("javax.xml.registry.lifeCycleManagerURL",
"https://localhost:8080/soar/registry/soap");
그런 다음 클라이언트는 커넥션 팩토리(connection factory)에 대한 속성을 설정하고 커넥션을 생성한다. connFactory.setProperties(props); Connection connection = connFactory.createConnection();커넥션을 생성한 후 클라이언트는 커넥션을 이용하여
RegistryService 오브젝트를 획득한다. 그런 다음 RegistryService를 이용하여 해당 질의 인터페이스를 구현하는 오브젝트를 획득한다. RegistryService rs = connection.getRegistryService();
BusinessQueryManager bqm = rs.getBusinessQueryManager();
BusinessLifeCycleManager blcm =
rs.getBusinessLifeCycleManager();
클라이언트가 레지스트리에 데이터를 읽고 쓸 필요가 있는 경우에는 RegistryService 오브젝트로부터 BusinessQueryManager 오브젝트와 BusinessLifeCycleManager 오브젝트를 모두 획득해야 한다. 이상의 정보를 바탕으로 이제 레지스트리 업데이트를 수행하는 방법에 관해 알아보기로 하자.
레지스트리 데이터에 대한 업데이트 수행하기
클라이언트가 해당 권한(인가)을 가지고 있을 경우에는 레지스트리에 데이터를 제출, 수정, 삭제할 수 있으며, 클라이언트는
BusinessLifeCycleManager 인터페이스를 구현하는 오브젝트를 이용하여 이 태스크를 수행할 수 있다. 레지스트리는 보통 최초로 데이터를 제출한 동일 사용자가 데이터를 수정하거나 삭제하는 경우에 한하여 클라이언트로 하여금 데이터를 수정하거나 삭제할 수 있도록 허용한다. 레지스트리로부터 인가 획득하기
클라이언트가 데이터를 제출하려면 반드시 먼저 일련의 신원 증명서(credentials) 내의 레지스트리에 사용자 이름과 비밀번호를 전송해야 한다.
String username = "myUserName";
String password = "myPassword";
// Get authorization from the registry
PasswordAuthentication passwdAuth =
new PasswordAuthentication(username,
password.toCharArray();
Set creds = new HashSet();
creds.add(passwdAuth);
connection.setCredentials(creds);
Organization 생성하기 클라이언트는 Organization 오브젝트를 생성하고 이를 퍼블리쉬하기 전에 데이터를 populate한다.
Organization 오브젝트는 JAXR API 내의 복잡한 데이터 항목의 일종으로서, 여기에는 일반적으로 다음과 같은 오브젝트가 포함된다.
NameDescriptionKey. 이 오브젝트는 레지스트리에서 조직을 식별하는 ID를 나타낸다. 이 키는 사용자가 아니라 레지스트리에 의해 생성되며, 레지스트리에 조직이 제출된 후에 반환된다.PrimaryContact. 이는 레지스트리의 인가된 사용자를 참조하는 사용자 오브젝트이다.User오브젝트에는 일반적으로PersonName오브젝트와TelephoneNumber,EmailAddress,PostalAddress오브젝트의 컬렉션이 포함된다.Classification오브젝트 컬렉션Service오브젝트 및 관련ServiceBinding오브젝트.
// Create organization name and description
Organization org =
blcm.createOrganization("The Coffee Break");
InternationalString s =
blcm.createInternationalString("Purveyor of " +
"the finest coffees. Established 1914");
org.setDescription(s);
// Create primary contact, set name
User primaryContact = blcm.createUser();
PersonName pName = blcm.createPersonName("Jane Doe");
primaryContact.setPersonName(pName);
// Set primary contact phone number
TelephoneNumber tNum = blcm.createTelephoneNumber();
tNum.setNumber("(800) 555-1212");
Collection phoneNums = new ArrayList();
phoneNums.add(tNum);
primaryContact.setTelephoneNumbers(phoneNums);
// Set primary contact email address
EmailAddress emailAddress =
blcm.createEmailAddress("jane.doe@TheCoffeeBreak.com");
Collection emailAddresses = new ArrayList();
emailAddresses.add(emailAddress);
primaryContact.setEmailAddresses(emailAddresses);
// Set primary contact for organization
org.setPrimaryContact(primaryContact);
분류 추가하기 이전 팁에서는 조직들이 일반적으로 한 개 이상의 분류 스킴(taxonomy)을 기준으로 하는 한 가지 이상의 분류에 속하게 된다고 지적한 바 있다. 클라이언트가 taxonomy를 이용하여 조직에 대한 분류를 설정하려면 먼저 이용하고자 하는 분류 체계를 찾아야 하는데, 이때 클라이언트는
BusinessQueryManager를 이용하게 된다. findClassificationSchemeByName 메소드는 일련의 FindQualifier 오브젝트를 첫 번째 독립변수로 취하지만 이 독립변수는 null일 수 있다. // Set classification scheme to NAICS
ClassificationScheme cScheme =
bqm.findClassificationSchemeByName(null, "ntis-giv:naics");
그런 다음 클라이언트는 classification 스킴과 classification 스킴 내의 컨셉트(taxonomy 엘리먼트)를 이용하여 분류를 생성한다. 예를 들어, 다음 코드는 NAICS taxonomy 내에 조직에 대한 분류를 설정한다. 여기서, createClassification 메소드의 두 번째 및 세 번째 독립변수는 컨셉트의 이름과 값이다. // Create and add classification
Classification classification =
blcm.createClassification(cScheme,
"Snack and Nonalcoholic Beverage Bars", "722213");
Collection classifications = new ArrayList();
classifications.add(classification);
org.addClassifications(classifications);
서비스 역시 분류를 이용하므로 유사한 코드를 사용하여 Service조직에 서비스 및 서비스 바인딩 추가하기
대부분의 조직은 서비스 제공을 위해 자신을 레지스트리에 추가하므로 JAXR API는 조직에 서비스와 서비스 바인딩을 추가하기 위한 기능을 가지고 있다.
Organization 오브젝트와 마찬가지로, Service 오브젝트는 이름, 설명, 그리고 서비스 등록 시 레지스트리에 의해 생성되는 고유 키를 가지며, 여기에는 관련 분류가 포함될 수 있다. 서비스는 또한 일반적으로 서비스에 액세스하는 방법에 관한 정보를 제공하는 서비스 바인딩을 가지며,
ServiceBinding 오브젝트에는 통상적으로 설명, 액세스 URI, 및 서비스 바인딩과 기술 사양 간의 연결을 제공하는 사양 링크가 포함된다. 기술 사양은 서비스 바인딩을 활용하여 서비스를 이용하는 방법을 설명한다. 다음 코드 단편은 서비스 컬렉션을 생성하고, 서비스에 서비스 바인딩을 추가한 다음, 조직에 서비스를 추가하는 방법을 보여주고 있는데, 여기서는 액세스 URI를 명시할 뿐, 사양 링크는 명시하지 않는다. 액세스 URI는 실재하지 않으며 JAXR는 기본값으로 퍼블리쉬된 URI의 타당성을 검사하기 때문에, 바인딩은 그
validateURI 속성을 false로 설정한다. // Create services and service
Collection services = new ArrayList();
Service service = blcm.createService("My Service Name");
InternationalString is =
blcm.createInternationalString("My Service Description");
service.setDescription(is);
// Create service bindings
Collection serviceBindings = new ArrayList();
ServiceBinding binding = blcm.createServiceBinding();
is = blcm.createInternationalString("My Service Binding " +
"Description");
binding.setDescription(is);
// allow us to publish a fictitious URI without an error
binding.setValidateURI(false);
binding.setAccessURI("http://TheCoffeeBreak.com:8080/sb/");
serviceBindings.add(binding);
// Add service bindings to service
service.addServiceBindings(serviceBindings);
// Add service to services, then add services to organization
services.add(service);
org.addServices(services);
조직 퍼블리쉬하기 클라이언트가 조직 데이터를 추가하거나 수정하기 위해 사용하는 주 메소드는
saveOrganizations 메소드이다. 이 메소드는 기존의 조직이 없을 경우 하나 이상의 새 조직을 레지스트리 내에 생성한다. 조직은 존재하지만 일부 데이터가 변경된 경우에는 saveOrganizations 메소드가 데이터를 업데이트하고 교체한다. 클라이언트는 공개하고자 하는 정보를 조직에 populate한 후에 조직을 저장하고, 레지스트리가 그 응답으로 키를 반환하면 클라이언트는 이를 검색한다.
// Add organization and submit to registry
// Retrieve key if successful
Collection orgs = new ArrayList();
orgs.add(org);
BulkResponse response = blcm.saveOrganizations(orgs);
Collection exceptions = response.getException();
if (exceptions == null) {
System.out.println("Organization saved");
Collection keys = response.getCollection();
Iterator keyIter = keys.iterator();
if (keyIter.hasNext()) {
javax.xml.registry.infomodel.Key orgKey =
(javax.xml.registry.infomodel.Key) keyIter.next();
String id = orgKey.getId();
System.out.println("Organization key is " + id);
}
}
사양 컨셉트 퍼블리쉬하기 서비스 바인딩은 서비스 액세스 방법을 설명하는 기술 사양을 가질 수 있으며, 그 같은 사양의 일례로 WSDL 문서를 들 수 있다. 서비스 사양의 위치를 퍼블리쉬하려면(사양이 WSDL 문서인 경우),
Concept 오브젝트를 생성한 다음 Concept 오브젝트에 WSDL 문서의 URL을 ExternalLink 오브젝트로 추가한다. 다음의 예제를 살펴보자. 먼저
createConcept 메소드를 호출하여 HelloConcept라는 이름의 컨셉트를 생성한다. 컨셉트의 설명을 설정한 후 Hello 서비스 WSDL 문서의 URL에 대한 외부 링크를 생성한다. 그런 다음 컨셉트에 외부 링크를 추가한다. Concept specConcept =
blcm.createConcept(null, "HelloConcept", "");
InternationalString s =
blcm.createInternationalString(
"Concept for Hello Service");
specConcept.setDescription(s);
ExternalLink wsdlLink =
blcm.createExternalLink(
"http://localhost:8080/hello-jaxrpc/hello?WSDL",
"Hello WSDL document");
specConcept.addExternalLink(wsdlLink);
이어서 Concept 오브젝트를 WSDL 문서로 분류한다. UDDI 레지스트리에 대해 이를 수행하려면 레지스트리에서 잘 알려진 분류 스킴 uddi-org:types를 검색한다. (분류 스킴을 UDDI 용어로는 tModel이라고 한다.) 그런 다음 이름과 값 wsdlSpec을 이용하여 분류를 생성하고, 마지막으로 컨셉트에 분류를 추가한다. String schemeName = "uddi-org:types";
ClassificationScheme uddiOrgTypes =
bqm.findClassificationSchemeByName(null, schemeName);
Classification wsdlSpecClassification =
blcm.createClassification(uddiOrgTypes,
"wsdlSpec", "wsdlSpec");
specConcept.addClassification(wsdlSpecClassification);
마지막으로, 조직을 저장하는 것과 유사한 방식으로 saveConcepts 메소드를 이용하여 컨셉트를 저장한다. Collection concepts = new ArrayList(); concepts.add(specConcept); BulkResponse concResponse = blcm.saveConcepts(concepts);컨셉트를 퍼블리쉬한 후에는 일반적으로 WSDL 문서에 대한 컨셉트를 서비스 바인딩에 추가한다. 이를 위해
saveConcepts 메소드가 반환한 응답에서 컨셉트에 대한 키를 검색할 수 있으며, 키 검색 코드는 저장 조직에 대한 키를 찾는 코드와 유사하다. String conceptKeyId = null;
Collection concExceptions = concResponse.getExceptions();
javax.xml.registry.infomodel.Key concKey = null;
if (concExceptions == null) {
System.out.println("WSDL Specification Concept saved");
Collection keys = concResponse.getCollection();
Iterator keyIter = keys.iterator();
if (keyIter.hasNext()) {
concKey =
(javax.xml.registry.infomodel.Key) keyIter.next();
conceptKeyId = concKey.getId();
System.out.println("Concept key is " + conceptKeyId);
}
}
그런 다음 getRegistryObject() 메소드를 호출하여 레지스트리로부터 컨셉트를 검색할 수 있다. Concept specConcept =
(Concept) bqm.getRegistryObject(conceptKeyId,
LifeCycleManager.CONCEPT);
이어서 서비스 바인딩을 위한 SpecificationLink 오브젝트를 생성하고 컨셉트를 그 SpecificationObject의 값으로 설정한다. SpecificationLink specLink =
blcm.createSpecificationLink();
specLink.setSpecificationObject(specConcept);
binding.addSpecificationLink(specLink);
이제 서비스 및 서비스 바인딩으로 조직을 퍼블리쉬할 때는 WSDL 문서에 대한 링크도 함께 퍼블리쉬된다. 그러면 이전의 팁에서 설명한 것과 같은 질의를 통해 조직을 찾을 수 있다. 다른 누군가에 의해 컨셉트가 퍼블리쉬되었으나 키에 액세스할 수 없는 경우에는 이름과 분류를 이용하여 이를 찾을 수 있다. 코드는 JAXR 질의를 통해 WSDL 문서를 검색하는 데 사용하는 코드와 유사한데, 차이가 있다면 이름 패턴의 컬렉션을 함께 생성하여 이를 검색에 포함시킨다는 점이다. 다음은 관련 예제이다.
// Define name pattern
Collection namePatterns = new ArrayList();
namePatterns.add("HelloConcept");
BulkResponse br = bqm.findConcepts(null, namePatterns,
classifications, null, null);
레지스트리에서 데이터 삭제하기 이전에 제출한 어떤 데이터든지 레지스트리에서 삭제할 수 있으며, 레지스트리가 반환한 키를
deleteOrganizations, deleteServices, deleteServiceBindings, deleteConcepts등과 같은 BusinessLifeCycleManager 삭제 메소드 중 하나에 대한 독립변수로 이용할 수 있다. String id = key.getId();
System.out.println("Deleting organization with id " + id);
Collection keys = new ArrayList();
keys.add(key);
BulkResponse response = blcm.deleteOrganizations(keys);
Collection exceptions = response.getException();
if (exceptions == null) {
System.out.println("Organization deleted");
Collection retKeys = response.getCollection();
Iterator keyIter = retKeys.iterator();
javax.xml.registry.infomodel.Key orgKey = null;
if (keyIter.hasNext()) {
orgKey =
(javax.xml.registry.infomodel.Key) keyIter.next();
id = orgKey.getId();
System.out.println("Organization key was " + id);
}
}
컨셉트, 서비스, 서비스 바인딩 등을 삭제할 때도 유사한 메커니즘을 이용할 수 있다. 예제
본 팁의 예제에서는 JAXR을 이용하여 Java WSDP(Java Web Services Developer Pack) 1.6과 함께 제공되는 Service Registry 3.0 Early Access 릴리즈에 컨텐츠를 퍼블리쉬한다. 한편, 서비스 레지스트리는 UDDI 3.0와 마찬가지로 ebXML 3.0 사양을 구현한다.
시작하기
Service Registry를 이용하려면 먼저 Sun Java System Application Server를 시작해야 하고, Application Server를 시작하면 Service Rgistry와 Xindice 데이터베이스가 모두 자동으로 시작된다.
Sun Java System Application Server Platform Edition 8.1의 2005 Q2 릴리즈를 다운로드하여 설치한 다음 (아직 설치하지 않은 경우), Java WSDP 1.6을 설치한다. Java WSDP를 설치한 후 애플리케이션 서버를 재시작하고 어드민(admin) 콘솔(
http://localhost:4848/)로 브라우저를 연다. 어드민 콘솔의 “Web Applications” 링크에서 ‘soar’라는 이름의 웹 애플리케이션을 찾아보고, 웹 애플리케이션이 실행 중인지 확인한다. 웹 콘솔 시작하기
서비스 레지스트리를 위한 웹 콘솔을 시작한다. 웹 콘솔은 레지스트리에서 컨텐츠를 검색하고 퍼블리쉬할 수 있게 해주는 웹 기반 사용자 인터페이스이다. 웹 콘솔을 시작하려면
http://localhost:8080/soar로 웹 브라우저를 열어야 하고, 그런 다음 웹 콘솔 웰컴 화면이 표시되어야 한다.
레지스트리 계정 생성하기
레지스트리에 컨텐츠를 퍼블리쉬하려면 먼저 레지스트리 계정을 생성해야 한다. 하지만 이 서비스 레지스트리의 Early Access Release에서는 사용자 등록이 disable(사용하지 않음) 상태로 되어 있다. 향후에는 웰컴 페이지의 ‘Create User Account’ 링크를 클릭하여 계정을 생성하게 될 것이며, Early Access Release에서는 모든 사용자가
RegistryOperator의 ID를 가지고 사용자 인증 없이 레지스트리에 퍼블리쉬할 수 있다. 누구나 인증이 되기 때문에 이 권한을 행사할 때는 주의를 요하며 자신이 생성한 오브젝트만을 삭제해야 한다. 레지스트리에 퍼블리쉬하기
본 팁을 위한 예제 코드(
ttjul2005jaxr.jar)에는 JAXR을 이용하여 Service Registry에 컨텐츠를 퍼블리쉬하는 프로그램을 위한 소스 코드가 포함되어 있으며, 또한 여기에는 프로그램 컴파일 및 실행을 위해 Ant 스크립트와 함께 사용되는 build.xml 파일도 포함되어 있다. 예제 코드를 다운로드하여 압축을 해제한다. 그런 다음 JWSDP 1.6 내의 레지스트리 홈과 애플리케이션 서버 홈을 참조하도록
build.xml 파일을 편집한다. 초기에는 build.xml 파일의 값들이 다음과 같이 설정되어 있다. <property name="registry.home"
value="C:/Sun/jwsdp-1.6/registry" />
<property name="container.home" value="C:/Sun/AppServer/" />
이어서 다음 명령어를 입력하여 JAXR 업데이트 프로그램을 컴파일하고 실행한다. ant run아래와 유사한 출력이 표시되어야 한다.
run:
[java] Query URL is http://localhost:8080/soar/registry/soap
[java] Publish URL is http://localhost:8080/soar/registry/soap
[java] Created connection to registry
[java] Got registry service, query manager, and
life cycle manager
[java] Set AccessURI
[java] Created ExtrinsicObject from MyHelloService.wsdl
[java] Concept value: WSDL
[java] Classification scheme is ObjectType
[java] Set object type to WSDL
[java] Set MIME type to text/xml
[java] Set SpecificationObject for SpecificationLink
[java] Hello Service saved
[java] Service key is urn:uuid:
7c769453-58a6-49f4-bbf3-85c6ce7f1a05
BUILD SUCCESSFUL
Total time: 13 seconds
업데이트 확인하기
웹 콘솔로 복귀하여 Search 옵션을 이용하여 업데이트를 검증할 수 있다. 사전 설정된 Basic Query를 선택하고 Object Type을 __Service로 재설정한다. 그런 다음 Search 버튼을 누른다. 업데이트가 성공적으로 이루어졌다면 목록에 JAX-RPC Hello Service 엔트리가 표시되어야 한다.
JAXR로 레지스트리 업데이트를 수행하는 방법에 관한 자세한 내용을 보려면 Java Web Services Developer Pack 1.6 튜토리얼(영문)을 참조하기 바란다.
"Java EE" 카테고리의 다른 글
- Attach API (댓글 18개 / 트랙백 1개) 2007/09/03
- JSP 2.0 EXPRESSION LANGUAGE (댓글 1개 / 트랙백 0개) 2004/02/05
- 환경 엔트리를 이용해서 배포의 사용자 정의하기 (댓글 2개 / 트랙백 0개) 2003/12/24
- JAX-WS를 이용한 웹 서비스 개발 (댓글 1개 / 트랙백 0개) 2006/01/18
- EJB 2.1로 메시지 구동 빈 이용하기 (댓글 1개 / 트랙백 0개) 2005/05/18
- EclipseLink를 사용하여 JPA에서 반복 불가능한 읽기 방지 (댓글 0개 / 트랙백 1개) 2008/07/09
- 컴포넌트 시스템과 클래스 로더 경계 (댓글 1개 / 트랙백 0개) 2004/10/05
- JAX-WS Dispatch 및 Provider API를 이용한 문서 처리 (댓글 4개 / 트랙백 0개) 2006/09/15
- POJO를 Persistent Entity로 변환하기 (댓글 1개 / 트랙백 0개) 2005/12/27
- SAAJ 소개 (댓글 1개 / 트랙백 0개) 2005/06/08
2005/10/05 16:28
2005/10/05 16:28
댓글을 달아 주세요
자바 기능 하나 하나 알아갈수록 자바를 더 좋게 만드네요
2007/09/07 20:25좋은 정보 감사해요~
2007/09/19 05:03