WebLogic JTA プログラマーズ ガイド

     前  次    新しいウィンドウで目次を開く     
ここから内容の開始

トランザクション サービス

この章では、WebLogic Server システム向けのトランザクション対応アプリケーションを記述するために必要な情報を提供します。

この節では、以下のトピックを取り上げます。

 


トランザクション サービスについて

WebLogic Server は、EJB アプリケーションと RMI アプリケーションのトランザクションをサポートするトランザクション サービスを備えています。WebLogic Server EJB コンテナでは、そのトランザクション サービスによって、Sun Microsystems 発行の EJB 仕様 2.0 で説明されているトランザクション サービスの実装が提供されます。

EJB と RMI のアプリケーションの場合、WebLogic Server では Java アプリケーションの Java Transaction API (JTA) を実装する Sun Microsystems の javax.transaction パッケージおよび javax.transaction.xa パッケージも提供されます。JTA の詳細については、Sun Microsystems 発行の Java Transaction API (JTA) 仕様 1.0.1B を参照してください。トランザクションの境界を設定するためにアプリケーションで使用される UserTransaction オブジェクトの詳細については、 WebLogic Server の Javadocを参照してください。

 


機能と制限

この節の内容は以下のとおりです。

以降の節では、EJB と RMI のアプリケーションをサポートするトランザクション サービスの機能と制限について説明します。

軽量クライアントと委託コミット

軽量クライアントは、可用性が一定ではなく、管理のされていない、1 ユーザ対象のデスクトップ システムで動作します。デスクトップ システムは、使用されないときは所有者によって電源が落とされます。そのような管理されていない、1 ユーザ対象のデスクトップ システムでは、トランザクションの調整などのネットワーク機能を行うべきではありません。特に、管理されていないシステムには、サーバ リソースが関わるトランザクションにおいて、障害の影響を受けずに原子性、一貫性、隔離性、および持続性という ACID プロパティを維持するという役目を負わせるべきではありません。WebLogic Server のリモート クライアントは軽量クライアントです。

トランザクション サービスを利用すると、軽量クライアントでは委託コミットを実行できます。つまり、軽量クライアントでは、トランザクションの調整をサーバ マシン上のトランザクション マネージャにまかせてトランザクションを開始および終了することができるのです。クライアント アプリケーションは、ローカルのトランザクション サーバを必要としません。EJB クライアントまたは RMI クライアントで使用される UserTransaction のリモート実装によって、トランザクション調整の実際の作業がサーバ上のトランザクション マネージャに委託されます。

クライアントが開始するトランザクション

アプレットなどのクライアントでは、JNDI を使用して UserTransaction オブジェクトおよび TransactionManager オブジェクトの参照を取得できます。クライアントでは、いずれかのオブジェクト参照を使用してトランザクションを開始できます。現在のスレッドの Transaction オブジェクトを取得するには、クライアント プログラムは ((TransactionManager)tm).getTransaction() メソッドを呼び出さなければなりません。

トランザクションの整合性

トランザクションの動作を管理すると、そのトランザクションに関わるすべてのトランザクション オブジェクトでトランザクション要求の処理が完了しない限り commit が成功しないので、トランザクションの整合性が確保されます。トランザクション サービスでは、Open Group によって定義されている要求と応答のプロセス間通信モデルで提供されるものと同等のトランザクション動作の管理が提供されます。

トランザクションの終了

WebLogic Server では、トランザクションはそのトランザクションを生成したクライアントによってのみ終了することができます。

注意 : クライアントは、別のオブジェクトのサービスを要求したサーバ オブジェクトの場合もあります。

フラット トランザクション

WebLogic Server では、フラット トランザクション モデルが実装されています。ネスト トランザクションはサポートされていません。

トランザクション サービスのトランザクション処理との関係

トランザクション サービスは、さまざまなトランザクション処理のサーバ、インタフェース、プロトコル、および規格と以下のように関連しています。

マルチスレッド トランザクション クライアントのサポート

WebLogic Server では、マルチスレッド トランザクション クライアントがサポートされています。クライアントでは、複数のスレッドで同時にトランザクション要求を行うことができます。

トランザクション ID

トランザクション サービスでは、各トランザクションにトランザクション識別子 (XID) が割り当てられます。この ID は、ログ ファイル内で特定トランザクションの情報を他と区別するために使用できます。トランザクション識別子は、weblogic.transaction.Transaction インタフェースの getXID メソッドを使用して取り出すことができます。トランザクション識別子を取得するメソッドの詳細については、weblogic.transaction.Transaction の Javadoc を参照してください。

トランザクションの名前とプロパティ

WebLogic JTA では、トランザクションの命名とユーザ定義プロパティをサポートする javax.transaction.Transaction の拡張機能が提供されます。それらの拡張機能は、weblogic.transaction.Transaction インタフェースに含まれています。

