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 라이브러리를 사용하지 않고 동작 클래스에 주입 할 수 있습니까?
첫 번째 옵션을 시도 할 때 이유는 확실하지만 경로가 [/ 슬라이드] 인 컨텍스트에서 서블릿 [작업]에 대해 예외가 발생했습니다. [javax.naming.NameNotFoundException : Name 슬라이드가이 컨텍스트에서 바인딩되지 않음] javax.naming.NameNotFoundException : 이름 슬라이드가이 컨텍스트에서 바인딩되지 않음 " – Parag
두 번째 옵션이 정상적으로 작동했습니다. – Parag