Oracle® Fusion Middleware Oracle WebLogic Server JTA プログラマーズ ガイド 11g リリース 1 (10.3.1) B55540-01 |
|
戻る |
次へ |
この章では、WebLogic Server システム向けのトランザクション対応アプリケーションを記述するために必要な情報を提供します。
この章では、以下のトピックについて説明します。
WebLogic Server は、EJB アプリケーションと RMI アプリケーションのトランザクションをサポートするトランザクション サービスを備えています。WebLogic Server EJB コンテナでは、そのトランザクション サービスにより、Sun Microsystems 発行の EJB 仕様 3.0 (http://java.sun.com/products/ejb/2.0.html
) に記載されているトランザクション サービスが実装されます。
WebLogic Server ではさらに、EJB と RMI のアプリケーション用として、Java アプリケーションの Java Transaction API (JTA) を実装する Sun Microsystems の javax.transaction
パッケージおよび javax.transaction.xa
パッケージが用意されています。JTA の詳細については、Sun Microsystems 発行の Java Transaction API (JTA) 仕様 (http://java.sun.com/products/jta/index.html
) を参照してください。アプリケーションにおいてトランザクション境界の設定に使用される UserTransaction
オブジェクトの詳細については、『Oracle Fusion Middleware Oracle WebLogic Server API Reference』の「weblogic.transaction.UserTransaction
」を参照してください。
この節の内容は以下のとおりです。
以降の節では、EJB と RMI のアプリケーションをサポートするトランザクション サービスの機能と制限について説明します。
軽量クライアントは、可用性が一定ではなく、管理のされていない、1 ユーザ対象のデスクトップ システムで動作します。デスクトップ システムは、使用されないときは所有者によって電源が落とされます。そのような管理されていない、1 ユーザ対象のデスクトップ システムでは、トランザクションの調整などのネットワーク機能を行うべきではありません。特に、管理されていないシステムには、サーバ リソースが関わるトランザクションにおいて、障害の影響を受けずに原子性、一貫性、隔離性、および持続性という ACID プロパティを維持するという役目を負わせるべきではありません。WebLogic Server のリモート クライアントは軽量クライアントです。
トランザクション サービスを利用すると、軽量クライアントでは委託コミットを実行できます。つまり、軽量クライアントでは、トランザクションの調整をサーバ マシン上のトランザクション マネージャにまかせてトランザクションを開始および終了することができるのです。クライアント アプリケーションは、ローカルのトランザクション サーバを必要としません。EJB クライアントまたは RMI クライアントで使用される UserTransaction
のリモート実装によって、トランザクション調整の実際の作業がサーバ上のトランザクション マネージャに委託されます。
アプレットなどのクライアントでは、JNDI を使用して UserTransaction
オブジェクトおよび TransactionManager
オブジェクトの参照を取得できます。クライアントでは、いずれかのオブジェクト参照を使用してトランザクションを開始できます。現在のスレッドの Transaction
オブジェクトを取得するには、クライアント プログラムは ((TransactionManager)tm).getTransaction()
メソッドを呼び出さなければなりません。
トランザクションの動作を管理すると、そのトランザクションに関わるすべてのトランザクション オブジェクトでトランザクション要求の処理が完了しない限り commit
が成功しないので、トランザクションの整合性が確保されます。トランザクション サービスで行うことができるトランザクション動作の管理は、Open Group によって定義されている要求と応答のプロセス間通信モデルにより実現されるものと同等です。
WebLogic Server では、トランザクションはそのトランザクションを生成したクライアントによってのみ終了することができます。
注意 : クライアントは、別のオブジェクトのサービスを要求したサーバ オブジェクトの場合もあります。 |
WebLogic Server では、フラット トランザクション モデルが実装されています。ネスト トランザクションはサポートされていません。
トランザクション サービスは、さまざまなトランザクション処理のサーバ、インタフェース、プロトコル、および規格と以下のように関連しています。
Open Group XA インタフェースのサポート。Open Group Resource Manager は 2 フェーズ コミット プロトコルを Open Group XA インタフェースを通じて管理できるようにすることで分散トランザクションに関与できるリソース マネージャです。WebLogic Server では Open Group Resource Manager との対話がサポートされています。
OSI TP プロトコルのサポート。Open Systems Interconnect Transaction Processing (OSI TP) は国際標準化機構 (ISO) によって定義されたトランザクション対応プロトコルです。WebLogic Server では OSI TP トランザクションとの対話はサポートされていません。
LU 6.2 プロトコルのサポート。Systems Network Architecture (SNA) LU 6.2 は IBM によって定義されたトランザクション対応のプロトコルです。WebLogic Server では LU 6.2 トランザクションとの対話はサポートされていません。
ODMG 規格のサポート。ODMG-93 は Object Database Management Group (ODMG) によって定義された規格であり、Object Database Management System にアクセスするための移植可能なインタフェースを規定しています。WebLogic Server では、ODMG トランザクションとの対話はサポートされていません。
WebLogic Server では、マルチスレッド トランザクション クライアントがサポートされています。クライアントでは、複数のスレッドで同時にトランザクション要求を行うことができます。
トランザクション サービスでは、各トランザクションにトランザクション識別子 (XID
) が割り当てられます。この ID は、ログ ファイル内で特定トランザクションの情報を他と区別するために使用できます。トランザクション識別子は、weblogic.transaction.Transaction
インタフェースの getXID
メソッドを使用して取り出すことができます。トランザクション識別子を取得するメソッドの詳細については、『Oracle Fusion Middleware Oracle WebLogic Server API Reference』の「weblogic.transaction.Transaction
」を参照してください。
WebLogic JTA では、トランザクションの命名とユーザ定義プロパティをサポートする javax.transaction.Transaction
の拡張機能が提供されます。これらの拡張機能は、weblogic.transaction.Transaction
インタフェースに含まれています。
トランザクション名は、トランザクションの種類 (送金やチケット購入など) を示します。したがって、サーバ上のユニークなトランザクションを識別するトランザクション ID とは混同しないでください。トランザクション名を利用すると、例外やログ ファイルでトランザクションの種類を簡単に識別できます。
ユーザ定義のプロパティはキーと値の組み合わせです。この場合のキーはプロパティを識別する文字列であり、値はプロパティに割り当てられた現在の値です。トランザクション プロパティの値は、Serializable
インタフェースを実装するオブジェクトでなければなりません。アプリケーションでは、weblogic.transaction.Transaction
インタフェースで定義されている set メソッドと get メソッドを使用してプロパティを管理します。一度設定されたプロパティは、有効期間が終わるまでトランザクションとともに存在し、トランザクションがシステムを移動するときにはマシン間で受け渡しされます。プロパティはトランザクション ログに保存され、クラッシュの回復処理で復元されます。トランザクション プロパティが複数回にわたって設定された場合は、最後に設定された値が保持されます。
トランザクション名とトランザクション プロパティを設定および取得するメソッドの詳細については、『Oracle Fusion Middleware Oracle WebLogic Server API Reference』の「weblogic.transaction.Transaction
」を参照してください。
Java Transaction API では、javax.transaction.Status
クラスを使用してトランザクションのステータス コードが提供されます。weblogic.transaction.Transaction
の getStatusAsString
メソッドを使用すると、トランザクションのステータスを文字列として返すことができます。文字列には、javax.transaction.Status
で指定されているメジャー ステートと、補足的なマイナー ステート (logging
や pre-preparing
など) が含まれます。
トランザクションの統計は、サーバ上のトランザクション マネージャで処理されるすべてのトランザクションについて提供されます。それらの統計には、トランザクションの総数、特定の結果 (コミット、ロールバック、ヒューリスティックな終了など) を持つトランザクションの数、ロールバックされたトランザクションの理由別の数、およびトランザクションがアクティブな状態を維持した合計時間が含まれます。トランザクションの統計の詳細については、「トランザクションのモニタ」を参照してください。
トランザクション サービスには以下の制約があります。
WebLogic Server では、クライアントまたはサーバ オブジェクトは別のトランザクションに参加しているオブジェクトのメソッドを呼び出すことができない。クライアントまたはサーバによってそのようなメソッド呼び出しが発行された場合は例外が返されます。
WebLogic Server では、Java Transaction API (Java アプリケーション用) のサード パーティ実装を使用するクライアントはサポートされていない。
トランザクション ログ バッファは 250 KB に制限されている。この値を超えるトランザクション ログ書き込みを必要とする大規模なトランザクションがアプリケーションにある場合、WebLogic Server は例外を送出します。このような場合、バッファ サイズの制限に対処するようにアプリケーションを再コンフィグレーションする必要があります。
トランザクションのスコープは、そのトランザクションが実行される環境を表します。WebLogic Server では、スタンドアロン サーバでのトランザクション、クラスタ化されていないサーバ間でのトランザクション、ドメイン内のクラスタ化されたサーバ間でのトランザクション、およびドメイン間のトランザクションがサポートされています。ドメイン間トランザクションのサポートを有効化するには、「ドメイン間トランザクションに対するドメインのコンフィグレーション」を参照してください。
WebLogic Server EJB コンテナでは、WebLogic Server EJB アプリケーションでの以下の 2 種類のトランザクションをサポートするトランザクション サービスが提供されます。
コンテナ管理のトランザクション。コンテナ管理のトランザクションでは、WebLogic Server EJB コンテナによってトランザクションの境界設定が管理されます。EJB デプロイメント記述子のトランザクション属性では、各メソッド呼び出しで WebLogic Server EJB コンテナがどのようにトランザクションを処理するのかが指定されます。
Bean 管理のトランザクション。Bean 管理のトランザクションでは、EJB によってトランザクションの境界設定が管理されます。EJB は、UserTransaction
オブジェクトに対する明示的なメソッド呼び出しを行って、トランザクションの開始、コミット、およびロールバックを行います。UserTransaction
メソッドの詳細については、『Oracle Fusion Middleware Oracle WebLogic Server API Reference』の「weblogic.transaction.UserTransaction
」を参照してください。
EJB アプリケーションにおけるトランザクション管理の概要については、「WebLogic Server EJB アプリケーションのトランザクション」および「トランザクションのサンプル EJB コード」を参照してください。
WebLogic Server は、WebLogic Server RMI アプリケーションのトランザクションをサポートするトランザクション サービスを備えています。RMI アプリケーションでは、クライアント アプリケーションまたはサーバ アプリケーションが UserTransaction
オブジェクトに対する明示的なメソッド呼び出しを行って、トランザクションの開始、コミット、およびロールバックが行われます。
UserTransaction
のメソッドの詳細については、オンラインの Javadoc を参照してください。RMI アプリケーションにおけるトランザクション管理の概要については、「WebLogic Server RMI アプリケーションのトランザクション」および「トランザクションのサンプル RMI コード」を参照してください。
WebLogic Server は、OTS (Object Transaction Service) との相互運用をサポートするトランザクション サービスを備えています。詳細については、Java Transaction Service (JTS) 仕様 (http://java.sun.com/products/jts/index.html
) を参照してください。このリリースの WebLogic Server では、以下の状況において OTS との相互運用が行われます。
この状況では、サーバ間の 2 フェーズ コミット (2PC) トランザクションを介在によって完了します。発信側サーバは、Xid を作成し、対象サーバにトランザクションを伝播します。対象サーバは、自身をリソースとして発信側サーバに登録します。発信側サーバが、トランザクションを完了させます。「ロギング ラスト リソース トランザクションの最適化」で説明されているように、ロギング ラスト リソース (LLR) トランザクションはサポートされていません。
クライアントが、OTS クライアント API を使用してサーバ上でトランザクションを開始します。次に、このトランザクションから Xid を取得し、トランザクションがコミットされるまで、この Xid をリクエストごとに伝播します。トランザクションを開始するのはクライアントですが、コミット処理はすべてサーバ上で実行されます。