Oracle® Fusion Middleware Oracle WebLogic Server JTAのプログラミング 11g リリース1 (10.3.6) B61631-05 |
|
![]() 前 |
![]() 次 |
この章では、WebLogic Serverサーバーで使用するトランザクション・アプリケーションを作成するために使用される情報を説明します。トピックには、トランザクション・サービスの機能や制限、EJBでの使用方法およびObject Transaction Service (OTS)が含まれます。
この章では、以下のトピックについて説明します。
WebLogic Serverは、EJBアプリケーションとRMIアプリケーションのトランザクションをサポートする「トランザクション・サービス」を提供します。WebLogic Server EJBコンテナでは、このトランザクション・サービスにより、Enterprise JavaBeans仕様3.0 (http://www.oracle.com/technetwork/java/javaee/ejb/index.html
)に記載されているトランザクション・サービスの実装が提供されます。
EJBとRMIのアプリケーションに対して、Javaアプリケーション用にJava Transaction API (JTA)を実装するjavax.transaction
パッケージおよびjavax.transaction.xa
パッケージもWebLogic Serverで提供されます。JTAの詳細は、Java Transaction API (JTA)仕様1.1 (http://www.oracle.com/technetwork/java/javaee/jta/index.html
)を参照してください。アプリケーションにおいてトランザクション境界の設定に使用されるUserTransaction
オブジェクトの詳細は、Oracle WebLogic Server APIリファレンスのweblogic.transaction.UserTransaction
を参照してください。
この節の内容は以下のとおりです。
以降の節では、EJBとRMIのアプリケーションをサポートするトランザクション・サービスの機能と制限について説明します。
軽量クライアントは、可用性が一定ではなく、管理のされていない、1ユーザー対象のデスクトップ・システムで動作します。デスクトップ・システムは、使用されないときは所有者によって電源が落とされます。そのような管理されていない、1ユーザー対象のデスクトップ・システムでは、トランザクションの調整などのネットワーク機能を行うべきではありません。特に、管理されていないシステムには、サーバー・リソースが関わるトランザクションにおいて、障害の影響を受けずに原子性、一貫性、隔離性、および持続性というACIDプロパティを維持するという役目を負わせるべきではありません。WebLogic Serverのリモート・クライアントは軽量クライアントです。
トランザクション・サービスを利用すると、軽量クライアントでは委託コミットを実行できます。つまり、軽量クライアントでは、トランザクションの調整をサーバー・マシン上のトランザクション・マネージャにまかせてトランザクションを開始および終了することができるのです。クライアント・アプリケーションは、ローカルのトランザクション・サーバーを必要としませんクライアント・アプリケーションは、ローカル・トランザクション・サーバーを必要としません。EJBクライアントまたはRMIクライアントで使用されるUserTransaction
のリモート実装によって、トランザクション調整の実際の作業がサーバー上のトランザクション・マネージャに委託されます。
アプレットなどのクライアントでは、JNDIを使用してUserTransaction
オブジェクトおよびTransactionManager
オブジェクトの参照を取得できます。クライアントでは、いずれかのオブジェクト参照を使用してトランザクションを開始できます。現在のスレッドのTransaction
オブジェクトを取得するには、クライアント・プログラムは((TransactionManager)tm).getTransaction()
メソッドを呼び出さなければなりません。
チェック済トランザクション動作は、そのトランザクションに関わるすべてのトランザクション・オブジェクトでトランザクション・リクエストの処理が完了しないかぎりcommit
が成功しないことを保証することで、トランザクションの整合性を提供します。トランザクション・サービスは、The 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 WebLogic Server APIリファレンスのweblogic.transaction.Transaction
を参照してください。
WebLogic JTAでは、トランザクションの命名とユーザー定義プロパティをサポートするjavax.transaction.Transaction
の拡張機能が提供されます。これらの拡張機能は、weblogic.transaction.Transaction
インタフェースに含まれています。
トランザクション名は、トランザクションの種類(送金やチケット購入など)を示します。したがって、サーバー上の一意のトランザクションを識別するトランザクションIDとは混同しないでください。トランザクション名を利用すると、例外やログ・ファイルでトランザクションの種類を簡単に識別できます。
ユーザー定義のプロパティはキーと値の組み合わせです。この場合のキーはプロパティを識別する文字列であり、値はプロパティに割り当てられた現在の値です。トランザクション・プロパティの値は、Serializable
インタフェースを実装するオブジェクトでなければなりません。アプリケーションでは、weblogic.transaction.Transaction
インタフェースで定義されているsetメソッドとgetメソッドを使用してプロパティを管理します。一度設定されたプロパティは、存続期間が終わるまでトランザクションとともに存在し、トランザクションがシステムを移動するときにはマシン間で受け渡しされます。プロパティはトランザクション・ログに保存され、クラッシュのリカバリ処理で復元されます。トランザクション・プロパティが複数回にわたって設定された場合は、最後に設定された値が保持されます。
トランザクション名とトランザクション・プロパティを設定および取得するメソッドの詳細は、Oracle WebLogic Server APIリファレンスの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アプリケーション用)のサード・パーティ実装を使用するクライアントはサポートされていません。
トランザクション・ログ・バッファは250KBに制限されています。この値を超えるトランザクション・ログ書込みを必要とする大規模なトランザクションがアプリケーションにある場合、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 WebLogic Server APIリファレンスの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://www.oracle.com/technetwork/java/javaee/jts-spec095-1508547.pdf
)を参照してください。このリリースのWebLogic Serverでは、以下の状況においてOTSとの相互運用が行われます。
この状況では、サーバー間の2フェーズ・コミット(2PC)トランザクションを介在によって完了します。発信側サーバーは、Xidを作成し、ターゲット・サーバーにトランザクションを伝播します。ターゲット・サーバーは、自身をリソースとして発信側サーバーに登録します。発信側サーバーが、トランザクションを完了させます。第7章「ロギング・ラスト・リソース・トランザクションの最適化」で説明されているように、ロギング・ラスト・リソース(LLR)トランザクションはサポートされていません。
クライアントが、OTSクライアントAPIを使用してサーバー上でトランザクションを開始します。次に、このトランザクションからXidを取得し、トランザクションがコミットされるまで、このXidをリクエストごとに伝播します。トランザクションを開始するのはクライアントですが、コミット処理はすべてサーバー上で実行されます。