java:comp/env
과 java:global
(3.1 스펙 관련) 사이의 관계는 무엇입니까?
java:comp/env
에는 EJB 참조와 관련된 것으로 보입니다. 이 경우 "구체적"이라는 의미는 무엇입니까?java : comp/env와 java : global 사이의 관계는 무엇입니까?
답변
java:global
은 다른 응용 프로그램으로 간주되는 다른 EAR 모듈을 포함하는 전체 응용 프로그램 서버에 대해 전역 인 네임 스페이스입니다.
java:comp/env
은 많이 더 작은 네임 스페이스입니다. 웹 모듈의 경우 JNDI에 대해 모두 하나의 '구성 요소'로 간주되는 모든 웹 구성 요소 (서블릿 등)에 해당하지만 EJB 빈에 대해서는 단일 빈에 대한 네임 스페이스이므로 각 빈은 JNDI로 간주되므로 별도의 구성 요소.
범위가 global과 comp 사이에있는 java:app
및 java:module
도 있습니다.
java:comp/env
과 다른 점 사이의 큰 차이점은 전자는 런타임시 읽기 전용이며 엄격히 말하면 일부 구성 요소에 주입되는 빈을 포함한다는 것입니다. 그래서 예. 고려해야 이때
@Stateless
public class ExampleBean {
@EJB
OtherBean testBean;
}
를 필드 testBean
주입 된 특정 프록시는 java:comp/env
로부터 획득 될 수 있지만 경우 java:comp/env
하면 (JNDI 높은 상황이다) ExampleBean 내에서 참조된다.
그러나 EJB OtherBean
에 대해 다른 프록시를 원하거나 주입이 수행되지 않았을 때 참조를 원하면 다른 범위의 참조를 얻을 수 있습니다. JNDI 호출을 수행하는 클래스에 따라 더 작은 범위를 사용할 수 있습니다. OtherBean
이 ExampleBean
와 같은 모듈에 정의되어있는 경우
예를 들어, 당신은 당신이 java:app
을 사용할 수있는 동일한 응용 프로그램 (하지만 아마도 다른 모듈)의 경우, java:module
를 사용할 수 있습니다.
마지막으로 java:global
은 문맥에 의존하지 않으므로 항상 사용하는 것이 안전합니다. 예를 들어에서 사용할 수 있음을 의미합니다. 관리되지 않는 완전히 별개의 스레드. java:global
을 사용하는 단점은 EAR이 사용되는 경우 응용 프로그램 이름과 모듈 이름을 포함해야하며, 그렇지 않으면 모듈 이름을 적어도 포함해야한다는 것입니다.