검색

5.5. 원격 자카르타 엔터프라이즈 빈 호출을 위한 IIOP 구성

download PDF

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 파일을 사용하거나 standalone-full.xml 구성 파일에서 모든 Jakarta Enterprise Beanss에 대해 IIOP를 활성화해야 합니다.

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 호출을 생성하는 방법을 보여줍니다.

  1. 서버에 Enterprise Bean 2 빈을 생성합니다.

    @Remote(IIOPRemote.class)
    @RemoteHome(IIOPBeanHome.class)
    @Stateless
    public class IIOPBean {
        public String sayHello() throws RemoteException {
             return "hello";
        }
    }
  2. 필수 메서드 create() 가 있는 홈 구현을 만듭니다. 이 메서드는 클라이언트에서 비즈니스 메서드를 호출하기 위해 원격 인터페이스의 프록시를 가져오도록 호출합니다.

    public interface IIOPBeanHome extends EJBHome {
        public IIOPRemote create() throws RemoteException;
    }
  3. Enterprise Bean에 대한 원격 연결을 위한 원격 인터페이스를 생성합니다.

    public interface IIOPRemote extends EJBObject {
        String sayHello() throws RemoteException;
    }
  4. 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 컨테이너에 배포할 준비가 되었습니다.

  5. 클라이언트 측에서 컨텍스트를 생성합니다.

    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 종속성으로 추가해야 할 수도 있습니다.

  6. 컨텍스트 조회를 사용하여 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();
    }
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.