[英]Which InitialContextFactory should I use?
我正在使用OpenEJB(TomEE ++)進行EJB 3項目。
我有一個無狀態會話bean,其名稱已通過注釋指定。
@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”來定位該bean,而我已在bean的注釋中顯式指定了“ SlideService”。
但是,當我嘗試在測試用例中定位bean時,我必須使用另一個名稱字符串。
EJBContainer ejbContainer = EJBContainer.createEJBContainer();
Object oSlideService = ejbContainer.getContext().lookup("java:global/slides/SlideService");
為什么查找名稱存在差異?
我是在Struts動作類中以正確的方式獲取InitialContext還是應該使用其他機制/ contextFactory獲取初始上下文?
是否可以在不使用外部DI庫的情況下將bean注入action類中?
在您的struts動作類中嘗試以下操作:
new InitialContext().lookup("java:global/slides/SlideService");
它應該工作正常。 所以應該從動作類內部進行:
new InitialContext().lookup("java:module/SlideService");
使用LocalInitialContextFactory
的查找早於JavaEE 6 Global JNDI,這些java:global
和java:module
名稱來自LocalInitialContextFactory
。
本文檔解釋了它是如何工作的。
您的bean的名稱為SlideService
並具有@LocalBean
視圖(單個bean可以具有許多視圖,例如@ LocalBean,@ Remote,@ Local),因此將SlideService用作@LocalBean
最終就是SlideServiceLocalBean
那只是默認格式。 您可以在conf/system.properties
文件中將其更改為任意值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.