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

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

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

この章では、トランザクション失敗の原因を突き止めたり、問題修正の手段を決定したりするためのトラブルシューティング ツールおよびタスクについて説明します。

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

 


概要

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

 


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

WebLogic Server では、トランザクションのトラブルシューティングで以下の支援を利用できます。

例外

WebLogic JTA では、すべての標準の JTA 例外がサポートされています。標準の JTA 例外の詳細については、javax.transaction および javax.transaction.xa パッケージ API の Javadoc を参照してください。

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

トランザクション識別子

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

トランザクションの統計

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

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

Administration Console を使用すると、トランザクションをモニタできます。モニタ タスクは、サーバ レベルで実行されます。トランザクション統計は特定のサーバごとに表示されます。

JTA リソースのデバッグ

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

デバッグの有効化

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

コンフィグレーション属性は、以下のいずれかの方法で修正できます。

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

コマンドラインで適切なプロパティを設定します。次に例を示します。

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

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

WebLogic Server Administration Console を使用してデバッグを有効化する

WebLogic Server Administration Console を使用して、デバッグ値を設定します。

  1. まだ行っていない場合、Administration Console のチェンジ センタで [ロックして編集] をクリックします (「チェンジ センタの使用」を参照)。
  2. Administration Console の左ペインで、[環境] を展開して [サーバ] を選択します。
  3. [サーバの概要] ページで、デバッグを有効化または無効化するサーバをクリックして、そのサーバの設定ページを開きます。
  4. [デバッグ] をクリックします。
  5. [デフォルト] を展開します。
  6. 変更するデバッグ スコープまたは属性のチェック ボックスを選択します。
  7. [有効化](または [無効化]) を選択して、チェックを入れたデバッグ スコープまたは属性を有効化 (または無効化) します。
  8. Administration Console のチェンジ センタで [変更のアクティブ化] をクリックしてこれらの変更をアクティブ化します。
    すべての変更が即座に有効になるわけではありません。再起動が必要な場合もあります (「チェンジ センタの使用」を参照)。
  9. この方法は動的なもので、サーバの実行中にデバッグを有効化するのに使用できます。

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 ファイルの変更内容

コンソール、WLST、またはコマンドラインでデバッグ特性を変更すると、その内容が config.xml ファイルに反映されます。コード リスト 13-1 を参照してください。

コード リスト 13-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 用の登録済みデバッグ スコープを有効化できます。


  ページの先頭       前  次