我有一个包含多个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?是否存在类加载器问题?
答案 0 :(得分:0)
如果设置正确(可能就是这种情况),应工作。
我在JBoss World(AS 6)中遇到了类似的问题,其中EAR中的不同工件无法相互看到。我通过重新配置JBoss类加载机制来解决它,但这是普通的(和专有的)JBoss的东西。
作为第一个调试步骤,我会做什么:查询BeanManager有关哪些bean真正的问题。这可能会给你一个提示。转储初始bean处理的小CDI-extension也可能有用。
如果它仍然看起来像CL问题,您可能会在Glassfish文档中找到该配置选项。如果这是一个已知的问题/问题,可能值得与GlassFish开发人员核实......