문제

나는 책에서 EJB 3에 대해 공부하고 있습니다. EJB 실행 그리고 이 책의 5장에서는 환경 명명 컨텍스트(ENC)에 대해 논의합니다.그것은 다음과 같이 말합니다 :

JNDI 참조가 EJB 2에서 어떻게 작동했는지 알고 있다면 환경 명명 컨텍스트 (ENC)에 익숙합니다.ENC는 글로벌 JNDI 이름에 의존하지 않고 응용 프로그램을 휴대 할 수 있습니다.자원에 대한 글로벌 JNDI 이름은 응용 프로그램 서버 구현마다 다르며 ENC를 사용하면 실제 글로벌 JNDI 이름을 하드 코딩하는 대신 Java : Comp/ ENV/로 시작하는 JNDI 위치를 사용할 수 있습니다.EJB 3은 본질적으로 코드에 사용 된 모든 JNDI 이름이 로컬 참조이며 Java : Comp/ Env/ Prefix로 이름을 자동으로 전제한다고 가정합니다.

글로벌 JNDI 이름이 무엇을 의미하는지 알 수 없습니까?앱 서버마다 달라야 하는 이유는 무엇인가요?

인용문에서 두 버전을 모두 참조하므로 질문에 EJB2와 EJB 3이라는 태그를 붙였습니다.다르게 생각하시면 자유롭게 편집해 주세요.

도움이 되었습니까?

해결책

전역 JNDI 이름은 기본 JNDI 컨텍스트의 이름을 사용합니다.예를 들어, WebSphere Application Server에서 원격 EJB는 기본적으로 다음과 같이 바인딩됩니다. ejb/<app>/<module>/<bean>#<interface>.애플리케이션에서 이 조회 문자열을 하드코딩하면 해당 애플리케이션은 다른 애플리케이션 서버(기본 이름에 대해 다른 체계를 사용할 수 있음)로 이식할 수 없으며 대상 애플리케이션이나 모듈 이름이 변경되면 동일한 WebSphere Application Server로도 이식할 수 없습니다.

EE의 솔루션은 애플리케이션이 EJB 참조를 선언하는 것입니다. java:comp/env 선택한 이름으로 컨텍스트를 지정합니다.배포자가 서버에 애플리케이션을 설치할 때 java:comp/env 환경에 적합한 전역 JNDI 이름으로 이름을 지정합니다.이와 동일한 패턴은 실제로 모든 EE 리소스(데이터 소스, String/int/boolean 구성 값 등)에서 사용되며 올바르게 사용하면 EE 플랫폼의 장점 중 하나입니다.

더 많은 맥락이 없으면 위의 발췌문이 무엇을 말하려고 하는지 알 수 없습니다.아마도 그것은 다음을 가리키는 것 같습니다. EJBContext.lookup 이는 효과적으로 상대 조회를 수행하는 지름길입니다. java:comp/env.

마지막으로 EJB 3.1이 다음의 표준 위치를 정의한다는 점을 언급하겠습니다. java:global/<app>/<module>/<bean>!<interface> EJB 바인딩의 경우.그럼에도 불구하고, 애플리케이션 전체에서(또는 EJB 클라이언트를 포함할 애플리케이션을 완전히 제어할 수 없는 경우 모듈 전체에서) 조회를 수행할 때 EJB 참조를 사용하는 것이 여전히 모범 사례입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top