Java 迁移到WildFly后接口找不到Bean
在JEE应用程序(从JBoss 7.1.1迁移到WildFly 8.2.1)迁移之后,我们获取CDIBeans的方法停止了工作。该应用程序有几个模块(独立的JAR文件)组合成一个WAR文件,现在部署在WildFly上 要注入的Bean位于模块Java 迁移到WildFly后接口找不到Bean,java,jboss,cdi,wildfly,bean-manager,Java,Jboss,Cdi,Wildfly,Bean Manager,在JEE应用程序(从JBoss 7.1.1迁移到WildFly 8.2.1)迁移之后,我们获取CDIBeans的方法停止了工作。该应用程序有几个模块(独立的JAR文件)组合成一个WAR文件,现在部署在WildFly上 要注入的Bean位于模块服务中,它正在实现接口IPProcessor: @Loggable @Monitorable @Singleton @ConcurrencyManagement(CONTAINER) @Lock(READ) @LocalBean @ApplicationSc
服务中,它正在实现接口IPProcessor
:
@Loggable
@Monitorable
@Singleton
@ConcurrencyManagement(CONTAINER)
@Lock(READ)
@LocalBean
@ApplicationScoped
public class Processor implements IProcessor {
[...]
在应用程序的另一个模块(common
)中,还有其余的逻辑:接口ipprocessor
和我们搜索它的类
以下是检索BeanManager的方式:
public void keepBeanManager(@Observes AfterBeanDiscovery abd, BeanManager beanManager) {
bm = beanManager;
}
这就是通话的方式:
Set<Bean<?>> jobBeans = bm.getBeans(IProcessor.class);
Set正如Xavier Dury在评论中指出的那样,没有找到Bean,因为它被注释为@LocalBean
。删除@LocalBean
注释修复了该问题
从:
指定会话bean公开无接口视图
由于Processor
正在实现接口ipprocessor
,因此不应使用注释@LocalBean
对我来说仍然奇怪的是,为什么它在JBoss上工作…您尝试过没有@LocalBean吗?每个JAR都有bean.xml
?@JohnAment是的,每个JAR都有一个bean。xml@XavierDury成功了!删除LocalBean修复了这个问题。我一直在读,LocalBean仅在bean具有无接口视图时使用。所以我猜这一直都是错误的,因为处理器是通过接口IPProcessor公开的。我想知道为什么它能在JBoss上工作。非常感谢你!