【问题标题】:CDI doesn't work when ejb inject implementation define in war of same ear当 ejb 注入实现在同一耳朵的战争中定义时,CDI 不起作用
【发布时间】:2012-07-12 07:46:26
【问题描述】:

我有一个包含多个 ejb-jar 和 war 的 EAR 文件。在一个 ejb-jar 中,我注入了多个这样的接口实现:

@Inject
@Any
private Instance<ConfigurationProviderLocal> providerEjb;

这个接口的一个实现是在一个战争中定义的。此实现部署良好。

在 glassfish v3.1 日志中我看到:

信息:EJB FormConfigurationProviderBean 的可移植 JNDI 名称: [java:global/com.dialog.edialog_eservices_ear_1.0.1-SNAPSHOT/checkout-form-1.0-SNAPSHOT /FormConfigurationProviderBean, java:global/com.dialog.edialog_eservices_ear_1.0.1-SNAPSHOT/checkout-form-1.0-SNAPSHOT /FormConfigurationProviderBean!com.dialog.sbsm.talisker.core.config.api.ConfigurationProviderLocal]

但在我的实现的迭代中:

for (ConfigurationProviderLocal provider : providerEjb) {
            [...]
        }

实现FormConfigurationProviderBean 永远不会迭代。我在日志中没有可以解释这一点的消息。

此外,当我单独部署战争时(不是在耳内,其中嵌入了依赖项),注入工作正常。

在战争中定义实施时是否支持 CDI?有类加载器问题吗?

【问题讨论】:

  • 这似乎是一个类加载器问题:当我在另一个 ejb-jar 中“导出”我的实现并将其声明为我的战争(提供范围)和耳朵(范围编译)的依赖时,所有完美运行...

标签: jakarta-ee cdi ear


【解决方案1】:

应该工作,前提是设置正确(可能是这种情况)。

我在 JBoss World(在 AS 6 上)中遇到了类似的问题,即 EAR 中的不同工件无法相互看到。我通过重新配置 JBoss 类加载机制解决了这个问题,但这是普通的(和专有的)JBoss 东西。

作为调试的第一步,我会做什么:向BeanManager 查询真正存在的 bean。这可能会给你一个提示。转储初始 bean 处理的小型 CDI-extension 也会有所帮助。

如果它仍然看起来像一个 CL 问题,您可以在 Glassfish 文档中找到它的配置选项。如果这是一个已知问题/问题,可能值得与 GlassFish 开发人员核实......

【讨论】:

  • 感谢您的链接。我不知道我是否会使用它们来解决这个问题,因为我通过使用 ejb-jar 来存储我的 ejb 来“解决”它。我不知道 BeanMamaner 结束 CDI 扩展:我会为它添加书签。
猜你喜欢
  • 2012-08-28
  • 2011-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多