プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle WebLogic Server JTAアプリケーションの開発
12c (12.2.1.3.0)
E90356-04
目次へ移動
目次

前

16 トランザクションのトラブルシューティング

トランザクション失敗の原因を突き止めたり、問題修正の手段を決定したりする際に使用されるトラブルシューティング・ツールおよびタスクについて学習します。

概要

WebLogic Serverでは、実行中のトランザクションをモニターし、ヒューリスティックな終了のケースで適切な情報を確実に取り込むことができます。また、データベース問合せ、トランザクション・リクエスト、およびBeanメソッドのパフォーマンスをモニターすることもできます。

トラブルシューティング・ツール

WebLogic Serverでは、トランザクション・トラブルシューティングに対して例外、トランザクション識別子、トランザクション・ステータスなどの支援を提供します。

このトピックには次のセクションがあります。

例外

WebLogic JTAでは、すべての標準のJTA例外がサポートされています。標準JTA例外の詳細は、次のパッケージに対するAPI Javadocを参照してください。

標準のJTA例外に加えて、WebLogic Serverはweblogic.transaction.RollbackExceptionクラスを提供します。このクラスはjavax.transaction.RollbackExceptionを拡張し、ロールバックの元々の理由を保持します。トランザクションをロールバックする前、つまりrollbackonlyに設定する前に、アプリケーションではそのロールバックの理由を提供できます。トランザクション・サービスの中で発生したすべてのロールバックではその理由が設定されます。たとえば、タイムアウト、XAエラー、beforeCompletionでの非検査例外、あるいはトランザクション・マネージャへのアクセス不能などです。一度設定された理由は上書きできません。

TLOGストアおよびSQL問合せを使用してデータベースにログインする際に、30秒以上かかるとSystemException: Transaction could not be loggedがスローされます。この問題を解決するには、データベース・パフォーマンスおよび自動ワークロード・リポジトリ・レポートを参照して、遅くなっている原因を把握し、適宜データベース・チューニングを行います。

トランザクション識別子

トランザクション・サービスでは、各トランザクションにトランザクション識別子(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など)が含まれます。

トランザクションの統計

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

トランザクションのモニタリング

管理コンソールを使用すると、トランザクションを監視できます。監視タスクは、サーバー・レベルで実行されます。トランザクション統計は特定のサーバーごとに表示されます。

JTAリソースのデバッグ

特定のアプリケーションに問題があると突き止めたら、WebLogic Serverのデバッグ機能をアクティブ化して、アプリケーション内の特定の問題を探し当てることができます。

デバッグを有効化する

デバッグは、適切なServerDebug構成属性を「true」に設定することで有効化できます。必要に応じて、サーバーのStdoutSeverity「Debug」に設定することもできます。

構成属性は、以下のいずれかの方法で変更できます。

コマンド行を使用してデバッグを有効化する

コマンド行で適切なプロパティを設定します。例:

-Dweblogic.debug.DebugJDBCJTA=true 
-Dweblogic.log.StdoutSeverity="Debug"

この方法は静的なものであり、サーバーの起動時にのみ使用できます。

WebLogic Server管理コンソールを使用してデバッグを有効化する

WebLogic Server管理コンソールを使用して、デバッグ値を設定します。

  1. 実行していない場合は、WebLogic Server管理コンソールの「チェンジ・センター」で「ロックして編集」をクリックします(Oracle WebLogic Server管理コンソール・オンライン・ヘルプチェンジ・センターの使用に関する項を参照)。
  2. WebLogic Server管理コンソールの左ペインで、「環境」を開いて「サーバー」を選択します。
  3. 「サーバーのサマリー」ページで、デバッグを有効化または無効化するサーバーをクリックして、そのサーバーの設定ページを開きます。
  4. 「デバッグ」をクリックします。
  5. 「デフォルト」を展開します。
  6. 変更するデバッグ・スコープまたは属性のチェック・ボックスを選択します。
  7. 「有効化」(または「無効化」)を選択して、チェックを入れたデバッグ・スコープまたは属性を有効化(または無効化)します。
  8. WebLogic Server管理コンソールの「チェンジ・センター」で「変更のアクティブ化」をクリックしてこれらの変更内容を有効にします。
  9. ただし、すべての変更がすぐに反映されるわけではなく、一部の変更は再起動するまで適用されません(Oracle WebLogic Server管理コンソール・オンライン・ヘルプチェンジ・センターの使用に関する項を参照)。

    この方法は動的なものであり、サーバーの実行中にデバッグを有効化するのに使用できます。

WebLogic Scripting Toolを使用してデバッグを有効化する

WebLogic Scripting Tool (WLST)を使用してデバッグ値を設定します。たとえば、次のコマンドでは、debug.pyというデバッグ値を設定するためのプログラムが実行されます。

java weblogic.WLST debug.py

debug.py programプログラムには、以下のコードが含まれています。

