Java 如何使用JMS和CDI 1.2查找EJB

Java 如何使用JMS和CDI 1.2查找EJB,java,queue,jms,cdi,wildfly-10,Java,Queue,Jms,Cdi,Wildfly 10,我正在将我的项目迁移到Wildfly10并使用CDIAPI 1.2 我一直在使用此结构获取beanManager,然后查找一些资源(例如EJB) 发生此异常: java.lang.IllegalStateException: WFLYWELD0039: Singleton not set for ModuleClassLoader for Module "org.apache.activemq.artemis.ra:main" from local module loader @629f06

我正在将我的项目迁移到Wildfly10并使用CDIAPI 1.2

我一直在使用此结构获取beanManager,然后查找一些资源(例如EJB)

发生此异常:

java.lang.IllegalStateException: WFLYWELD0039: Singleton not set for 
ModuleClassLoader for Module "org.apache.activemq.artemis.ra:main" 
from local module loader @629f0666 (finder: local module finder 
@1bc6a36e (roots: /home/confidence/wildfly-
10.1.0.Final/modules,/home/confidence/wildfly-
10.1.0.Final/modules/system/layers/base)). This means that you are 
trying to access a weld deployment with a Thread Context ClassLoader 
that is not associated with the deployment.
    at org.jboss.as.weld.services.ModuleGroupSingletonProvider$TCCLSingleton.get(ModuleGroupSingletonProvider.java:77)
    at org.jboss.as.weld.services.ModuleGroupSingletonProvider$TCCLSingleton.get(ModuleGroupSingletonProvider.java:134)
    at org.jboss.weld.Container.instance(Container.java:55)
    at org.jboss.as.weld.WeldProvider.getCDI(WeldProvider.java:61)
    at javax.enterprise.inject.spi.CDI.current(CDI.java:60)
    at br.com.project.ServiceLocator.getBeanManager(ServiceLocator.java:xx)
    at br.com.project.ServiceLocator.lookup(ServiceLocator.java:xx)
任何人都可以帮助如何在JMS中进行此查找


提前感谢。

您只需使用CDI即可获得您的服务实例,无需使用您的定位器,例如:

MyServices MyServices=CDI.select(MyServices.class.get())


您只需使用CDI即可获得服务实例,而无需使用定位器,例如:

MyServices MyServices=CDI.select(MyServices.class.get())


我也有同样的异常:由:java.lang.IllegalStateException:WFLYWELD0039:Singleton未为模块“org.apache.activemq.artemis.ra:main”设置ModuleClassLoader,来自local Module loader@133e16fd(finder:local Module finder位于org.jboss.weld.Container.instance(Container.java:55),来自org.jboss.as.weld.WeldProvider.getCDI(WeldProvider.java:61)位于javax.enterprise.inject.spi.CDI.current(CDI.java:60)请发布您的pom.xml我有一个非常大的项目,有很多子模块。哪些信息会有用?您是否声明了任何CDI 1.2库或一些实现,如weld-in依赖项?是的,我的根项目有
javax.enterprise CDI api 1.2
我有相同的异常:由java.lang.IllegalSt引起ATException:WFLYWELD0039:未为模块“org.apache.activemq.artemis.ra:main”的模块ClassLoader设置Singleton,该模块来自本地模块加载器@133e16fd(finder:local Module finder位于org.jboss.weld.Container.instance(Container.java:55),位于org.jboss.as.weld.WeldProvider.getCDI(WeldProvider.java:61),位于javax.enterprise.inject.spi.CDI.current(CDI.java:60)请发布您的pom.xml我有一个非常大的项目,有很多子模块。哪些信息会有用?您是否声明了任何CDI 1.2库或一些实现,如weld-in dependencies?是的,我的根项目有
javax.enterprise CDI api 1.2
,这只是一个盲点,但仍然-您可以尝试不这样做吗从MDB使用
CDI.current()
?相反,只需尝试将
@injectbeanmanager bm
直接插入MDB即可。MDB是(从CDI的角度来看)所谓的
InjectionTarget
因此仍然有资格被注入。我试图使用@Inject,但它返回了一个空对象。这只是一个盲击,但仍然-您可以尝试不使用MDB中的
CDI.current()
?相反,只需尝试将
@injectbeanmanager bm
直接注入MDB。MDB是(从CDI的角度来看)所谓的
InjectionTarget
因此仍然有资格被注入。我尝试使用@Inject,但它返回了一个空对象
@MessageDriven(mappedName = MyQueueProcessor.QUEUE_NAME, 
//...
public class RecebimentoMensagemCAM0021MDB {
    @Override
    protected void process(Object obj) {
        MyServices service = ServiceLocator.lookup(MyServices.class);
   //...
java.lang.IllegalStateException: WFLYWELD0039: Singleton not set for 
ModuleClassLoader for Module "org.apache.activemq.artemis.ra:main" 
from local module loader @629f0666 (finder: local module finder 
@1bc6a36e (roots: /home/confidence/wildfly-
10.1.0.Final/modules,/home/confidence/wildfly-
10.1.0.Final/modules/system/layers/base)). This means that you are 
trying to access a weld deployment with a Thread Context ClassLoader 
that is not associated with the deployment.
    at org.jboss.as.weld.services.ModuleGroupSingletonProvider$TCCLSingleton.get(ModuleGroupSingletonProvider.java:77)
    at org.jboss.as.weld.services.ModuleGroupSingletonProvider$TCCLSingleton.get(ModuleGroupSingletonProvider.java:134)
    at org.jboss.weld.Container.instance(Container.java:55)
    at org.jboss.as.weld.WeldProvider.getCDI(WeldProvider.java:61)
    at javax.enterprise.inject.spi.CDI.current(CDI.java:60)
    at br.com.project.ServiceLocator.getBeanManager(ServiceLocator.java:xx)
    at br.com.project.ServiceLocator.lookup(ServiceLocator.java:xx)