Oracle® Fusion Middleware Oracle WebLogic ServerメッセージドリブンBeanのプログラミング 11g リリース1(10.3.3) B61425-01 |
|
前 |
次 |
この項では、メッセージドリブンBeanインスタンスのライフサイクルのフェーズと、ライフサイクルを制御するMDBの構成について説明します。
メッセージドリブンBeanは、リクエストに対するレスポンスが即時である必要のない疎結合(非同期)のビジネス・ロジックを実装します。メッセージドリブンBeanは、JMSキューまたトピックからメッセージを受信し、そのメッセージの内容に基づいてビジネス・ロジックを実行します。それは、EJBとJMSの間の非同期インタフェースです。
MDBインスタンスはそのライフサイクルを通じて、同時にではありませんが複数のクライアントからのメッセージを処理できます。特定のクライアントの状態は維持されません。メッセージドリブンBeanのインスタンスはすべて同じ機能であり、EJBコンテナはどのMDBインスタンスにもメッセージを割り当てることができます。コンテナは、それらのインスタンスをプールしてメッセージのストリームの並行処理を可能にします。
EJBコンテナは、必要に応じてBeanのインスタンスを作成し、JMSメッセージをインスタンスに渡すことによってメッセージドリブンBeanと直接対話します。コンテナは、デプロイメント時にBeanのインスタンスを作成し、メッセージのトラフィックに基づいて作動時にインスタンスを追加および削除します。
例: 顧客から注文を受けるプロセスがサプライヤへの発注プロセスを引き起こすオンライン・ショッピング・アプリケーションでは、サプライヤへの発注プロセスをメッセージドリブンBeanで実装できます。顧客の注文が必ずサプライヤへの発注につながる一方で、そのステップは疎結合になります。その理由は、顧客の注文を確定する前にサプライヤへの発注を生成する必要はないからです。関連するサプライヤへの注文が発行される前に顧客の注文が「蓄積」されるのは問題なく、有益なことです。
MDBは、トピックとキューの両方で並行処理をサポートしています。トピックとキューの詳細は、「MDBとメッセージング・モデル」を参照してください。
WebLogic Serverは、現在リクエストを処理していないMDBインスタンスが存在する空きプールを管理します。空きプール内のMDBインスタンスの数は、max-beans-in-free-pool
属性の値、スレッド・プール内の使用可能なスレッドの数、スレッド・プールのタイプ、その他の要因で制御されます。『Oracle Fusion Middleware Oracle WebLogic Serverパフォーマンスおよびチューニング』の「メッセージドリブンBeanのチューニング」を参照してください。
サーバー・インスタンスにデプロイされた各MDBは、1つのJMS接続を作成します。
キュー・ベースのJMSアプリケーション(ポイントツーポイント・モデル)では、各MDBインスタンスにそれ専用のセッションがあります。
トピック・ベースのJMSアプリケーション(パブリッシュ/サブスクライブ・モデル)では、MDBのすべてのローカル・インスタンスがJMSセッションを共有します。ある特定のメッセージは、複数のMDBに配信されます(サブスクライブしている各MDBに1コピーずつ)。複数のMDBがデプロイされ、同じトピックをリスニングする場合、各MDBは各メッセージのコピーを受信します。メッセージは、トピックをリスニングしている各MDBの1つのインスタンスによって処理されます。
非トランザクション・トピックMDBのデフォルトの動作では、メッセージ処理をマルチスレッド化します。この状況では、トピックがWebLogic JMSトピック(予想外の例外や未処理のメッセージの応答確認など)ではない場合、MDBコンテナは再現可能な動作を提供できません。たとえば、アプリケーションがonMessage
からRuntimeException
をスローする場合、コンテナは引き続きメッセージの応答を確認します。
デプロイメント記述子でmax-beans-in-free-pool
の値を1に設定し、トピックが外部ベンダー・トピック(WebLogic JMSトピック以外)の場合にトピックMDBでのマルチスレッド化を防ぐことをお薦めします。