user='user1'
password='password'
url='t3://localhost:7001'
connect(user, password, url)
edit()
cd('Servers/myserver/ServerDebug/myserver')
startEdit()
set('DebugJDBCJTA','true')
save()
activate()

JavaからもWLSTを使用することができます。次の例では、デバッグ値の設定に使用されるJavaファイルを示します。

import weblogic.management.scripting.utils.WLSTInterpreter;
import java.io.*;
import weblogic.jndi.Environment;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

public class test {
       public static void main(String args[]) {
       try {
              WLSTInterpreter interpreter = null;
              String user="user1";
              String pass="pw12ab";
              String url ="t3://localhost:7001";
              Environment env = new Environment();
              env.setProviderUrl(url);
              env.setSecurityPrincipal(user);
              env.setSecurityCredentials(pass);
              Context ctx = env.getInitialContext();

              interpreter = new WLSTInterpreter();
              interpreter.exec
                     ("connect('"+user+"','"+pass+"','"+url+"')");
              interpreter.exec("edit()");
              interpreter.exec("startEdit()");
              interpreter.exec
                     ("cd('Servers/myserver/ServerDebug/myserver')");
              interpreter.exec("set('DebugJDBCJTA','true')");
              interpreter.exec("save()");
              interpreter.exec("activate()");

       } catch (Exception e) {
       System.out.println("Exception "+e);
       }
       }
}

WLSTの使用は動的な方法であり、サーバーの実行中にデバッグを有効化できます。

config.xmlファイルの変更内容

WebLogic Server管理コンソール、WLSTまたはコマンド行を使用してデバッグ特性を変更すると、その内容がconfig.xmlファイルに反映されます。「例16-1」を参照してください。

例16-1 JTAのデバッグ・スタンザのサンプル

.
.
.
<server>
<name>myserver</name>
<server-debug>
<debug-scope>
<name>weblogic.transaction</name>
<enabled>true</enabled>
</debug-scope>
<debug-jdbcjta>true</debug-jdbcjta>
</server-debug>
</server> 
.
.
.

以下のconfig.xmlのサンプル(抜粋)に、トランザクション・デバッグのスコープ(複数のデバッグ属性)および1つのJTA属性を示します。

JTAのデバッグ・スコープ

java weblogic.diagnostics.debug.DebugScopeViewerを使うとDebugScope定義をツリー表示できます。

以下に示すJTA用の登録済みデバッグ・スコープを有効化できます。

  • DebugJDBCJTA (スコープweblogic.jdbc.transaction) - 未使用

  • DebugJTAXA (スコープweblogic.transaction.xa) - XAリソースのトレース

  • DebugJTANonXA (スコープweblogic.transaction.nonxa) - 非XAリソースのトレース

  • DebugJTAXAStackTrace (スコープweblogic.transaction.stacktrace) - 様々な重要な場所でのスタック・トレースを出力する詳細なトレース

  • DebugJTARMI (スコープweblogic.transaction.rmi) - 未使用

  • DebugJTA2PC (スコープweblogic.transaction.twopc) - すべての2フェーズ・コミット処理のトレース

  • DebugJTA2PCStackTrace (スコープweblogic.transaction.twopcstacktrace) - スタック・トレースを出力する詳細な2フェーズ・コミット・トレース

  • DebugJTATLOG (スコープweblogic.transaction.tlog) - トランザクション・ロギング情報のトレース

  • DebugJTAJDBC (スコープweblogic.transaction.jdbc, weblogic.jdbc.transaction) - JTAレコードの読み書きに関する情報のトレース

  • DebugJTARecovery (スコープweblogic.transaction.recovery) - リカバリ情報のトレース

  • DebugJTAGateway (スコープweblogic.transaction.gateway) - インポートされたトランザクションに関する情報のトレース

  • DebugJTAGatewayStackTrace (スコープweblogic.transaction.gatewaystacktrace) - インポートされたトランザクションに関連するスタック・トレース

  • DebugJTANaming (スコープweblogic.transaction.naming) - トランザクションの命名情報のトレース

  • DebugJTANamingStackTrace (スコープweblogic.transaction.namingstacktrace) - トランザクションの命名情報のトレース

  • DebugJTAResourceHealth (スコープweblogic.transaction.resourcehealth) - XAトランザクション・リソースの状態に関する情報のトレース

  • DebugJTAMigration (スコープweblogic.transaction.migration) - トランザクション・ログの移行に関する情報のトレース

  • DebugJTALifecycle (スコープweblogic.transaction.lifecycle) - トランザクション・サーバーのライフサイクル(初期化、中断、再開、停止)に関する情報のトレース

  • DebugJTALLR (スコープweblogic.transaction.llr) - すべてのロギング・ラスト・リソース処理のトレース

  • DebugJTAHealth (スコープweblogic.transaction.health) - トランザクション・サブシステムの状態に関する情報のトレース

  • DebugJTATransactionName (スコープweblogic.transaction.name) - トランザクション名のトレース

  • DebugJTAResourceName (スコープweblogic.transaction.resourcename) - トランザクション・リソース名のトレース