簡體   English   中英

我應該使用哪個InitialContextFactory?

[英]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:globaljava:module名稱來自LocalInitialContextFactory

本文檔解釋了它是如何工作的。

您的bean的名稱為SlideService並具有@LocalBean視圖(單個bean可以具有許多視圖,例如@ LocalBean,@ Remote,@ Local),因此將SlideService用作@LocalBean最終就是SlideServiceLocalBean

那只是默認格式。 您可以在conf/system.properties文件中將其更改為任意值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM