2012-07-12 66 views
2

我有一个包含多个ejb-jar和war的EAR文件。在EJB-JAR,我注入接口的多种实现这样的:当ejb注入实现在同一个耳朵的战争中定义时,CDI不工作

@Inject 
@Any 
private Instance<ConfigurationProviderLocal> providerEjb; 

该接口的实现是在战争的定义。这个实现部署得很好。

在GlassFish V3.1登录我看到:

相关信息:对于EJB FormConfigurationProviderBean移植的JNDI名称: 【JAVA:全球/ com.dialog.edialog_eservices_ear_1.0.1-快照/结帐 - 成型 - 1.0 -SNAPSHOT /FormConfigurationProviderBean, 的java:全球/ com.dialog.edialog_eservices_ear_1.0.1-SNAPSHOT /结帐形式-1.0-SNAPSHOT /FormConfigurationProviderBean!com.dialog.sbsm.talisker.core.config.api.ConfigurationProviderLocal]

但在我实现的迭代:

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

实施FormConfigurationProviderBean永远不会重复。日志中没有消息可以解释这一点。另外,当我单独部署这场战争(不是在耳边,里面嵌入了依赖关系),注射工作正常。

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

+0

它似乎是一个类加载器问题:当我“导出”我的实现在另一个ejb-jar中,我声明它是我的战争(范围提供)et和耳朵(范围编译),所有作品都完美... – le2tbomi 2012-07-12 09:19:27

回答

0

这个应该工作,只要设置是正确的(可能是这种情况)。

我在JBoss世界(AS6)有一个类似的问题,EAR中的不同工件无法看到对方。我通过重新配置JBoss类加载机制来解决它,但这是纯粹的(和专有的)JBoss的东西。

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

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

+0

感谢您的链接。我不知道我是否会用它来解决这个问题,因为我通过使用ejb-jar来存储我的ejb“解决方法”。我不知道BeanMamaner最终的CDI扩展:我会将其加入书签。 – le2tbomi 2012-07-16 08:11:35

相关问题