7.10.1 Message-driven Beanによるメッセージ処理の特徴
Message-driven Beanは,クライアントアプリケーションであるプロデューサーから直接呼び出すことはできません。プロデューサーは,送信先にメッセージを送信することで,Message-driven Beanを間接的に呼び出します。
Message-driven Beanは基本的に状態を保持せず,また特定のクライアントアプリケーションと関連づけられて処理を実行されることがありません。このため,送信されたメッセージは複数のMessage-driven Beanによって同時に並行処理できます。
- 注意事項
-
-
Message-driven Beanの複数のインスタンスの同時実行によって,複数のメッセージは並行処理されます。Message-driven Beanクラスのインスタンスによって実行される処理の順序性は保証されません。
-
大量のメッセージをMessage-driven Beanに配信しようとしたときに,RejectedExecutionException例外が発生することがあります。この例外が発生した場合,一部のメッセージはMessage-driven Beanに配信されません。この状況を避けるためには,CJMSPリソースアダプタの実行時属性として,スレッドプールの最大数をMessage-driven Beanのインスタンス数以上に設定してください。
-
Message-driven Beanに設定した同時実行インスタンス数の制限によってメッセージの送信が遅れることがあります。この問題を防ぐためには,Message-driven Beanのインスタンス数以上の値をCJMSPリソースアダプタで実行するスレッド数として指定してください。
また,Message-driven Beanのエンドポイント数は,メッセージを並列処理できる数になります。エンドポイント数の制限によって問題が発生するのを防ぐために,エンドポイント数にはMessage-driven Beanのインスタンス数以上の値を指定してください。式を示します。
Message-driven Beanのインスタンス数の総数<=CJMSPリソースアダプタのWorkスレッド数 Message-driven Beanのインスタンス数>=エンドポイントのインスタンス数
なお,Message-driven Beanのインスタンス数は,cosminexus.xmlまたはMessageDrivenBean属性ファイルで定義します。Message-driven Beanのエンドポイント数は,DDで定義します。CJMSPリソースアダプタのスレッド数の定義はConnector属性ファイルで定義します。
cosminexus.xmlの詳細は,マニュアル「アプリケーションサーバ リファレンス 定義編(アプリケーション/リソース定義)」の「2. アプリケーション属性ファイル(cosminexus.xml)」を参照してください。MessageDrivenBean属性ファイルの詳細は,マニュアル「アプリケーションサーバ リファレンス 定義編(アプリケーション/リソース定義)」の「3.6 MessageDrivenBean属性ファイル」を参照してください。Connector属性ファイルの詳細は,マニュアル「アプリケーションサーバ リファレンス 定義編(アプリケーション/リソース定義)」の「4.1 Connector属性ファイル」を参照してください。
-
CJMSプロバイダを使用して,Message-driven Beanにメッセージを配信する場合,メッセージ配信中にCJMSPブローカーを停止すると,CJMSPブローカーを再起動してもメッセージは配信されません。CJMSPブローカーを停止した場合は,J2EEサーバを再起動してください。
-