複数のバックエンド モジュール ( EJB ) といくつかの Web モジュール ( WAR ) を含むエンタープライズ アプリケーション アーカイブ ( EAR ) があります。
イベントは、バックエンド モジュールの 1 つの内部で発生します。
@Inject private Event<MyEvent> myEvent;
...
public void fireEvent() {
myEvent.fire(new MyEvent());
}
...
次のようなコードを使用して、他のバックエンド モジュールのいずれかで確認できます。
public void listener(@Observes MyEvent myEvent) {
..
}
しかし、WAR 内のイベントを取得できません。これは、クラスローダーの可視性 (WAR のクラスは EJB から見えない) によるものですか、それとも CDI でこれを処理する必要がありますか?
アプリケーション全体のイベントに CDI を使用できない場合、代替手段は何ですか?
- JMS
- Guava EventBus
- ...
CDIで動作するものはありますか? イベントをWARに橋渡しするCDI拡張機能でしょうか?
- - - - - - 編集:
同じ WAR 内で発生した場合、イベントを観察できます。また、 @Stateless Bean をイベントリスナーとして使用しようとしましたが、成功しませんでした。
梱包はこんな感じです。
- 耳
- WAR (イベントはここで観察する必要があります)
- 戦争
- EJB (ここでイベントが発生します)