2016-04-29 108 views
0

我有一個EJB注入一個奇怪的問題在GlassFish 3.也許我只是沒有完全理解我做什麼:)Glassfish的EJB 3注無法

因此,這是一個問題:我的項目包括2個模塊將與gradle組裝。

  • 模塊A
  • 模塊B

模塊A是一個通常的glassfish模塊也工作正常。模塊B包含通用人員。模塊B也是A的依賴關係。模塊A將作爲* .war歸檔文件部署到glassfish中,模塊B將作爲* .jar歸檔文件存儲在相應的lib文件夾中:

module-a.war and somewere inside of它../lib/module-b.jar

我想要的是:在模塊B中創建一個「通用」無狀態bean並在模塊A中使用它。但它不起作用...

在模塊BI創建一個bean:

@Stateless 
public class GeneralPurposeBean {} 

,我嘗試使用它在該模塊的如下S:

... 
@EJB 
private GeneralPurposeBean genPurpBean; 
... 

因此,如何我已經提到的GeneralPurposeBean在的* .jar

每次當我嘗試使用它失敗,以下異常豆:

javax.ejb.CreateException: Could not create stateless EJB 

當我將bean移動到模塊A上,但它可以正常工作,但我希望將此bean與其他模塊共享,這些模塊將在未來開發。有人可以向我解釋什麼是錯的嗎?所以這個bean將被識別,但它不能被創建。我通過調試發現的是:

JCDIServiceImpl#_createJCDIInjectionContext 

無法將bean識別爲企業bean。因此,可直接訪問的* .war中的所有內容都將被正確創建,而不是* .jar中的內容。

+1

將它們放入唯一的EAR(企業檔案)中,然後再試一次 – Riadh

+0

嘗試使用'@ Remote'註釋您的'GeneralPurposeBean'實現的接口。然後,在您的ModuleA上,按以下方式使用它:'@EJB GeneralPurposeBeanInterface genPurpBean;'。 – aribeiro

+0

[JavaEE 6 WAR vs EAR中的打包EJB]的可能重複(http://stackoverflow.com/questions/4441237/packaging-ejb-in-javaee-6-war-vs-ear) –

回答

0

對於萬一有人有相同的問題:

如果你把你的模塊作爲依賴的一個,該模塊包含要被注入EJB豆我的問題的解決方案是把/ META-INF/beans.xml文件放入模塊中。否則容器不會將這些bean識別爲EJB。

就是這樣。