トランザクション名は、トランザクションの種類 (送金やチケット購入など) を示します。したがって、サーバ上のユニークなトランザクションを識別するトランザクション ID とは混同しないでください。トランザクション名を利用すると、例外やログ ファイルでトランザクションの種類を簡単に識別できます。

ユーザ定義のプロパティはキーと値の組み合わせです。この場合のキーはプロパティを識別する文字列であり、値はプロパティに割り当てられた現在の値です。トランザクション プロパティの値は、Serializable インタフェースを実装するオブジェクトでなければなりません。アプリケーションでは、weblogic.transaction.Transaction インタフェースで定義されている set メソッドと get メソッドを使用してプロパティを管理します。一度設定されたプロパティは、有効期間が終わるまでトランザクションとともに存在し、トランザクションがシステムを移動するときにはマシン間で受け渡しされます。プロパティはトランザクション ログに保存され、クラッシュの回復処理で復元されます。トランザクション プロパティが複数回にわたって設定された場合は、最新の値が維持されます。

トランザクション名とトランザクション プロパティを設定および取得するメソッドの詳細については、weblogic.transaction.Transaction の Javadoc を参照してください。

トランザクション ステータス

Java Transaction API では、javax.transaction.Status クラスを使用してトランザクションのステータス コードが提供されます。weblogic.transaction.TransactiongetStatusAsString メソッドを使用すると、トランザクションのステータスを文字列として返すことができます。文字列には、javax.transaction.Status で指定されているメジャー ステートと、補足的なマイナー ステート (loggingpre-preparing など) が含まれます。

トランザクションの統計

トランザクションの統計は、サーバ上のトランザクション マネージャで処理されるすべてのトランザクションについて提供されます。それらの統計には、トランザクションの総数、特定の結果 (コミット、ロールバック、ヒューリスティックな終了など) を持つトランザクションの数、ロールバックされたトランザクションの理由別の数、およびトランザクションがアクティブな状態を維持した合計時間が含まれます。トランザクションの統計の詳細については、「トランザクションのモニタ」を参照してください。

制約

トランザクション サービスには以下の制約があります。

 


トランザクションのスコープ

トランザクションのスコープは、そのトランザクションが実行される環境を表します。WebLogic Server では、スタンドアロン サーバでのトランザクション、クラスタ化されていないサーバ間でのトランザクション、ドメイン内のクラスタ化されたサーバ間でのトランザクション、およびドメイン間のトランザクションがサポートされています。ドメイン間トランザクションのサポートを有効化するには、「ドメイン間トランザクションに対するドメインのコンフィグレーション」を参照してください。

 


EJB アプリケーションでのトランザクション サービス

WebLogic Server EJB コンテナでは、WebLogic Server EJB アプリケーションでの以下の 2 種類のトランザクションをサポートするトランザクション サービスが提供されます。

EJB アプリケーションでのトランザクション管理の概要については、「トランザクションについて」の「WebLogic Server EJB アプリケーションのトランザクション」および「トランザクションのサンプル EJB コード」を参照してください。

 


RMI アプリケーションでのトランザクション サービス

WebLogic Server は、WebLogic Server RMI アプリケーションのトランザクションをサポートするトランザクション サービスを備えています。RMI アプリケーションでは、クライアント アプリケーションまたはサーバ アプリケーションが UserTransaction オブジェクトに対する明示的なメソッド呼び出しを行って、トランザクションの開始、コミット、およびロールバックが行われます。

UserTransaction のメソッドの詳細については、オンラインの Javadoc を参照してください。RMI アプリケーションでのトランザクション管理の概要については、「トランザクションについて」の「WebLogic Server RMI アプリケーションのトランザクション」および「トランザクションのサンプル RMI コード」を参照してください。

 


OTS との相互運用をサポートするトランザクション サービス

WebLogic Server は、OTS (Object Transaction Service) との相互運用をサポートするトランザクション サービスを備えています。詳細については、Java Transaction Service (JTS) 仕様を参照してください。このリリースの WebLogic Server では、以下の状況において OTS との相互運用が行われます。

サーバ間の 2PC

この状況では、サーバ間の 2 フェーズ コミット (2PC) トランザクションを介在によって完了します。発信側サーバは、Xid を作成し、対象サーバにトランザクションを伝播します。対象サーバは、自身をリソースとして発信側サーバに登録します。発信側サーバが、トランザクションを完了させます。ロギング ラスト リソース トランザクションの最適化はサポートされません。

クライアントによって境界設定されたトランザクション

クライアントが、OTS クライアント API を使用してサーバ上でトランザクションを開始します。次に、このトランザクションから Xid を取得し、トランザクションがコミットされるまで、この Xid をリクエストごとに伝播します。トランザクションを開始するのはクライアントですが、コミット処理はすべてサーバ上で実行されます。


  ページの先頭       前  次