![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)
![[IBM i]](../images/iseries.gif)
非 ASF モードでトランザクション・タイムアウトを回避する
ご使用のメッセージング・システムが non-Application Server Facilities (非 ASF) モードで稼働する場合、不要なトランザクション・タイムアウトが発生しないようにするためには、「合計トランザクション存続時間タイムアウト 」のトランザクション・サービス・プロパティーおよび NON.ASF.RECEIVE.TIMEOUT メッセージ・リスナー・サービスのカスタム・プロパティーを正しく構成する必要があります。
始める前に
このタスクのステップを実行するには、ご使用のメッセージング・システムが非 ASF モードで稼働している必要があります。ASF モードから非 ASF モードに変更するには、メッセージ・リスナー・サービスの構成で説明されているように、NON.ASF.RECEIVE.TIMEOUT カスタム・プロパティーをメッセージ・リスナー・サービスに追加します。
このタスクについて
WebSphere® Application Server バージョン 7 以降では、リスナー・ポートは安定化されています。詳しくは、安定化されたフィーチャーに関する項目を参照してください。リスナー・ポートを使用する WebSphere MQ メッセージ駆動型 Bean のデプロイメント構成を、アクティベーション・スペックを使用する構成に移行する準備を行う必要があります。非 ASF モードのアクティベーション・スペックの構成方法について詳しくは 『非 ASF モードのアクティベーション・スペックの構成』を参照してください。 ただし、アプリケーションを WebSphere Application Server バージョン 7 より前のアプリケーション・サーバーで実行する必要がないと確認するまでは、このマイグレーションを開始しないでください。例えば、1 つのアプリケーション・サーバー・クラスターにバージョン 6.1 のメンバーとそれより新しいバージョンのメンバーがある場合は、クラスター内のすべてのアプリケーション・サーバーをその新しいバージョンにマイグレーションするまでは、そのクラスター上のアプリケーションを、アクティベーション・スペックを使用するようにマイグレーションしないでください。
メッセージング・システムが非 ASF モードで稼働している場合は、 不要なトランザクション・タイムアウトが発生しないように、合計トランザクション存続時間タイムアウトに達する前に処理が完了できる十分な時間を割り当ててください。 そのため、必ず、 NON.ASF.RECEIVE.TIMEOUT メッセージ・リスナー・サービス・カスタム・プロパティーに指定した値が、 トランザクション・サービス・プロパティーの「合計トランザクション存続時間タイムアウト」に指定した値より小さく、 かつ、この 2 つのプロパティーの値の差が、メッセージ駆動型 Bean (MDB) の onMessage() メソッドでメッセージの処理にかかる時間より大きくなるようにしてください。
手順
- 「合計トランザクション存続時間タイムアウト」トランザクション・サービス・プロパティーを構成するには、アプリケーション・サーバーのトランザクション・プロパティーの構成のステップ 8 を実行します。
- NON.ASF.RECEIVE.TIMEOUT メッセージ・リスナー・サービス・カスタム・プロパティーを構成するために、 とクリックします。
- 「NON.ASF.RECEIVE.TIMEOUT」をクリックします。 「一般プロパティー」ページが表示されます。
- 「Value」フィールドを変更します。 NON.ASF.RECEIVE.TIMEOUT の値は、ミリ秒単位で指定する必要があります。指定する値は、(1000 で除算して) 秒に変換した場合に、「合計トランザクション存続時間タイムアウト」に指定した値よりも小さくなるようにしてください。また、2 つのプロパティーの値の差が、ご使用の MDB の onMessage() メソッドでメッセージを処理するためにかかる最大秒数よりも大きくなるようにしてください。
- 「OK」をクリックします。
- アプリケーション・サーバーを停止して再始動します。
例
- リスナー・ポートはスレッド・プールからスレッドを開始して割り振り、そのスレッドにトランザクションを作成します。
- スレッドが receive() メソッドを呼び出してメッセージを listen します。
- 110 秒後にメッセージが宛先に表示されます。
- スレッドはそのメッセージを宛先から削除し、MDB の onMessage() メソッドを呼び出してメッセージの処理を開始します。
- 10 秒後に、トランザクション・タイムアウトになります。アプリケーション・サーバーがトランザクションにロールバックのマークを付けます。
- 5秒後、onMessage() メソッドはメッセージの処理を完了し、トランザクションのコミットを試行します。
- トランザクションの開始から経過した時間の合計は 125 秒です (メッセージ待機時間 110 秒とメッセージ処理時間 15 秒)。 この時間はトランザクション・タイムアウトより長いため、アプリケーション・サーバーはトランザクションがコミットされるのを防ぎ、その結果トランザクションはロールバックされます。