2

我在 CDI Events 上有点挣扎。我有一个几乎像这样实现为 CDI Singleton 的类:

import import javax.inject.Singleton;

@Singleton
public class MyClass{

    @Inject
Event<StatusUpdateEvent> events;

    public MyClass(){};

    public void myMethod(){
        events.fire(new StatusUpdateEvent());
    }
}

然后我将我的消费者类实现为 EJB Singleton

import javax.ejb.Singleton;

@Singleton
public class MyObserver(){

    public MyObserver(){};

    public onStatusUpdateEvent(@Observes StatusUpdateEvent event){

        ...do something...

    }
}

问题是当myMethod被调用时,没有从 myObserver 接收到任何事件。 MyClass包含在我的 EAR 项目的库 jar 中(jar 有 beans.xml),并且MyObserver是同一 EAR 的 EJB。

我究竟做错了什么?非常感谢你的帮助!

4

1 回答 1

3

CDI 注入不能跨类加载器边界工作。由于您的项目是 EAR,因此 ejb-jar 很可能位于单独的类加载器上。例如,如果您的项目结构是:

--EAR
  |--EAR/lib
  |--|--EAR/lib/CDIBeans.jar
  |--EJBArchive.jar

那么任何 beanCDIBean.jar都将无法注入到您的EJBArchive.jar.

于 2013-03-08T22:09:06.717 回答