トランザクション・リソースのコミット優先順位
2 フェーズ・コミットの処理時に、トランザクション・リソースの処理順序を指定することができます。
- 1 フェーズ・コミットの最適化が、より頻繁に行われます。
- トランザクション分離が原因で発生する潜在的な問題が解決されます。
2 フェーズ・コミットの処理時にトランザクション・リソースの処理順序を制御するには、リソース参照でコミット優先順位属性を設定することによって、リソースのコミット優先順位を指定します。 コミット優先順位が大きいほど、リソース処理の順番が早くなります。 例えば、あるリソースのコミット優先順位が 10 である場合、そのリソースはコミット優先順位 1 のリソースよりも先に処理されます。 コミット優先順位値は int 型で、-2147483648 から 2147483647 までにすることができます。
コミット優先順位値を指定しない場合は、デフォルト値のゼロがリソースに割り当てられ、 実行時にリソースの順序付けを行う際にこれが使用されます。 2 つ以上のリソースが同じ優先順位 (デフォルト優先順位を含む) で構成された場合、それらの処理順序は互いに指定されていないものになります。
コミット優先順位属性をリソース参照で指定するには、Rational® Application Developer ツールを使用します。 詳しくは、Rational Application Developer インフォメーション・センターを参照してください。 アプリケーション・コンポーネントにはデプロイメント記述子が必要です。 アノテーションが使用された場合、この属性は指定できません。
1 フェーズ・コミットの最適化
2 フェーズ・コミットのトランザクションで、トランザクションに参加する最後のリソースを除き、すべてのリソースが読み取り専用を評定する場合、すなわちそれらのリソースがトランザクションの結果を必要としない場合には、1 フェーズ・コミットが行われる可能性があります。 つまり、2 フェーズ・コミットのロールバックに必要なリソース情報とトランザクション情報を、トランザクション・サービスが保管する必要がなく、パフォーマンスが向上します。
2 フェーズ・コミット時にトランザクション・リソースの処理順序を制御できるため、最初に読み取り専用を評定する可能性が最も高いリソースを処理することができます。 したがって、1 フェーズ・コミットが行われる可能性は高くなります。
![[z/OS]](../images/ngzos.gif)
トランザクション分離
リソースがグローバル・トランザクションに関係する場合、トランザクションの一部として行われる更新は、トランザクションがコミットされるまで、すなわちそれらのリソースが分離されるまで、トランザクションの外部には不可視になります。 この分離によって、コミット後の更新時に機能するその他のアプリケーション・コンポーネントで、問題が生じる可能性があります。 例えば、更新では順序および時間が関わってくるため、それ以降の処理が失敗する場合、または断続的に失敗する場合があります。 この問題は、WebSphere® Application Server におけるサービス統合バスのメッセージング操作では発生しませんが、他のメッセージング・プロバイダー (WebSphere MQ など) では問題が生じる可能性があります。
トランザクション・リソースのコミット順序を指定すると、分離が原因となって引き起こされた問題は、メッセージング・プロバイダーとサービス統合バスだけではなく、すべてのトランザクション・システムに対して解決されます。
トランザクション・リソースのコミット順序を指定できない場合に、どのように問題が発生するかについて、次の例で説明します。 アプリケーションは、データベース表内の行を更新してから、行の追加処理をトリガーする JMS メッセージを送信します。 これらのアクションは、両方とも同じグローバル・トランザクションで実行されるため、それぞれのリソースがコミットされるまで、分離されたままになります。 メッセージが送信される前に行の更新がコミットされた場合、メッセージがトリガーした処理は、更新された行にアクセスして、処理を行うことができます。 メッセージの送信アクションが最初にコミットされた場合、その行に対する更新をデータベースがコミットする前に、このアクションが行の追加処理をトリガーする可能性があります。 この状況では、更新された行はまだ分離されており、不可視であるため、行の追加処理は失敗します。
この問題は、順序およびタイミングに依存しているため、さらに複雑になる可能性があります。 データベースが最初にコミットされた場合、問題は発生しません。 メッセージの送信アクションが最初にコミットされた場合、問題が発生する可能性があります。 ただし、メッセージが行の追加処理をトリガーする前に、データベース作業がコミットされたかどうかによって、状況は異なります。 問題が断続的に発生する可能性があるため、原因を識別することはより困難になります。
以前のバージョンの WebSphere Application Server に関する制約事項
リソースのコミット優先順位を指定する場合、すなわちデフォルト値 0 以外の値を指定する場合、コミット優先順位はリカバリー可能セクション内のパートナー・ログに追加されます。 ログ・ファイルのこのセクションは、WebSphere Application Server バージョン 7.0 以降では認識されますが、それより前のバージョンのアプリケーション・サーバーでは認識されません。
したがって、アプリケーションでコミット優先順位属性を使用している場合、そのアプリケーションは、混在バージョンのクラスターにはインストールできません。混在バージョンのクラスターとは、クラスター内の 1 つ以上のサーバーが、バージョン 7.0 より前のバージョンの WebSphere Application Server であるクラスターです。
また、コミット優先順位属性を使用しているアプリケーションをクラスターにインストールした場合、サーバーがバージョン 7.0 より前のバージョンの WebSphere Application Server であるときは、そのクラスターに後でサーバーを追加することはできません。
異なるバージョンの製品に関する一般情報については、トピック『マイグレーション、共存、およびインターオペラビリティーの概要』を参照してください。