从 jar 存档中注入 Glassfish 3 EJB 失败

Glassfish 3 EJB Injection from the jar archive fails

我在 glassfish 3 中的 EJB 注入有一个奇怪的问题。也许我只是不完全明白我在做什么:)

所以这是一个问题:我的项目由 2 个模块组成,这些模块将用 gradle 组装。

模块 A 是一个普通的 glassfish 模块,也可以正常工作。模块 B 包含一般用途人员。模块 B 也是 A 的依赖项。模块 A 将作为 *.war 存档部署到 glassfish,模块 B 作为 *.jar 存档位于相应的 lib 文件夹中:

module-a.war 里面有些东西../lib/module-b.jar

我想要的是:在模块B中创建一个"general purpose"无状态bean,并在模块A中使用它。但是它不起作用...

在模块 B 中我创建了一个 bean:

@Stateless
public class GeneralPurposeBean {}

我尝试在模块 A 中使用它,如下所示:

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

所以我已经提到了 GeneralPurposeBean 在 *.jar 中

每次我尝试使用 bean 时都会失败,并出现以下异常:

javax.ejb.CreateException: Could not create stateless EJB

当我将 bean 移动到模块 A 时,它工作正常,但我想与其他模块共享此 bean,这将在未来开发。有人可以向我解释这里有什么问题吗?因此,bean 将被识别但无法创建。我通过调试发现的是

JCDIServiceImpl#_createJCDIInjectionContext

不将 bean 识别为企业 bean。因此 *.war 中可直接访问的所有内容都将被正确创建,但 *.jar 中的内容不会被创建。

案例中有人遇到同样的问题:

如果您将其中一个模块视为依赖项,并且此模块包含您想要注入的 EJB bean,那么我的问题的解决方案是将 /META-INF/beans.xml 文件放入模块中。否则容器不会将 bean 识别为 EJB。

就是这样。