2016-04-29 67 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。

就是这样。