2

我有一个包含多个 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?有类加载器问题吗?

4

1 回答 1

0

如果设置正确(可能是这种情况),这应该可以工作。

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

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

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

于 2012-07-12T16:14:59.617 回答