5.5. 원격 자카르타 엔터프라이즈 빈 호출을 위한 IIOP 구성
JBoss EAP는 JBoss EAP에 배포된 Jakarta Enterprise Beans에 대한 CORBA/IIOP 기반 액세스를 지원합니다.
<iiop>
요소는 Jakarta Enterprise Bean의 IIOP, CORBA, 호출을 활성화하는 데 사용됩니다. 이 요소가 있다는 것은 iiop-openjdk
하위 시스템이 설치되어 있음을 의미합니다. <iiop>
요소에는 다음 두 가지 특성이 포함되어 있습니다.
-
enable-by-default
: 이것이사실이라면
Enterprise Beans 2.x를 사용하는 모든 Jakarta Enterprise Beans 홈 인터페이스가 IIOP를 통해 노출됩니다. 그렇지 않으면jboss-ejb3.xml
을 통해 명시적으로 활성화해야 합니다. -
use-qualified-name
: 이 경우Jakarta
Enterprise Beans는myear/myejbjar/MyBean
과 같은 배포의 애플리케이션 및 모듈 이름이 포함된 바인딩 이름을 사용하여 CORBA 명명 컨텍스트에 바인딩됩니다.false인
경우 기본 바인딩 이름은 단순히 빈 이름입니다.
일반적으로 Jakarta Enterprise Beans 3 원격 호출에는 원격 액세스 인터페이스가
필요하지 않지만 IIOP를 사용하여 노출되는 Jakarta Enterprise Beans 3 빈에는 필요합니다. jboss-ejb3.xml 파일을 사용하거나
구성 파일에서 모든 Jakarta Enterprise Beanss에 대해 IIOP를 활성화해야 합니다.
standalone-full.xml
IIOP 활성화
IIOP를 활성화하려면 IIOP OpenJDK ORB 하위 시스템이 설치되어 있어야 하고, <iiop/>
요소가 ejb3
하위 시스템 구성에 있어야 합니다. 배포와 함께 제공되는 standalone-full.xml
구성에는 이러한 두 가지 구성이 모두 활성화되어 있습니다.
IIOP는 서버 구성 파일의 iiop-openjdk
하위 시스템에서 구성됩니다.
<subsystem xmlns="urn:jboss:domain:iiop-openjdk:2.1">
다음 관리 CLI 명령을 사용하여 iiop-openjdk
하위 시스템에 액세스하고 업데이트합니다.
/subsystem=iiop-openjdk
IIOP 요소는 서버의 기본 동작을 제어하는 두 개의 특성을 사용합니다.
<subsystem xmlns="urn:jboss:domain:ejb3:5.0"> ... <iiop enable-by-default="false" use-qualified-name="false"/> ... </subsystem>
다음 관리 CLI 명령은 ejb3
하위 시스템 아래에 <iiop>
요소를 추가합니다.
/subsystem=ejb3/service=iiop:add(enable-by-default=false, use-qualified-name=false)
IIOP를 사용하여 커뮤니티를 연결하는 자카르타 엔터프라이즈 빈 만들기
다음 예제에서는 클라이언트에서 원격 IIOP 호출을 생성하는 방법을 보여줍니다.
서버에 Enterprise Bean 2 빈을 생성합니다.
@Remote(IIOPRemote.class) @RemoteHome(IIOPBeanHome.class) @Stateless public class IIOPBean { public String sayHello() throws RemoteException { return "hello"; } }
필수 메서드
create()
가 있는 홈 구현을 만듭니다. 이 메서드는 클라이언트에서 비즈니스 메서드를 호출하기 위해 원격 인터페이스의 프록시를 가져오도록 호출합니다.public interface IIOPBeanHome extends EJBHome { public IIOPRemote create() throws RemoteException; }
Enterprise Bean에 대한 원격 연결을 위한 원격 인터페이스를 생성합니다.
public interface IIOPRemote extends EJBObject { String sayHello() throws RemoteException; }
META-INF
에 설명자 파일jboss-ejb3.xml
을 만들어 원격 호출을 위한 빈을 도입합니다.<?xml version="1.0" encoding="UTF-8"?> <jboss:ejb-jar xmlns:jboss="http://www.jboss.com/xml/ns/javaee" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:iiop="urn:iiop" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-ejb3-2_0.xsd http://java.sun.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-ejb3-spec-2_0.xsd urn:iiop jboss-ejb-iiop_1_0.xsd" version="3.1" impl-version="2.0"> <assembly-descriptor> <iiop:iiop> <ejb-name>*</ejb-name> </iiop:iiop> </assembly-descriptor> </jboss:ejb-jar>
참고JAR 파일의 설명자와 함께 빈을 JBoss EAP 컨테이너에 배포할 준비가 되었습니다.
클라이언트 측에서 컨텍스트를 생성합니다.
System.setProperty("com.sun.CORBA.ORBUseDynamicStub", "true"); final Properties props = new Properties(); props.put(Context.PROVIDER_URL, "corbaloc::localhost:3528/JBoss/Naming/root"); props.setProperty(Context.URL_PKG_PREFIXES, "org.jboss.iiop.naming:org.jboss.naming.client"); props.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.cosnaming.CNCtxFactory"); props.put(Context.OBJECT_FACTORIES, "org.jboss.tm.iiop.client.IIOPClientUserTransactionObjectFactory");
참고클라이언트는
wildfly iiop openjdk
라이브러리를 클래스 경로에 추가해야 합니다. 또한 클라이언트는org.wildfly:wildfly-iiop-openjdk
아티팩트를 Maven 종속성으로 추가해야 할 수도 있습니다.컨텍스트 조회를 사용하여
IIOPBean 알아보려면 홈
인터페이스에 대한 참조를 좁힙니다. 그런 다음 홈 인터페이스create()
메서드를 호출하여 원격 인터페이스에 액세스하여 메서드를 호출할 수 있습니다.try { Context context = new InitialContext(props); final Object iiopObj = context.lookup(IIOPBean.class.getSimpleName()); final IIOPBeanHome beanHome = (IIOPBeanHome) PortableRemoteObject.narrow(iiopObj, IIOPBeanHome.class); final IIOPRemote bean = beanHome.create(); System.out.println("Bean saying: " + bean.sayHello()); } catch (Exception e) { e.printStackTrace(); }