【问题标题】:Glassfish 3 EJB Injection from the jar archive failsjar 存档中的 Glassfish 3 EJB 注入失败
【发布时间】:2016-04-29 12:13:17
【问题描述】:

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

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

  • 模块 A
  • 模块 B

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

module-a.war 和其中的一些 ../lib/module-b.jar

我想要的是:在模块 B 中创建一个“通用”无状态 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 中的内容。

【问题讨论】:

  • 将它们放入唯一的 EAR(企业存档)中,然后重试
  • 尝试创建一个接口,用@Remote 注释,你的GeneralPurposeBean 实现。然后,在您的 ModuleA 上,按以下方式使用它:@EJB GeneralPurposeBeanInterface genPurpBean;.

标签: java ejb code-injection glassfish-3


【解决方案1】:

如果有人遇到同样的问题:

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

就是这样。

【讨论】:

    猜你喜欢
    • 2014-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-13
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多