2011-09-17 4 views

답변

40

java:global은 다른 응용 프로그램으로 간주되는 다른 EAR 모듈을 포함하는 전체 응용 프로그램 서버에 대해 전역 인 네임 스페이스입니다.

java:comp/env많이 더 작은 네임 스페이스입니다. 웹 모듈의 경우 JNDI에 대해 모두 하나의 '구성 요소'로 간주되는 모든 웹 구성 요소 (서블릿 등)에 해당하지만 EJB 빈에 대해서는 단일 빈에 대한 네임 스페이스이므로 각 빈은 JNDI로 간주되므로 별도의 구성 요소.

범위가 global과 comp 사이에있는 java:appjava:module도 있습니다.

java:comp/env과 다른 점 사이의 큰 차이점은 전자는 런타임시 읽기 전용이며 엄격히 말하면 일부 구성 요소에 주입되는 빈을 포함한다는 것입니다. 그래서 예. 고려해야 이때

@Stateless 
public class ExampleBean { 

    @EJB 
    OtherBean testBean; 

} 

를 필드 testBean 주입 된 특정 프록시는 java:comp/env로부터 획득 될 수 있지만 경우 java:comp/env하면 (JNDI 높은 상황이다) ExampleBean 내에서 참조된다.

그러나 EJB OtherBean에 대해 다른 프록시를 원하거나 주입이 수행되지 않았을 때 참조를 원하면 다른 범위의 참조를 얻을 수 있습니다. JNDI 호출을 수행하는 클래스에 따라 더 작은 범위를 사용할 수 있습니다. OtherBeanExampleBean와 같은 모듈에 정의되어있는 경우

예를 들어, 당신은 당신이 java:app을 사용할 수있는 동일한 응용 프로그램 (하지만 아마도 다른 모듈)의 경우, java:module를 사용할 수 있습니다.

마지막으로 java:global은 문맥에 의존하지 않으므로 항상 사용하는 것이 안전합니다. 예를 들어에서 사용할 수 있음을 의미합니다. 관리되지 않는 완전히 별개의 스레드. java:global을 사용하는 단점은 EAR이 사용되는 경우 응용 프로그램 이름과 모듈 이름을 포함해야하며, 그렇지 않으면 모듈 이름을 적어도 포함해야한다는 것입니다.