2012-04-11 61 views
4

我正在使用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?

回答

2

試試這個您的Struts Action類中:

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

它應該工作的罰款。所以,這應該從動作類中:

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

使用LocalInitialContextFactory早的JavaEE 6全局JNDI當這些java:globaljava:module名來自查找。

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

你的bean的名字是SlideService,有所謂的@LocalBean視圖(一個bean可以有諸如@LocalBean,@Remote,@Local許多意見),所以名稱查找SlideService作爲@LocalBean最後是SlideServiceLocalBean

這只是默認格式。您可以將其更改爲conf/system.properties文件中的任何內容。

+0

確定爲什麼,但是當我嘗試第一個選項時,我得到一個異常「SEVERE:Servlet.service()用於上下文中的servlet [action]拋出異常[/ slides]拋出異常[javax.naming.NameNotFoundException:Name幻燈片未在此上下文中綁定],並具有根本原因 javax.naming.NameNotFoundException:名稱幻燈片未在此上下文中綁定「 – Parag 2012-04-16 08:36:13

+0

第二個選項正常工作。 – Parag 2012-04-16 08:46:47