2012-04-11 5 views
4

OpenEJB (TomEE ++)를 사용하는 EJB 3 프로젝트에서 작업하고 있습니다.어느 InitialContextFactory를 사용해야합니까?

나는 이름이 주석으로 지정되어있는 상태 비 저장 세션 빈을 가지고있다.

@Stateless(mappedName="SlideService", name="SlideService") 
public class SlideService { 

    public Map<Category, List<SlideShow>> fetchSlideShowsByCategory() { 
     Application app = Application.getInstance(); 
     return app.retreiveAllSlideShowsByCategory(); 
    } 

    public SlideShow fetchSlideShow(long id) { 
     return null; 
    } 

    public List<SlideShow> fetchSlideShowsByTitle(String title) { 
     return null; 
    } 

} 

이렇게 Struts 액션 클래스에서 Session Bean을 조회합니다. 당신이 위의 코드에서

Properties properties = new Properties(); 
properties.setProperty Context.INITIAL_CONTEXT_FACTORY,"org.apache.openejb.client.LocalInitialContextFactory"); 
InitialContext initialContext = new InitialContext(properties); 
SlideService slideService = (SlideService)initialContext.lookup("SlideServiceLocalBean"); 

내가 명시 적으로 빈의 주석에 'SlideService'지정한 반면, 콩을 찾습니다, 이름이 'SlideServiceLocalBean'를 사용한다는 것을 알 수 있습니다.

그러나 테스트 케이스에서 bean을 찾으려고하면 다른 이름 문자열을 사용해야합니다.

EJBContainer ejbContainer = EJBContainer.createEJBContainer(); 
Object oSlideService = ejbContainer.getContext().lookup("java:global/slides/SlideService"); 

왜 조회 이름이 서로 다른가요?

Struts 액션 클래스에서 올바른 방법으로 InitialContext를 얻거나 초기 컨텍스트를 얻기 위해 다른 메커니즘/contextFactory를 사용해야합니까?

외부 DI 라이브러리를 사용하지 않고 동작 클래스에 주입 할 수 있습니까?

답변

2

당신의 스트럿츠의 액션 클래스 내에서이 시도 :

new InitialContext().lookup("java:global/slides/SlideService"); 

그것은 잘 작동합니다. 그래서 액션 클래스 내부에서이 작업을 수행해야합니다

new InitialContext().lookup("java:module/SlideService"); 

java:globaljava:module 이름에서 온 LocalInitialContextFactory가 선행 JavaEE 어플 (6) 글로벌 JNDI를 사용하는 조회.

이 문서는 어떻게 작동하는지 설명합니다.

귀하의 콩의 이름이 SlideService이며 (단일 콩은 @LocalBean, @Remote, @Local 많은 의견을 가질 수있다)을 @LocalBean보기이라는 것이있다, 그래서 이름 @LocalBean으로 SlideService를 찾는 것은 SlideServiceLocalBean

입니다. 이것은 기본 형식 일뿐입니다. conf/system.properties 파일에서 원하는대로 변경할 수 있습니다.

+0

첫 번째 옵션을 시도 할 때 이유는 확실하지만 경로가 [/ 슬라이드] 인 컨텍스트에서 서블릿 [작업]에 대해 예외가 발생했습니다. [javax.naming.NameNotFoundException : Name 슬라이드가이 컨텍스트에서 바인딩되지 않음] javax.naming.NameNotFoundException : 이름 슬라이드가이 컨텍스트에서 바인딩되지 않음 " – Parag

+0

두 번째 옵션이 정상적으로 작동했습니다. – Parag