20.0.0.12 이전 버전의 Liberty에서 EJB(Enterprise JavaBeans) Bean은
java:[scope] 네임스페이스에만
바인드되었습니다. EJB Bean은 서버 루트 JNDI(Java Naming and Directory Interface)
네임스페이스에 바인딩되지 않았습니다. 즉, JNDI 바인딩 이름을
정의할 수 없습니다. WebSphere Application Server traditional에서
JNDI 이름을 지정할 수 있도록 하는 EJB 바인딩 속성이
Liberty에서는 무시되었습니다.
ibm-ejb-jar-bnd.xml 파일의 다음 EJB 바인딩 속성이 Liberty에서는 무시되었습니다.
session simple-binding-namesession component-idsession local-home-binding-namesession remote-home-binding-nameinterface binding-nameibm-ejb-jar-bnd.xmi 파일의 다음 EJB 바인딩 속성이 Liberty에서는 무시되었습니다.
ejbBindings jndiName이 규칙은 20.0.0.12 이전 버전의 Liberty에서 무시되었던 모든 JNDI 바인딩 이름에 플래그를 지정합니다. 사용자의 애플리케이션이 EJB 참조를 사용하는 대신 직접 JNDI 검색에서 해당 이름을 사용하는 경우 Liberty 버전 20.0.0.12 이상을 사용하거나 애플리케이션을 수정해야 합니다.
EJB 참조를 사용하는 경우 20.0.0.12 이전 버전의 Liberty를 사용 중이면
이전 버전의 Liberty에서 Enterprise JavaBeans 검색에 대한 동작 변경
규칙이 java: 네임스페이스로 변환해야 하는 JNDI 이름을
플래그 지정합니다.
EJB 참조를 사용하지 않고 20.0.0.12 이전 버전의 Liberty를 사용 중인 경우
최신 버전의 Liberty를 사용하거나 동일한 JNDI 이름을 사용하여
EJB 참조를 작성하고 EJB 참조 binding-name을
java:[scope] JNDI 이름으로 설정하는 것이 좋습니다. EJB 참조를 추가하지 않을 경우 JNDI 이름으로 사용할 Java 코드를 스캔하여 검색 이름을
java: JNDI 이름으로 변환해야 합니다.
다음 예제에서는 버전 20.0.0.12 이상을 사용 중이지 않은 경우 검색 문제를 마이그레이션하는 데 도움이 되는 EJB 참조를 작성합니다.
참조된 EJB:
|
@Stateless public class MyEJB implements MyEJBInterface { public String sayHello(String name) { return "Hello there " + name + "."; } } |
원격 인터페이스:
|
@Remote public interface MyEJBInterface { String sayHello(String name); } |
다음은 Liberty에서 EJB 참조를 선언하는 방법에 대한 예제입니다. EJB와 EJB 참조를 링크하려면 2a, 2b, 3a 또는 3b와 함께 1a 또는 1b가 필요합니다. 예를 들어, 쉽고 성공적인 설치를 위해 권장되는 옵션은 1a와 2b이지만 1b가 3b와 함께 선언되면 권장 설정과 동일한 기능을 제공합니다.
|
public class TestServlet { @EJB(name="ejb/MyEJB") MyEJB myEjb; .... } |
|
<ejb-ref> <ejb-ref-name>ejb/MyEJB</ejb-ref-name> <ejb-ref-type>Session</ejb-ref-type> <remote>com.test.MyEJBInterface</remote> <ejb-ref> |
beanName
요소가 @EJB 어노테이션에 추가되어야 합니다. ejb-jar.xml
또는 web.xml을 사용하는 경우 <ejb-link> 요소가 기존
<ejb-ref> 요소에 추가되어야 합니다. 1a와 1b에 대한 수정사항은 다음과 같습니다.|
public class TestServlet { @EJB(name="ejb/MyEJB" beanName="MyEJB") MyEJB myEjb; .... } |
|
<ejb-ref> <ejb-ref-name>ejb/MyEJB</ejb-ref-name> <ejb-ref-type>Session</ejb-ref-type> <remote>com.test.MyEJBInterface</remote> <ejb-link>MyEJB</ejb-link> <ejb-ref> |
lookup 요소를 @EJB 어노테이션에 추가합니다. ejb-jar.xml
또는 web.xml을 사용하는 경우 <lookup-name> 요소가 기존
<ejb-ref> 요소에 추가되어야 합니다. 1a와 1b에 대한 수정사항은 다음과 같습니다.
|
public class TestServlet { @EJB(name="ejb/MyEJB" lookup="java:global/MyAPP/moduleA/MyEJB!com.test.MyEJBInterface") MyEJB myEjb; .... } |
|
<ejb-ref> <ejb-ref-name>ejb/MyEJB</ejb-ref-name> <ejb-ref-type>Session</ejb-ref-type> <remote>com.test.MyEJBInterface</remote> <lookup-name>java:global/MyAPP/moduleA/MyEJB!com.test.MyEJBInterface</lookup-name> <ejb-ref> |
|
<ejb-ref name="ejb/MyEJB" binding-name="java:global/MyAPP/moduleA/MyEJB!com.test.MyEJBInterface"/> |
lookup, lookup-name 또는 binding-name 속성이 동일한 애플리케이션에서 EJB를 참조하는 데 선택적으로 사용될 수 있습니다. 이 경우 값이 이 페이지의 끝 부분에서 설명된 적용 가능한 직접 EJB 검색으로 설정될 수 있습니다.
다음은 최종 EJB 참조 검색입니다.
|
public class TestEJBClient { public static void main(String[] args) { .... MyEJBInterface myEjbInterface = (MyEJBInterface) context.lookup("java:comp/env/ejb/MyEJB"); } } |
또는 EJB 참조를 사용하지 않고 직접 EJB를 조회하는 세 가지 옵션이 있습니다.
|
public class TestEJBClient { public static void main(String[] args) { .... MyEJBInterface myEjbInterface = (MyEJBInterface) context.lookup("java:module/MyEJB!com.test.MyEJBInterface"); } } |
|
public class TestEJBClient { public static void main(String[] args) { .... MyEJBInterface myEjbInterface = (MyEJBInterface) context.lookup("java:app/moduleA/MyEJB!com.test.MyEJBInterface"); } } |
|
public class TestEJBClient { public static void main(String[] args) { .... MyEJBInterface myEjbInterface = (MyEJBInterface) context.lookup("java:global/MyAPP/moduleA/MyEJB!com.test.MyEJBInterface"); } } |
EJB 바인딩 사용에 대한 자세한 정보는 Libery에서 EJB에 원격 인터페이스 사용 및 EJB 3.0 및 EJB 3.1 애플리케이션 바인딩 개요를 참조하십시오.