当ejb注入实现在同一个战争中定义时,CDI不起作用

时间:2012-07-12 07:46:27

标签: java-ee cdi ear

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

@Inject
@Any
private Instance<ConfigurationProviderLocal> providerEjb;

此界面的实现在战争中定义。这个实现部署很好。

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

  

Infos:EJB FormConfigurationProviderBean的可移植JNDI名称:   【JAVA:全球/ com.dialog.edialog_eservices_ear_1.0.1-SNAPSHOT /结帐形式-1.0-快照   / FormConfigurationProviderBean,   的java:全球/ com.dialog.edialog_eservices_ear_1.0.1-SNAPSHOT /结帐形式-1.0-快照   /FormConfigurationProviderBean!com.dialog.sbsm.talisker.core.config.api.ConfigurationProviderLocal]

但是在我的实现的迭代中:

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

作为第一个调试步骤,我会做什么:查询BeanManager有关哪些bean真正的问题。这可能会给你一个提示。转储初始bean处理的小CDI-extension也可能有用。

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