Oracle® Fusion Middleware Oracle WebLogic ServerメッセージドリブンBeanのプログラミング 11g リリース1(10.3.3) B61425-01 |
|
![]() 前 |
![]() 次 |
WebLogic Server MDBは、ポイント・ツー・ポイント(キュー)またはパブリッシュ/サブスクライブ(トピック)メッセージング・モデルのいずれかで使用できます。それらのモデルの詳細は、『Oracle Fusion Middleware Oracle WebLogic Server JMSのプログラミング』の「WebLogic JMSについて」を参照してください。
以降の節では、ポイントツーポイント・メッセージング・アプリケーションとパブリッシュ/サブスクライブ・メッセージング・アプリケーションの主な違いを説明します。
ポイントツーポイント・モデルでは、JMSキューからのメッセージが1つのMDBリスナーによって取り出され、処理されるまでキューに留まります。そのMDBがダウンした場合、メッセージはMDBが再びアクティブになるのをキューの中で待ちます。
例: ある売り場では、1日を通して売れた品目を反映してバックエンドの在庫システムを更新する必要があります。在庫の値を減らす各メッセージは、必ず一度だけ処理されなければなりません。メッセージはそれが生成された直後に処理されたり、特定の順序で処理されたりする必要はありませんが、各メッセージが必ず処理されることが重要です。
図3-1は、ポイント・ツーポイント・アプリケーションを示しています。各メッセージは、MDB_Aの1つのインスタンスによって処理されます。メッセージ「M1」はMDB_A(1)で処理され、「M2」はMDB_A(2)で処理され、「M3」はMDB_A(3)で処理されます。
パブリッシュ/サブスクライブ・モデルでは、JMSトピックがすべてのメッセージをすべてのサブスクライブ・リスナーにパブリッシュします。MDBリスナーがダウンした場合、トピックが「恒久サブスクリプション」トピックでない限りそのMDBはメッセージを逃がします。
恒久サブスクリプションの詳細と構成手順については、『Oracle Fusion Middleware Oracle WebLogic Server JMSのプログラミング』の「恒久サブスクリプションの設定」、および「恒久トピック・サブスクリプションの構成」を参照してください。
例: 金融ニュース・サービスは、株価と金融情報をサブスクライバ(ニュース配信サービスなど)にブロードキャストします。各メッセージは、各サブスクライバに配信されます。
図3-2は、パブリッシュ/サブスクライブ・アプリケーションを示しています。ポイント・ツー・ポイント・アプリケーションとは違って、パブリッシュ/サブスクライブ・モデルでは、サブスクライブしているMDBそれぞれの1つのインスタンスによって処理されます。メッセージ「M1」は、MDB_AのインスタンスとMDB_Bのインスタンスで処理されます。同様に、「M2」もサブスクライブMDBそれぞれのインスタンスで処理されます。
MDBプールは、各メッセージを少なくとも1回処理します。メッセージは、複数回処理される場合もあります。
onMessage()
メソッドの途中、またはこのメソッドが完了した後で、メッセージが確認応答またはコミットされる前にアプリケーションで障害が起きるか、トランザクションがロールバックされるか、ホスト・サーバー・インスタンスで障害が発生した場合、メッセージは再配信されて再び処理されます。
非永続的なメッセージも障害時には再配信されますが、メッセージのホストJMSサーバーが停止またはクラッシュした場合は除きます(この場合はメッセージが破棄されます)。
メッセージが必ず1回処理されるようにするには、コンテナ管理によるトランザクションを使用します。そうすれば、障害が発生したときにトランザクションMDBの処理がロールバックされ、メッセージが強制的に再配信されます。