제5장 EJB 상호 운용성 및 RMI/IIOP

내용 목차

5.1. 개요
5.1.1. 트랜잭션 상호 운용(OTS)
5.1.2. 보안 상호 운용(CSIv2)
5.2. 상호 운용 설정
5.2.1. COS Naming Service 설정
5.2.2. 상호 운용성 활성화 설정
5.2.3. CSIv2 보안 상호 운용 설정
5.2.4. EJB RMI/IIOP 설정
5.3. RMI/IIOP 클라이언트
5.3.1. JEUS Managed Server
5.3.2. 다른 벤더 WAS
5.3.3. Standalone 클라이언트
5.4. 알려진 문제점(Known Issues)

본 장에서는 EJB의 상호 운용성 및 RMI/IIOP에 대해서 설명한다.

JEUS는 다른 WAS나 이기종 시스템 간에 원격 EJB 호출을 지원하기 위해 RMI/IIOP 프로토콜을 지원한다. RMI/IIOP는 OMG(http://omg.org)에서 정한 CORBA(Common Object Request Broker Architecture)에 기반한 것이며 EJB 상호 운용성(Interoperability)을 위해서 EJB 스펙에서 정한 표준 방식이다. JEUS 간에 또는 다른 WAS로부터 원격 호출을 지원해야 한다면 RMI/IIOP 상호 운용 기능을 사용할 것을 고려할 수 있다. RMI/IIOP 원격 호출 방식은 다른 WAS나 이기종 시스템을 지원하는 방식 중의 하나이다. 다른 WAS로부터 JEUS의 EJB를 호출하고 트랜잭션을 연동하는(또는 반대로) 다른 방법도 존재하지만 본 장에서는 RMI/IIOP 방식에 대해서만 설명한다.

상호 운용은 JEUS의 EJB를 다른 시스템에서 호출하는 것과 다른 WAS의 EJB를 JEUS에서 호출하는 것 2가지로 나눌 수 있다. 즉, JEUS가 RMI/IIOP 서버, 클라이언트 또는 둘 다 될 수 있다. 모든 경우에 마찬가지로 이를 지원할 수 있는 ORB(Object Request Broker) 런타임이 필요하며 트랜잭션과 보안의 상호 운용 또한 지원해야 한다.

JEUS에는 CORBA Naming Service를 지원하기 위한 COS Naming Server 및 Stub 클래스 없이도 Dynamic Stub을 메모리에서 자동으로 생성해 주는 ORB 런타임을 내장하고 있으며, 트랜잭션의 상호 운용을 위해 OTS(Object Transaction Service) 스펙과 보안 상호 운용을 위해 CSIv2(Common Secure Interoperability version 2) 스펙을 구현하고 있다.

CORBA 및 RMI/IIOP에 대해 이해하려면 다음의 관련 링크를 참조한다.

기본적으로 상호 운용은 설정되지 않았기 때문에 이를 사용하려면 반드시 관련된 서버 설정을 해야 한다.

JEUS의 EJB를 RMI/IIOP로 노출시키기 위해서는 MS의 Enable Interop 설정을 활성화해야 하고, deploy되는 EJB에 IIOP export 관련 설정이 있어야 한다. 반대로 JEUS를 RMI/IIOP 클라이언트로만 사용하는 경우에는 해당 MS의 Enable Interop 설정만 활성화하면 된다.

상호 운용과 관련된 사항은 WebAdmin을 사용하여 설정할 수 있다.

CSIv2 기능을 수행하기 위해서 2가지 추가적인 보안 환경 파일과 JEUS Security Manager의 정보를 이용한다. 설정할 추가적인 보안 환경 파일은 KeystoreTruststore 파일이다. 이 파일들의 경로와 필요한 정보는 WebAadmin이나 시스템 프로퍼티를 사용해서 설정할 수 있다.

보안 환경 파일설명
Keystore 파일 X.509를 위한 Key를 저장하고 Oracle 사에 의해서 공급된 X.509 keystore를 구현한 파일이다. Secure Socket Layer(SSL)가 호출됐을 때 이 파일이 클라이언트에게 보내진다.
Truststore 파일 X.509 클라이언트 측 증명 설정 파일이며, 형식은 Keystore와 같다.

CSIv2 관련 사항은 Enable InteropInterop Ssl Config에 설정한다.


CSIv2 관련 설정은 실행 스크립트의 시스템 프로퍼티를 통해서도 가능하다. 그러나 시스템 프로퍼티보다 WebAdmin 설정이 우선된다.

다음은 실행 스크립트 옵션 "–D"를 이용해서 설정되는 값에 대한 설명이다.

신뢰하는 노드 사이에서는 호출자의 authentication과 authorization이 불필요할 때도 있다.

jeus.ejb.csi.trusthosts 시스템 프로퍼티에 IP 주소를 설정하면 신뢰하는 노드의 불필요한 보안 점검을 피할 수 있다. JEUS Security Manager는 불특정 접근자에게 anonymous principal을 나타내는 'guest'를 사용한다.

RMI/IIOP 클라이언트는 다른 JEUS나 다른 벤더의 WAS 또는 Standalone 클라이언트가 될 수 있다. 본 절에서는 각각 어떤 방식으로 EJB를 사용할 수 있는지 설명한다.

JEUS MS에서 운용되는 애플리케이션에서 JEUS나 다른 벤더의 WAS 위에 있는 RMI/IIOP EJB를 호출하기 위한 방법은 다음과 같다.

먼저, COS Naming Server에서 EJB Home Reference(Stub)를 찾아와야 한다. 직접 찾아오는 경우에는 JNDI API의 corbaname URL을 사용해서 얻어올 수있다.


URL은 "corbaname:iiop:1.2@<host>:<port>#<name>" 형식으로 <host><port>는 COS Naming Server의 주소이다. 또는 직접 COS Naming Server를 PROVIDER URL로 지정하여 InitialContext를 얻어서 사용할 수도 있다.

다음의 예와 같이 PROVIDER URL을 지정하는 방식은 여러 가지가 있기 때문에 이 중에서 한 가지 방식으로 지정한다.


Dependency Injection을 사용하거나 "java:comp/env/" 형식의 논리적인 JNDI 이름을 사용하는 클라이언트의 경우에는 jeus-web-dd.xml과 같은 애플리케이션 JEUS DD 파일에서 <export-name>을 위의 corbaname URL로 매핑한다.



다른 벤더의 WAS에서 운용되는 애플리케이션에서 JEUS의 RMI/IIOP EJB를 호출하기 위한 방법은 “5.3.1. JEUS Managed Server”의 방식과 거의 동일하다. 이 경우 JEUS처럼 별도의 ORB 설정이 필요한지 확인하고, 필요하다면 설정을 해야 한다. 자세한 내용은 해당 제품의 관련 문서를 참고한다.

알려진 문제점들은 다음과 같다.