EJB 클라이언트가 JNDI를 통해 원격 EJB를 호출하는 방법에 대한 자세한 내용

EJB 서비스 개발이 완료되면 *로 포장할 수 있습니다.jar, EJB 클라이언트 프로그램이 호출할 수 있도록 JBoss AS 7 또는 WildFlly AS 10과 같은 응용 서버에 배치됩니다.
EJB 클라이언트는 서버에 배포된 EJB 메서드를 호출하는 응용 프로그램입니다.운영 환경에 따라 EJB 클라이언트 프로그램은 다음과 같은 두 가지 유형으로 나눌 수 있습니다.
  • 독립적으로 응용되는 클라이언트(예를 들어 단원 테스트 프로그램)
  • JBoss AS7 서버에 배포된 클라이언트(클라이언트 서버에서 다른 EJB 서버에서 EJB 방법을 호출하는 프로그램)

  • 본고는 주로 EJB 클라이언트의 호출 형식으로 독립적으로 응용하는 것을 논의한다.두 번째 방식은 따로 기술이 있을 것이다.
    프로그래밍에 따라 EJB 클라이언트를 두 가지 유형으로 나눌 수 있습니다.
  • JBoss specific EJB client API 사용

  • JBoss/WildFly 서버의 전용 액세스 API로 원격 EJB를 호출하려면 JNDI API가 필요하지 않습니다. 본고는 토론하지 않습니다.
  • JNDI를 사용하여 EJB에 대한 프록시를 찾고 반환된 프록시를 호출합니다

  • 이것은 가장 일반적인 원격 EJB 액세스 방법입니다.먼저 JDNI를 통해 EJB의 에이전트를 찾고 에이전트를 통해 원격 EJB를 호출하는 방법입니다.
    JNDI가 원격 EJB를 호출하는 구체적인 방법은 다음과 같습니다.
    1. 어떤 방법을 사용하든지 JBoss AS 7/WildFly AS 8-10은 보안 검사를 하기 때문에 먼저 EJB 서버에 유효한 사용자/비밀번호를 설정해야 한다. 예를 들어add-user를 실행해야 한다.sh 스크립트 등, 여기 생략.
    2. 그 밖에 어떤 방법을 사용하든지 EJB 클라이언트 프로그램의 실행 환경classpath에 jboss-ejb-client가 있어야 한다.properties 파일, jboss-ejb-client를properties 파일이classpath에 추가되어야만 클라이언트가 원격 EJB 방법을 성공적으로 호출할 수 있습니다.즉시 jboss-ejb-client.properties 파일의 내용은 비어 있어야 합니다.
    JBoss AS 7에 배치된 EJB 방법을 호출할 때 jboss-ejb-client.properties 파일의 내용은 다음과 같습니다.
    remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
    
    remote.connections=default
    
    remote.connection.default.host=10.20.30.40
    remote.connection.default.port = 4447
    remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
    
    remote.connection.default.username=appuser
    remote.connection.default.password=apppassword
    

    WildFly AS 7에 배치된 EJB 방법을 호출할 때 jboss-ejb-client.properties 파일의 내용은 다음과 같습니다.
    endpoint.name=client-endpoint
    remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
    
    remote.connections=default
    
    remote.connection.default.host=10.20.30.40
    remote.connection.default.port=8080
    remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
     
    remote.connection.default.username=appuser
    remote.connection.default.password=apppassword
    

    3.%WildFly%/bin/jboss-client.jar 파일을 Eclipse 프로젝트에 복사하고classpath에 추가
    4. JNDI 컨텍스트 매개변수 설정
    JNDI 컨텍스트의 매개변수는 사용된 원격 JNDI 유형과 연관됩니다.구체적으로는 http-remoting 방식과 jb 방식 두 가지로 나눌 수 있다.
    예를 들면 다음과 같습니다.
    http-remoting 방식
            props.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");  
            props.put(Context.PROVIDER_URL, "http-remoting://localhost:8080");
            props.put("jboss.naming.client.ejb.context", true);
            String fullEJBName = "CustomView/ToolsCommonEJB//ToolsCommonBean!com.jdsu.netcomplete.common.framework.toolscommon.ToolsCommonRemote";
    

    ... 과 같다
    ejb 방식
            props.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
        	String fullEJBName = "ejb:CustomView/ToolsCommonEJB//ToolsCommonBean!com.jdsu.netcomplete.common.framework.toolscommon.ToolsCommonRemote";
    

    이로써 EJB 클라이언트 개발을 완료하고 상세 코드는 다음과 같습니다.
    public class ToolsCommonEjbTest {
    	
        private static IToolsCommon remote;
    
        @Before
        public void setUp() throws Exception
        {
            Properties props = new Properties();
            props.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
            Context ic = new InitialContext(props);
            String fullEJBName = "ejb:CustomView/ToolsCommonEJB//ToolsCommonBean!com.jdsu.netcomplete.common.framework.toolscommon.ToolsCommonRemote";
            remote = (IToolsCommon) ic.lookup( fullEJBName );
        } 
        @Test
        public void sendMessage() {
            ... 
            try { 
                remote.sendAlertMessage(userList, "Hi");
            } catch( Exception e ) {
                e.printStackTrace();
                fail( "Message not Sent" );
            }
        }
        ...
    }

    좋은 웹페이지 즐겨찾기