Jakarta ee 未从单例EJB接收到CDI事件
我在CDI事件上有点挣扎。 我有一个实现为CDI单例的类,几乎如下所示:Jakarta ee 未从单例EJB接收到CDI事件,jakarta-ee,ejb,cdi,Jakarta Ee,Ejb,Cdi,我在CDI事件上有点挣扎。 我有一个实现为CDI单例的类,几乎如下所示: import import javax.inject.Singleton; @Singleton public class MyClass{ @Inject Event<StatusUpdateEvent> events; public MyClass(){}; public void myMethod(){ events.fire(new StatusUpdat
import import javax.inject.Singleton;
@Singleton
public class MyClass{
@Inject
Event<StatusUpdateEvent> events;
public MyClass(){};
public void myMethod(){
events.fire(new StatusUpdateEvent());
}
}
问题是当调用myMethod
时,没有从myObserver接收到任何事件。
MyClass
包含在MyEAR项目的库jar中(jar中有beans.xml),而MyObserver
是同一EAR的EJB
我做错了什么?非常感谢你的帮助 CDI注入不能跨类装入器边界工作。因为您的项目是一个EAR,所以ejb jar很可能位于一个单独的类装入器上。例如,如果项目结构为:
--EAR
|--EAR/lib
|--|--EAR/lib/CDIBeans.jar
|--EJBArchive.jar
那么,
CDIBean.jar
中的任何bean都将无法注入到您的EJBArchive.jar
中来评论我的问题。我注意到的一点是,前面提到的ejb和另一个单例在不同的线程池(admin线程池和thread-pool-1)上。这意味着什么吗?谢谢你的回答,我只想说一件事。按照您的示例,我实际上能够从CDIBean.jar注入依赖项。例如,我可以在MyObserver中注入(回到我的示例)整个MyClass而没有任何问题,但是当涉及到事件时,问题就出现了。正如我在第一篇文章中所评论的那样,我很担心线程池,有什么想法吗?规范中提到了与线程上下文绑定的作用域,但到目前为止,我似乎找不到任何与事件相关的内容。我将尝试复制您的问题,看看是否有什么想法。与此同时,我决定切换到亲爱的老JMS。据我所知,CDI事件在“更容易”的上下文中,而不是在结构复杂的应用程序中,是可以使用的。无论如何,非常感谢你的建议。@Fabbicca抱歉,我没有早点给你回复。我能找到的唯一其他信息是。这让我对它有所了解,但它仍然不允许我让它工作。也许对你有帮助。
--EAR
|--EAR/lib
|--|--EAR/lib/CDIBeans.jar
|--EJBArchive.jar