パッケージ jakarta.enterprise.event

イベントに関連するアノテーションとインターフェース。

Bean はイベントを生成および消費できます。イベントを使用すると、対話する Bean 間でコンパイル時の依存関係を持たずに、Bean が完全に分離された方法で対話できるようになります。最も重要なことは、アプリケーションの 1 つのアーキテクチャ層にあるステートフル Bean が、その内部状態を別の層で発生する状態変化と同期できることです。

イベントは同期的または非同期的に発生します。

イベントは以下を含みます:

  • イベントオブジェクトと呼ばれる Java オブジェクト
  • イベント修飾子と呼ばれる、修飾子型のインスタンスの(場合によっては空の)セット

Event インターフェースは、イベントを発生させるために使用されます。

イベントオブジェクトとイベント型

イベントオブジェクトはペイロードとして機能し、プロデューサーからコンシューマーに状態を伝播します。イベントオブジェクトは、型変数のない具象 Java クラスのインスタンスです。

イベントのイベント型には、イベントオブジェクトのランタイムクラスのすべてのスーパークラスとインターフェースが含まれます。イベント型に型変数を含めることはできません。

イベント修飾子

イベント修飾子はトピックセレクターとして機能し、コンシューマーが監視するイベントのセットを絞り込むことができます。イベント修飾子は、任意の修飾子型のインスタンスにすることができます。

オブザーバーメソッド

オブザーバーメソッドを使用すると、アプリケーションはイベント通知を同期的に受信して応答できます。また、非同期オブザーバーメソッドを使用すると、アプリケーションはイベント通知を非同期で受信して応答できます。これらは両方ともイベントコンシューマーとして機能し、特定の修飾子のセットを使用して特定の型のイベントを監視します。任意の Java 型は、オブザーバーメソッドによって監視できます。

オブザーバーメソッドは、@Observes または @ObservesAsync というアノテーションが付けられたパラメーターを持つ Bean クラスまたは拡張のメソッドです。

以下の場合、オブザーバーメソッドにイベントが通知されます。

  • イベントオブジェクトは、observer メソッドによって監視される型に割り当てることができます。
  • オブザーバーメソッドには、イベントのすべてのイベント修飾子があり
  • イベントがコンテナーライフサイクルイベントではないか、オブザーバメソッドが拡張機能に属しているかのいずれかです。

同期オブザーバーメソッドがトランザクションオブザーバーメソッドであり、イベントが発生したときに進行中の JTA トランザクションがある場合、オブザーバーメソッドは適切なトランザクション完了フェーズ中に通知されます。それ以外の場合は、イベントが発生したときにオブザーバーに通知されます。

オブザーバメソッドが呼び出される順序は、@ の値に依存して優先観察者に適用されます。

オブザーバーに優先度が定義されていない場合、その優先度は jakarta.interceptor.Interceptor.Priority.APPLICATION+500 になります。

2 人のオブザーバが同じ優先度を持っている場合、それらの相対的な順序は定義されていません。

オブザーバーメソッドは例外をスローする場合があります。

  • オブザーバーメソッドがトランザクションオブザーバーメソッドの場合、例外はコンテナーによってキャッチされ、ログに記録されます。
  • オブザーバーメソッドが非同期の場合、例外はコンテナーによってキャッチされ、アプリケーションで処理できる CompletionExceptionSE に抑制された例外として追加されます。
  • それ以外の場合、例外はイベントの処理を中止します。そのイベントの他のオブザーバーメソッドは呼び出されません。例外は再スローされます。例外がチェックされた例外である場合、ラップされ、(チェックされていない)ObserverException として再スローされます。
関連事項:
jakarta.enterprise.inject, Observes, Event, Qualifier