我正在使用OpenEJB(TomEE ++)開發EJB 3項目。我應該使用哪個InitialContextFactory?
我有一個無狀態的會話bean,其名稱已經用annotation指定。
@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");
在你上面的代碼會發現,我必須使用名稱「SlideServiceLocalBean」,找到豆,而我已明確規定「SlideService」 bean的註解。
但是,當我嘗試在我的測試用例中找到bean時,我不得不使用另一個名稱字符串。
EJBContainer ejbContainer = EJBContainer.createEJBContainer();
Object oSlideService = ejbContainer.getContext().lookup("java:global/slides/SlideService");
爲什麼在查找名稱中存在差異?
我是否以正確的方式在Struts操作類中獲得InitialContext,還是應該使用另一個機制/ contextFactory來獲取初始上下文?
是否可以在不使用外部DI庫的情況下在動作類中注入bean?
確定爲什麼,但是當我嘗試第一個選項時,我得到一個異常「SEVERE:Servlet.service()用於上下文中的servlet [action]拋出異常[/ slides]拋出異常[javax.naming.NameNotFoundException:Name幻燈片未在此上下文中綁定],並具有根本原因 javax.naming.NameNotFoundException:名稱幻燈片未在此上下文中綁定「 – Parag 2012-04-16 08:36:13
第二個選項正常工作。 – Parag 2012-04-16 08:46:47