2

CDI イベントで少し苦労しています。次のようなCDIシングルトンとして実装されたクラスがあります。

import import javax.inject.Singleton;

@Singleton
public class MyClass{

    @Inject
Event<StatusUpdateEvent> events;

    public MyClass(){};

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

次に、コンシューマー クラスを EJB シングルトンとして実装します。

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

からの Bean は、CDIBean.jarへの注入に使用できませんEJBArchive.jar

于 2013-03-08T22:09:06.717 に答える