예: CosNaming으로 초기 컨텍스트 가져오기
WebSphere® Application Server에서, 초기 컨텍스트는 부트스트랩 서버에서 얻습니다. 부트스트랩 서버에 대한 주소는 호스트와 포트로 구성됩니다. 초기 컨텍스트를 가져오려면, 부트스트랩 서버로 사용된 서버에 대한 호스트와 포트를 알아야 합니다.
초기 컨텍스트 가져오기는 다음 두 기본 단계로 구성됩니다.
- ORB 참조 얻기.
- ORB 참조를 사용하여 초기 컨텍스트를 얻습니다. 또는, 다중 이름 서버 주소로 기존 ORB를 사용하고 CORBA 오브젝트 URL로 string_to_object를 호출하여 초기 컨텍스트를 얻습니다.
ORB 참조 얻기
서버 프로세스에서 실행되지 않는 클라이언트인 순수 CosNaming 클라이언트는 초기 컨텍스트를 얻을 ORB 인스턴스를 작성하고 초기화해야 합니다. 서버 프로세스에서 실행되는 CosNaming 클라이언트는 JNDI 검색을 사용하여 서버 ORB에 대한 참조를 얻을 수 있습니다. 다음 예는 클라이언트 ORB를 작성하고 초기화하는 방법 및 서버 ORB 참조를 얻는 방법을 설명합니다.
클라이언트 ORB 인스턴스 작성
ORB 인스턴스를 작성하려면 정적 메소드, org.omg.CORBA.ORB.init를 호출합니다. init 메소드는 인스턴스화할 ORB 클래스의 이름에 대한 특성 세트를 필요로 합니다. 클래스 이름이 com.ibm.CORBA.iiop.ORB인 ORB 구현이 제품과 함께 포함됩니다. WebSphere Application Server ORB는 초기 참조를 지정할 수 있는 추가 특성을 인식합니다.
ORB 작성에 대한 기본 단계는 다음과 같습니다.
- Properties 오브젝트를 작성합니다.
- ORB 클래스 특성을 제품의 ORB 클래스로 설정합니다.
- 초기 참조 특성을 설정합니다.
- ORB.init를 호출하여 특성 오브젝트에서 전달합니다.
![[AIX]](../images/aixlogo.gif)
![[HP-UX]](../images/hpux.gif)
![[Linux]](../images/linux.gif)
![[Solaris]](../images/solaris.gif)
![[Windows]](../images/windows.gif)
...
import java.util.Properties;
import org.omg.CORBA.ORB;
...
Properties props = new Properties();
props.put("org.omg.CORBA.ORBClass", "com.ibm.CORBA.iiop.ORB");
props.put("com.ibm.CORBA.ORBInitRef.NameService",
"corbaloc:iiop:myhost.mycompany.com:2809/NameService");
props.put("com.ibm.CORBA.ORBInitRef.NameServiceServerRoot",
"corbaloc:iiop:myhost.mycompany.com:2809/NameServiceServerRoot");
ORB _orb = ORB.init((String[])null, props);
...
![[z/OS]](../images/ngzos.gif)
...
import java.util.Properties;
import org.omg.CORBA.ORB;
...
Properties props = new Properties();
props.put("org.omg.CORBA.ORBClass","com.ibm.ws390.orb.ORB");
props.put("com.ibm.CORBA.ORBInitRef.NameService",
"corbaloc:iiop:myhost.mycompany.com:2809/NameService");
props.put("com.ibm.CORBA.ORBInitRef.NameServiceServerRoot",
"corbaloc:iiop:myhost.mycompany.com:2809/NameServiceServerRoot");
ORB _orb = ORB.init((String[])null, props);
...
![[IBM i]](../images/iseries.gif)
...
import java.util.Properties;
import org.omg.CORBA.ORB;
...
Properties props = new Properties();
props.put("org.omg.CORBA.ORBClass","com.ibm.ws390.orb.ORB");
props.put("com.ibm.CORBA.ORBInitRef.NameService",
"corbaloc:iiop:myhost.mycompany.com:2809/NameService");
props.put("com.ibm.CORBA.ORBInitRef.NameServiceServerRoot",
"corbaloc:iiop:myhost.mycompany.com:2809/NameServiceServerRoot");
ORB _orb = ORB.init((String[])null, props);
...
서버 ORB에 대한 참조 얻기
다음과 같이 서버 프로세스에서 실행되는 CosNaming 클라이언트는 java: name에서 JNDI 검색으로 서버 ORB에 대한 참조를 얻을 수 있습니다.
...
import javax.naming.Context;
import javax.naming.InitialContext;
import org.omg.CORBA.ORB;
...
Context initialContext = new InitialContext();
ORB orb = (ORB) initialContext.lookup("java:comp/ORB");
...
ORB 참조를 사용하여 초기 이름 지정 참조 얻기
초기 CosNaming 컨텍스트를 얻는 두 가지 기본 방법이 있습니다. 두 방법 모두 ORB 메소드 호출과 관련됩니다. 첫 번째 방법은 초기 참조 키로 ORB에서 resolve_initial_references 메소드를 호출하는 것입니다. 이 호출이 작동하려면, ORB는 해당 키에 대해 초기 참조로 인스턴스화되어야 합니다. 다른 방법은 ORB에서 string_to_object 메소드를 호출하여, 부트스트랩 서버의 호스트와 포트로 CORBA 오브젝트 URL로 전달하는 것입니다. 다음 예는 두 방법을 설명합니다.
resolve_initial_references 호출
ORB 참조를 얻으면 ORB에서 resolve_initial_references 메소드를 호출하여 초기 컨텍스트에 대한 참조를 얻습니다. 다음 코드 예는 ORB 참조에서 resolve_initial_reference를 호출합니다.
...
import org.omg.CORBA.ORB;
import org.omg.CosNaming.NamingContextExt;
import org.omg.CosNaming.NamingContextExtHelper;
...
// Obtain ORB reference as shown in examples earlier in this section
...
org.omg.CORBA.Object obj = _orb.resolve_initial_references("NameService");
NamingContextExt initCtx = NamingContextExtHelper.narrow(obj);
...
키 NameService는 resolve_initial_references 메소드로 전달됩니다. 다른 초기 컨텍스트 키는 제품 서버에서 등록됩니다. 예를 들어, NameServiceServerRoot는 부트스트랩 이름 서버의 서버 루트 컨텍스트에 대한 참조를 얻는 데 사용될 수 있습니다. 서버 ORB에 등록된 초기 컨텍스트에 대한 자세한 정보는 초기 컨텍스트 지원에 대한 주제를 참조하십시오.
CORBA 오브젝트 URL로 string_to_object 호출
ORB가 초기 참조나 부트스트랩 특성으로 초기화되지 않은 경우, 또는 이 특성 설정이 초기 컨텍스트를 얻고자 하는 이름 서버가 아닌 다른 서버에 대한 경우이더라도 INS-준수 ORB를 사용하여 초기 컨텍스트를 얻을 수 있습니다. 부트스트랩 이름 서버를 명시적으로 지정하는 초기 컨텍스트를 얻으려면, ORB에서 string_to_object 메소드를 호출하여 부트스트랩 서버 호스트와 포트를 포함한 CORBA 오브젝트 URL로 전달합니다.
다음 예의 코드는 기존 ORB 참조에서 string_to_object 메소드를 호출하여, 원하는 초기 컨텍스트를 식별하는 CORBA 오브젝트 URL로 전달합니다.
...
import org.omg.CORBA.ORB;
import org.omg.CosNaming.NamingContextExt;
import org.omg.CosNaming.NamingContextExtHelper;
...
// Obtain ORB reference as shown in examples earlier in this section
...
org.omg.CORBA.Object obj =
orb.string_to_object("corbaloc:iiop:myhost.mycompany.com:2809/NameService");
NamingContextExt initCtx = NamingContextExtHelper.narrow(obj);
...
키 NameService는 corbaloc URL에서 사용됩니다. 다른 초기 컨텍스트 키는 제품 서버에서 등록됩니다. 예를 들어, NameServiceServerRoot를 사용하여 부트스트랩 이름 서버의 서버 루트 컨텍스트에 대한 참조를 얻을 수 있습니다.
기존 ORB 사용 및 CORBA 오브젝트 URL로 string_to_object 호출
CORBA 오브젝트 URL은 둘 이상의 부트스트랩 서버 주소를 포함할 수 있습니다. 서버 클러스터에서 초기 컨텍스트를 얻으려고 시도할 때 이 기능을 사용할 수 있습니다. URL로 클러스터에 있는 모든 서버의 부트스트랩 서버 주소를 지정할 수 있습니다. 이 조작은 최소한 하나 이상의 서버가 실행 중인 경우, 단일 장애 지점을 제거하여 성공합니다. 주소 목록이 처리되는 특정 순서는 보장되지 않습니다. 예를 들어, 목록에서 첫 번째 부트스트랩 주소가 사용 가능하더라도 두 번째 부트스트랩 주소가 초기 컨텍스트를 얻는 데 사용될 수 있습니다. 다중 주소를 포함하는 corbaloc URL의 예제는 다음과 같습니다.
...
import org.omg.CORBA.ORB;
import org.omg.CosNaming.NamingContextExt;
import org.omg.CosNaming.NamingContextExtHelper;
...
// Assume orb is an existing ORB instance
org.omg.CORBA.Object obj = orb.string_to_object(
"corbaloc::myhost1:9810,:myhost1:9811,:myhost2:9810/NameService");
NamingContextExt initCtx = NamingContextExtHelper.narrow(obj);
...