ヘッダーをスキップ
Oracle® Fusion Middleware Oracle WebLogic Server JTAアプリケーションの開発
12c (12.1.2)
E48087-03
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

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

この章では、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 Java 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では、マルチスレッド・トランザクション・クライアントがサポートされています。クライアントでは、複数のスレッドで同時にトランザクション・リクエストを行うことができます。

トランザクションID

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

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

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

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

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

トランザクション名とトランザクション・プロパティを設定および取得するメソッドの詳細は、Oracle WebLogic Server Java APIリファレンス.のweblogic.transaction.Transactionを参照してください。

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

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

トランザクションの統計

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

一般的な制約

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

  • WebLogic Serverでは、クライアントまたはサーバー・オブジェクトは別のトランザクションに参加しているオブジェクトのメソッドを呼び出すことができません。クライアントまたはサーバーによってそのようなメソッド呼出しが発行された場合は例外が返されます。

  • WebLogic Serverでは、Java Transaction API (Javaアプリケーション用)のサード・パーティ実装を使用するクライアントはサポートされていません

  • トランザクション・ログ・バッファは250KBに制限されています。この値を超えるトランザクション・ログ書込みを必要とする大規模なトランザクションがアプリケーションにある場合、WebLogic Serverは例外をスローします。このような場合、バッファ・サイズの制限に対処するようにアプリケーションを再構成する必要があります。

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

トランザクションのスコープは、そのトランザクションが実行される環境を表します。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)仕様(http://www.oracle.com/technetwork/java/javaee/jts-spec095-1508547.pdf)を参照してください。このリリースのWebLogic Serverでは、以下の状況においてOTSとの相互運用が行われます。

サーバー間の2PC

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

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

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