WebSphere Application Server, Version 6.0.x   
             オペレーティング・システム: AIX , HP-UX, Linux, Solaris, Windows

             目次と検索結果のパーソナライズ化

メッセージ駆動型 Bean - トランザクション・サポート

メッセージ駆動型 Bean は、トランザクションの有効範囲内で、 宛先 (またはエンドポイント) 上のメッセージを処理することができます。

WebSphere MQ JMS で メッセージ・リスナー・サービスを使用した場合のトランザクション処理

選択した MDB デプロイメント記述子設定に基づくケースが、3 つ考えられます。 コンテナー管理トランザクション (必須)、 コンテナー管理トランザクション (サポート対象外)、 および Bean 管理トランザクションです。 関連情報については、メッセージ駆動型 Bean デプロイメント記述子・プロパティー を参照してください。

コンテナー管理トランザクション (必須)

この状態では、 宛先から届いた着信メッセージを読み取る前に、 さらに、アプリケーション・サーバーに よって MDB の onMessage() メソッドが呼び出される前に、 アプリケーション・サーバーが グローバル・トランザクションを開始します。 つまり、メッセージによって順番に呼び出される他の EJB、 およびデータベースなどのリソースとの対話の有効範囲のすべてを、 着信メッセージが取得された、 この単一のグローバル・トランザクション内に 設定することが可能になるわけです。

このアプリケーション・フローが正常終了した場合に、 グローバル・トランザクションがコミットされます。 このフローが正常終了しない場合 (トランザクションに ロールバックのマークが付いた場合、 またはランタイム例外が発生した場合)、 トランザクションはロールバックされ、 着信メッセージが MDB 宛先にロールバックされます。

コンテナー管理トランザクション (サポート対象外)

この状態では、 明らかにグローバル・トランザクションは存在しません。 ただし JMS プロバイダーは、MDB 宛先から作業単位内の アプリケーション・サーバーに向けて、引き続きメッセージを送信できます。 トランザクション有効範囲内の他のリソースが関与していないため、 これをローカル・トランザクションと見なすことができます。

アプリケーション・サーバーは、MDB の onMessage() ディスパッチが 正常終了すると、メッセージの送信を確認します (MDB のアセンブラーが 指定した確認通知モードを使用)。

しかし、onMessage() メソッドから 未チェックのランタイム例外がスローされた場合には、 アプリケーション・サーバーは確認通知を行いません。 その場合、メッセージは MDB 宛先にロールバックされるのでしょうか (あるいは、 確認後に削除されるのでしょうか)。

それは、WebSphere MQ JMS プロバイダーが同期点を使用するかどうかによって異なります。 また、作動プラットフォームによっても異なります (特に z/OS 作動プラットフォームは、 この場合に異なる振る舞いを引き起こす可能性があります)。

WebSphere MQ が、 このコンテナー管理トランザクションのケース (サポート対象外) 内 の MDB メッセージ使用量において同期点を確立すると、 メッセージは、未チェックの例外の後に、宛先にロールバックされます。

同期点が使用されない場合、 メッセージは、未チェックの例外の後に、宛先から削除されます。

関連情報については、技術情報「MDB behavior is different on z/OS than on distributed when getting nonpersistent messages within syncpoint」(http://www.ibm.com/support/docview.wss?uid=swg21231549) を参照してください。

Bean 管理トランザクション

この状態は、コンテナー管理トランザクション (サポート対象外) のケースに似ています。 このケースでは、ユーザー・トランザクションは 存在しますが、MDB の onMessage ディスパッチ内で 開始されたユーザー・トランザクションには、 トランザクション有効範囲内にある メッセージ駆動型 Bean の宛先からの メッセージ使用量は含まれません。 この場合は、コンテナー管理トランザクション (必須) のシナリオを使用してください。

メッセージ送信

前述の 3 つのケースそれぞれにおいて、 MDB 宛先にロールバックされたメッセージは、 最終的に再ディスパッチされます。 元のロールバックの原因が 一時的なシステムの問題であった場合は、 このメッセージによって MDB が再ディスパッチされ、 それが成功することが予想されます。 ただし、ロールバックの原因が特定のメッセージに関する問題であった場合、 メッセージは繰り返しロールバックされ、再ディスパッチされます。 このため、使用される処理リソースが足りなくなるおそれがあります。

アプリケーション・サーバーは、 メッセージのディスパッチ頻度をトラッキングし、 指定した数の再送信が行われた後に 関連したリスナー・ポートを停止することによって、 有害メッセージのシナリオと呼ばれるこのシナリオを処理します。 これは、リスナー・ポートに対する最大再試行数プロパティーで構成可能な値です。 詳しくは、 リスナー・ポート設定 を参照してください。
注: 最大再試行数の値をゼロにすると、onMessage() が一度でも 正常に終了しなければ、リスナー・ポートが停止します。

リスナー・ポートが停止すると、 そのリスナー・ポートにマップされたすべての MDB の処理が停止するため、 この解決策はあまり有効とはいえません。 有害メッセージのシナリオが発生した場合、 WebSphere Application Server のメッセージ・リスナー・サービスを 使ってリスナー・ポートを停止する代わりに、 他の解決策を取ることもできます。 それは、バックアウト・キュー (BOQUEUE) と バックアウトしきい値 (BOTHRESH) をセットアップすることです。 これを行う場合は、WebSphere MQ が有害メッセージを処理します。 有害メッセージの扱いについて詳しくは、資料「WebSphere WebSphere MQ Using Java 」を参照してください。 この資料は、WebSphere MQ ライブラリーに関する Web ページ http://www.ibm.com/software/integration/wmq/library から入手することができます。

インバウンド・リソース・アダプターのトランザクション処理

Bean またはコンテナー管理トランザクションの処理用に、MDB を構成できます。 リソース・アダプターの所有者は、MDB 開発者に対して、 トランザクション処理用に MDB をセットアップする方法を 伝える必要があります。




関連概念
メッセージ駆動型 Bean - 自動メッセージ検索
概念トピック    

ご利用条件 | フィードバック

最終更新: Jan 22, 2008 12:07:38 AM EST
http://publib.boulder.ibm.com/infocenter/wasinfo/v6r0/index.jsp?topic=/com.ibm.websphere.base.doc/info/aes/ae/cmb_trans.html