この章では、asadmin コマンド行ユーティリティーを使用して、Sun GlassFishTM Enterprise Server 環境でトランザクションサービスを管理する方法について説明します。トランザクションを手動で回復する手順についても説明します。
ここでは、次のテーマを取り上げます。
本章で説明するタスクを 管理コンソール から実行する手順については、管理コンソール オンラインヘルプを参照してください。トランザクションサービス、トランザクションログ、および分散トランザクションの回復の設定については、『Sun GlassFish Enterprise Server v3 Application Development Guide』の第 15 章「Using the Transaction Service」を参照してください。
「トランザクション」は、アプリケーション内の独立したアクションをひと続きにまとめたもので、一連のアクションのすべてが正常に完了する必要があります。トランザクションでは、1 つ以上のアクションをそれ以上分割不可能な作業単位にまとめることで、データの完全性と整合性を保証しています。すべてのアクションが完了しなかった場合、変更はロールバックされます。
たとえば、当座預金口座から普通預金口座に資金を移動する場合は、一般的に次のような手順が発生します。
当座預金口座にその移動をカバーするだけの金額があるかどうかを確認します。
その金額を当座預金口座の借方に記帳します。
その金額を普通預金口座の貸方に記帳します。
その移動を当座預金口座ログに記録します。
その移動を普通預金口座ログに記録します。
これらの手順をまとめて、1 つのトランザクションと見なします。
すべての手順が正常に完了すれば、トランザクションは「コミット」されます。いずれかの手順が失敗した場合は、それ以前の手順で行われた変更がすべてロールバックされ、当座預金口座と普通預金口座はトランザクションが開始される前の状態に戻されます。この種類のイベントは「ロールバック」と呼ばれます。通常のトランザクションは、コミットされた状態かロールバックされた状態で終了します。
次の要素は、さまざまな API と機能を実装することで、信頼性の高いトランザクション処理に貢献します。
「トランザクションマネージャー」。トランザクション境界、トランザクションリソース管理、同期化、およびトランザクションコンテキスト伝達のサポートに必要なサービスと管理機能を提供します。
「Enterprise Server」。トランザクション状態管理を含むアプリケーション実行環境のサポートに必要なインフラストラクチャーを提供します。
「リソースマネージャー」。リソースアダプタを通して、アプリケーションがリソースにアクセスできるようにします。リソースマネージャーは、トランザクションマネージャーがトランザクションの関連付け、トランザクションの完了、および回復作業の伝達に使用するトランザクションリソースインタフェースを実装することで、分散トランザクションに参加します。このようなリソースマネージャーの例としては、リレーショナルデータベースサーバーがあります。
「リソースアダプタ」。Enterprise Server またはクライアントがリソースマネージャーへの接続に使用する、システムレベルのソフトウェアライブラリです。通常、リソースアダプタはリソースマネージャーに固有です。リソースアダプタはライブラリとして使用可能で、クライアントのアドレス空間内で使用されます。リソースアダプタの例として、JavaTM Database Connectivity (JDBC) ドライバがあります。サポートされている JDBC ドライバについては、「JDBC ドライバに固有の構成」を参照してください。
「トランザクションユーザーアプリケーション」。Enterprise Server 環境では、トランザクションユーザーアプリケーションは Java Naming and Directory Interface (JNDI) を使用して、トランザクションデータソースおよびオプションのユーザートランザクションを検索します。アプリケーションは、Enterprise Bean の宣言的なトランザクション属性設定や、プログラムによる明示的なトランザクション境界設定を使用する場合があります。
この節で説明する asadmin サブコマンドを使用して、単一のトランザクションをロールバックできます。ロールバックを行うには、アクティブなトランザクションを表示して、ロールバックが必要なトランザクションを正しく識別できるように、トランザクションサービスを停止する必要があります。また、これらの操作のあと、トランザクションサービスを再開する必要があります。
トランザクションサービスの設定と自動回復の設定の手順については、『Sun GlassFish Enterprise Server v3 Application Development Guide』の第 15 章「Using the Transaction Service」を参照してください。
ここでは、次のテーマを取り上げます。
トランザクションサービスを停止するには、リモートモードで freeze-transaction-service サブコマンドを使用します。トランザクションサービスを停止すると、実行中のすべてのトランザクションがただちに中断されます。実行中のトランザクションをロールバックする前に、トランザクションサービスを停止する必要があります。
停止されたトランザクションサブシステムでこのサブコマンドを実行しても、影響はありません。トランザクションサービスは、unfreeze-transaction-service サブコマンドを使用して再開するまで、中断されたままになります。
サーバーが実行されていることを確認します。
リモートサブコマンドには、実行中のサーバーが必要です。
freeze-transaction-service(1) サブコマンドを使用して、トランザクションサービスを停止します。
この例では、トランザクションサービスを停止します。
asadmin> freeze-transaction-service Command freeze-transaction-service executed successfully |
コマンド行に asadmin help freeze-transaction-service と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。
状況に応じて、特定のトランザクションをロールバックできます。トランザクションをロールバックする前に、トランザクション処理を中断するためにトランザクションサービスを停止する必要があります。特定のトランザクションをロールバックするには、リモートモードで rollback-transaction サブコマンドを使用します。
実行中のトランザクションをロールバックする前に、トランザクションサービスを停止します。
サーバーが実行されていることを確認します。
リモートサブコマンドには、実行中のサーバーが必要です。
ロールバックするトランザクションの ID を確認します。
アクティブなトランザクションの ID を一覧表示するには、get サブコマンドを使用して activeids 統計の監視データを取得します。「トランザクションサービスの統計」を参照してください。
rollback-transaction(1) サブコマンドを使用して、トランザクションをロールバックします。
この例では、トランザクション ID が 0000000000000001_00 のトランザクションをロールバックします。
asadmin> rollback-transaction 0000000000000001_00 Command rollback-transaction executed successfully |
コマンド行に asadmin help rollback-transaction と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。
中断されている実行中のトランザクションをすべて再開するには、リモートモードで unfreeze-transaction-service サブコマンドを使用します。トランザクションサービスを凍結したあとは、このサブコマンドを実行してサービスを再開します。
サーバーが実行されていることを確認します。
リモートサブコマンドには、実行中のサーバーが必要です。
unfreeze-transaction-service(1) サブコマンドを使用して、中断されているトランザクションサービスを再開します。
この例では、凍結されているトランザクションサービスを再開します。
asadmin> unfreeze-transaction-service Command unfreeze-transaction-service executed successfully |
コマンド行に asadmin help unfreeze-transaction-service と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。
一般的にサーバーまたはリソースマネージャーのクラッシュが原因で、コミットまたはロールバックの処理が中断される場合があります。クラッシュが発生すると、一部のトランザクションがステップの間に取り残される可能性があります。Enterprise Server は、これらの障害を回復し、サーバーの起動時にそのトランザクションを完了するように設計されています。失敗したトランザクションが複数のサーバーにわたっている場合は、トランザクションを開始したサーバーがトランザクションの結果を取得しようとしてほかのサーバーに問い合わせる場合があります。ほかのサーバーにアクセスできない場合、トランザクションは特殊な結果判別の情報を使用して、その結果を判別します。トランザクションはサーバーの起動時に解決されます。
クラッシュ以外の障害が発生している場合は、次の手順で手動回復を実行することができます。
サーバー上のリソースで障害が発生したときに保留中になったトランザクションを手動で回復するには、リモートモードで recover-transactions サブコマンドを使用します。サーバーがクラッシュしたあとに、手動のトランザクション回復を使用してトランザクションを回復することはできません。手動による操作は、リソースで予期しない障害が発生しても、まだサーバーが動作している状況での回復を目的としています。サーバーがクラッシュした場合、不確かなトランザクションを回復できるのは、完全な起動による回復処理だけです。
サーバーが実行されていることを確認します。
リモートサブコマンドには、実行中のサーバーが必要です。
recover-transactions(1) サブコマンドを使用して、トランザクションを手動で回復します。
この例では、sampleserver でトランザクションの手動回復を実行します。
asadmin recover-transactions sampleserver Transaction recovered. |
コマンド行に asadmin help recover-transactions と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。