メッセージ駆動型 Bean について

関連項目

メッセージ駆動型 Bean は、J2EE アプリケーションがメッセージを非同期に処理できるようにするエンタープライズ Bean です。Bean は Java Message Service (JMS) のメッセージリスナーとして機能します。イベントリスナーに似ていますが、メッセージ駆動型 Bean はイベントではなくメッセージを受信します。メッセージは、任意の J2EE コンポーネント(アプリケーションクライアント、別のエンタープライズ Bean、または Web コンポーネント) から送信できます。

メッセージ駆動型 Bean を使用する理由

サーバーリソースの占有を避けるために、セッション Bean またはエンティティー Bean の代わりにメッセージ駆動型 Bean を使用します。セッション Bean およびエンティティー Bean も、JMS メッセージの送受信ができますが、メッセージ駆動型 Bean のように非同期に処理を行うのではなく、同期的に処理を行います。

セッション Bean およびエンティティー Bean との比較

セッション Bean およびエンティティー Bean とは異なり、メッセージ駆動型 Bean のクライアントは、インタフェースから Bean にアクセスしません。メッセージ駆動型 Bean には、Bean クラスだけがあります。

いくつかの観点で、メッセージ駆動型 Bean はステートレスセッション Bean に似ています。

メッセージ駆動型 Bean のインスタンスのインスタンス変数は、クライアントメッセージを処理する間、エンタープライズ Bean オブジェクトへのオブジェクト参照など、いくつかの状態情報を維持できます。

メッセージ処理

メッセージを受信すると、コンテナはメッセージ駆動型 Bean の onMessage メソッドを呼び出し、メッセージを処理します。onMessage メソッドは、通常、メッセージを 5 つの JMS メッセージ型のいずれかにキャストし、アプリケーションのビジネスロジックに従ってメッセージを処理します。onMessage メソッドは、ヘルパーメソッドを呼び出したり、セッション Bean またはエンティティー Bean を起動してメッセージの情報を処理し、結果をデータベースに保存することがあります。

メッセージ駆動型 Bean クラスの多くのインスタンスを同時に実行できるため、メッセージのストリームを同時に処理できます。メッセージがこれらのインスタンスに配信される正確な順序は保証されないため、順序に従わないメッセージを処理するように、メッセージ駆動型 Bean を準備する必要があります。たとえば、予約を取り消すメッセージが予約をするメッセージよりも前に配信されることがあります。

トランザクション

コンテナは、メッセージ駆動型 Bean のインスタンスに、コンテナが管理するコンテキストに Bean インスタンスがアクセスできるようにする MessageDrivenContext を提供します。Bean が独自にトランザクションを管理するか、コンテナのトランザクション管理に依存するかに応じて、Bean は MessageDrivenContext の異なるメソッドにアクセスし、トランザクションを処理します。

関連項目
JMS メッセージの送信
エンティティー Bean について
セッション Bean について
エンタープライズ Bean の作成
ビジネスメソッドについて

著作権と商標について