トランザクションを使用すると、1 つ以上のステップがそれ以上分割不可能な作業単位 (Unit of Work) にまとめられるため、データの完全性と整合性が保証されます。この章で説明する内容は次のとおりです。
トランザクションは、すべて正常に完了することが必要なアプリケーションで、周到に用意された一連のアクションです。正常に完了しない場合、各アクションで行われたすべての変更が取り消されます。たとえば、当座預金から普通預金に資金を移動するのは次の手順を実行するトランザクションになります。
当座預金口座にその移動をカバーするだけの金額があるかどうかを確認します。
当座預金に十分なお金が入っている場合は、当座預金の金額を借り方に記帳します。
その金額を普通預金口座の貸し方に記帳します。
その移動を当座預金口座ログに記録します。
その移動を普通預金口座ログに記録します。
これらの手順のいずれが失敗すると、先行する手順によって行われた変更がすべて取り消されます。当座預金口座と普通預金口座はこのトランザクションが始まる前と同じ状態になる必要があります。このイベントは「ロールバック」と呼ばれます。すべての手順が正常に完了すると、トランザクションは「コミット」状態になります。 トランザクションはコミットかロールバックのどちらかで終了します。
関連項目
トランザクション処理には、次の 5 つの処理が含まれます。
これらの各エンティティーは、次に説明する API や機能を実装することにより、信頼性のあるトランザクション処理を実現しています。
トランザクションマネージャーは、トランザクション境界、トランザクションリソース管理、同期化、およびトランザクションコンテキスト伝達のサポートに必要なサービスと管理機能を提供します。
Communications Server は、トランザクション状態管理を含むアプリケーションランタイム環境のサポートに必要なインフラストラクチャーを提供します。
リソースマネージャーは、リソースアダプタを介して、リソースへのアプリケーションアクセスを提供します。リソースマネージャーは、特定のトランザクションリソースインタフェースを実装することで分散トランザクションに参加します。このインタフェースは、トランザクションマネージャーがトランザクションの関連付け、トランザクションの完了、および回復作業を伝達する際に使用されます。このようなリソースマネージャーの例としては、リレーショナルデータベースサーバーがあります。
リソースアダプタはシステムレベルのソフトウェアライブラリで、リソースマネージャーへ接続するためにアプリケーションサーバーまたはクライアントが使用します。通常、リソースアダプタはリソースマネージャーに固有です。リソースアダプタはライブラリとして使用可能で、クライアントのアドレス空間内で使用されます。そのようなリソースアダプタの一例として、JDBC ドライバが挙げられます。
アプリケーションサーバー環境で動作するように開発されたトランザクションユーザーアプリケーションは、JNDI を使用してトランザクションデータソースおよびトランザクションマネージャー (オプション) を検索します。アプリケーションは、エンタープライズ Bean 用の宣言的なトランザクション属性設定や、プログラムによる明示的なトランザクション境界を使用することがあります。
関連項目
Communications Server には、次の JDBC ドライバの回復実装に関するいくつかの既知の問題に対する回避方法が用意されています。明示的に無効にしないかぎり、それらの回避方法が使用されます。
Oracle thin ドライバ - XAResource.recover メソッドは、入力フラグに関係なく、繰り返し同じ未確定 Xid セットを返します。XA 仕様に従って、トランザクションマネージャーは最初に TMSTARTSCAN でこのメソッドを呼び出したあと、TMNOFLAGS で、Xid が返されなくなるまで繰り返しこのメソッドを呼び出します。XAResource.commit メソッドにもいくつかの問題があります。
Communications Server の回避方法を無効にするには、oracle-xa-recovery-workaround プロパティー値を false に設定します。プロパティーの設定方法については、「Communications Server のトランザクションからの回復方法を設定する」を参照してください。
これらの回避方法は、特定の JDBC ドライバに対応するものではありません。
Communications Server は、管理コンソールの設定に基づいてトランザクションを処理します。
この節では、トランザクションの設定方法について説明します。
トランザクションに関する追加情報については、次の各節を参照してください。
トランザクションは、サーバークラッシュまたはリソースマネージャークラッシュのいずれかにより未完了になる可能性があります。これらの未完了トランザクションを完了させ、障害を回復させる必要があります。Communications Server は、これらの障害を回復し、サーバーの起動時にそのトランザクションを完了するように設計されています。
復元を行なっている間に一部のリソースにアクセスできない場合は、トランザクションを回復しようとしてサーバーの再起動が遅れている可能性があります。
トランザクションが複数のサーバーにわたっている場合は、トランザクションを開始したサーバーがトランザクションの結果を取得しようとしてほかのサーバーに問い合わせる場合があります。ほかのサーバーにアクセスできない場合、そのトランザクションは「特殊な結果判別」フィールドを使用してその結果を判別します。
ツリーコンポーネントで、「設定」ノードを選択します。
開発者プロファイルで非クラスタドメインを実行している場合は、次の手順に進みます。クラスタプロファイルでドメインを実行している場合は、設定するインスタンスを選択します。
「トランザクションサービス」ノードを選択します。
未完了なトランザクションの復元を有効にするには、「再起動時」フィールドで「回復」にチェックマークを付けます。
「再試行タイムアウト」フィールドに、Communications Server がアクセスできないサーバーに対して接続を試みる時間を秒単位で設定します。デフォルト値は 10 分 (600 秒) です。
「特殊な結果判別」フィールドに、トランザクションでアクセスできないサーバーのポリシーを設定します。
このフィールドを「コミット」に設定する適切な理由がないかぎり、「特殊な結果判別」を「ロールバック」のままにしておきます。未確定なトランザクションのコミットは、アプリケーションのデータの整合性を損なう可能性があります。
必要なプロパティーがあれば設定します。
「プロパティーを追加」ボタンをクリックし、「名前」フィールドと「値」フィールドに名前と値を入力し、「名前」フィールドの横にあるボックスにチェックマークを付けて、そのプロパティーを有効にします。
「保存」をクリックします。
Communications Server を再起動します。
デフォルトでは、サーバーはトランザクションをタイムアウトしないようになっています。つまり、サーバーはトランザクションの完了を待機し続けます。トランザクションのタイムアウト値を設定して、トランザクションが設定された時間内に完了しない場合、Communications Server はトランザクションをロールバックします。
ツリーコンポーネントで、「設定」ノードを選択します。
開発者プロファイルで非クラスタドメインを実行している場合は、次の手順に進みます。クラスタプロファイルでドメインを実行している場合は、設定するインスタンスを選択します。
「トランザクションサービス」ノードを選択します。
「トランザクションタイムアウト」フィールドに、トランザクションがタイムアウトする秒数を入力します。
トランザクションタイムアウトのデフォルト値は 0 秒です。これにより、トランザクションのタイムアウトは無効になります。
「保存」をクリックします。
Communications Server を再起動します。
トランザクションログは、関連リソースのデータの整合性を維持して障害を回復するために、各トランザクションについての情報を記録します。トランザクションログは、「トランザクションログの位置」フィールドで指定したディレクトリの tx サブディレクトリに保存されます。これらのログは人間が読み取れるものではありません。
ツリーコンポーネントで、「設定」ノードを選択します。
開発者プロファイルで非クラスタドメインを実行している場合は、次の手順に進みます。クラスタプロファイルでドメインを実行している場合は、設定するインスタンスを選択します。
「トランザクションサービス」ノードを選択します。
「トランザクションログの位置」フィールドに、トランザクションログの位置を入力します。
tx サブディレクトリが作成され、トランザクションログがそのディレクトリの下に保存されます。
デフォルト値は ${com.sun.aas.instanceRoot}/logs です。${com.sun.aas.instanceRoot} 変数はインスタンスの名前であり、Communications Server インスタンスの起動時に設定されます。${com.sun.aas.instanceRoot} の値を表示するには、「実際の値」をクリックします。
「保存」をクリックします。
Communications Server を再起動します。
トランザクションログファイルは、キーポイント処理によって圧縮されます。キーポイント間隔とは、ログ上のキーポイント処理間のトランザクション数です。キーポイント処理によって、トランザクションログファイルのサイズを小さくすることができます。キーポイント間隔を大きくすると (例: 2048)、トランザクションログファイルが大きくなりますが、キーポイント処理が少なくなるのでパフォーマンスが向上する可能性があります。キーポイント間隔を小さくすると (例: 256)、ログファイルのサイズが小さくなりますが、キーポイント処理が多くなるので、パフォーマンスがわずかに低下します。