ヘッダーをスキップ
Oracle® Fusion Middleware Oracle WebLogic ServerメッセージドリブンBeanのプログラミング
11g リリース1(10.3.3)
B61425-01
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

2 MDBのライフサイクル

この項では、メッセージドリブンBeanインスタンスのライフサイクルのフェーズと、ライフサイクルを制御するMDBの構成について説明します。

概要

メッセージドリブンBeanは、リクエストに対するレスポンスが即時である必要のない疎結合(非同期)のビジネス・ロジックを実装します。メッセージドリブンBeanは、JMSキューまたトピックからメッセージを受信し、そのメッセージの内容に基づいてビジネス・ロジックを実行します。それは、EJBとJMSの間の非同期インタフェースです。

MDBインスタンスはそのライフサイクルを通じて、同時にではありませんが複数のクライアントからのメッセージを処理できます。特定のクライアントの状態は維持されません。メッセージドリブンBeanのインスタンスはすべて同じ機能であり、EJBコンテナはどのMDBインスタンスにもメッセージを割り当てることができます。コンテナは、それらのインスタンスをプールしてメッセージのストリームの並行処理を可能にします。

EJBコンテナは、必要に応じてBeanのインスタンスを作成し、JMSメッセージをインスタンスに渡すことによってメッセージドリブンBeanと直接対話します。コンテナは、デプロイメント時にBeanのインスタンスを作成し、メッセージのトラフィックに基づいて作動時にインスタンスを追加および削除します。

例: 顧客から注文を受けるプロセスがサプライヤへの発注プロセスを引き起こすオンライン・ショッピング・アプリケーションでは、サプライヤへの発注プロセスをメッセージドリブンBeanで実装できます。顧客の注文が必ずサプライヤへの発注につながる一方で、そのステップは疎結合になります。その理由は、顧客の注文を確定する前にサプライヤへの発注を生成する必要はないからです。関連するサプライヤへの注文が発行される前に顧客の注文が「蓄積」されるのは問題なく、有益なことです。

MDBと並行処理

MDBは、トピックとキューの両方で並行処理をサポートしています。トピックとキューの詳細は、「MDBとメッセージング・モデル」を参照してください。

WebLogic Serverは、現在リクエストを処理していないMDBインスタンスが存在する空きプールを管理します。空きプール内のMDBインスタンスの数は、max-beans-in-free-pool属性の値、スレッド・プール内の使用可能なスレッドの数、スレッド・プールのタイプ、その他の要因で制御されます。『Oracle Fusion Middleware Oracle WebLogic Serverパフォーマンスおよびチューニング』の「メッセージドリブンBeanのチューニング」を参照してください。

マルチスレッド・トピックMDBの制限事項

非トランザクション・トピックMDBのデフォルトの動作では、メッセージ処理をマルチスレッド化します。この状況では、トピックがWebLogic JMSトピック(予想外の例外や未処理のメッセージの応答確認など)ではない場合、MDBコンテナは再現可能な動作を提供できません。たとえば、アプリケーションがonMessageからRuntimeExceptionをスローする場合、コンテナは引き続きメッセージの応答を確認します。

デプロイメント記述子でmax-beans-in-free-poolの値を1に設定し、トピックが外部ベンダー・トピック(WebLogic JMSトピック以外)の場合にトピックMDBでのマルチスレッド化を防ぐことをお薦めします。