Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jakarta ee 未从单例EJB接收到CDI事件_Jakarta Ee_Ejb_Cdi - Fatal编程技术网

Jakarta ee 未从单例EJB接收到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

我在CDI事件上有点挣扎。 我有一个实现为CDI单例的类,几乎如下所示:

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