ORACLE JAPAN Server Release 6.1

 

  |  

  WebLogic Server ホーム   |     WTC ATMI プログラマーズ ガイド   |   前へ   |   次へ   |   目次   |   索引   |   PDF 版

アプリケーション エラーの管理

 

次の節では、アプリケーションでエラー条件を管理し解釈するメカニズムについて説明します。

 


アプリケーション エラーのテスト

注意: エラー条件のテスト方法を示すサンプルを表示するには、 トランザクション コードの例を参照してください。

アプリケーション ロジックは、戻り値を持つ呼び出しの後にエラー条件をテストし、それらの条件に基づいて適切な手順を実行する必要があります。関数が値を返すイベントでは、特定の値をテストする関数を呼び出し、各条件に適切なアプリケーション ロジックを実行できます。

例外クラス

WebLogic Tuxedo コネクタでは、次の例外クラスが送出されます。

致命的なトランザクション エラー

トランザクションの管理では、どのエラーがトランザクションにとって致命的であるかを理解することが重要です。致命的なエラーが発生した場合、トランザクションのイニシエータによって commit() を呼び出し、そのトランザクションをアプリケーション レベルで明示的にアボートする必要があります。トランザクションは、次のような理由によりエラーとなります。

 


WebLogic Tuxedo コネクタのタイムアウト条件

WebLogic Tuxedo コネクタを使用するときに発生するタイムアウトには、次の 2 つのタイプがあります。

ブロッキング タイムアウトとトランザクション タイムアウト

ブロッキング タイムアウトは、呼び出しがブロッキング条件を消去するために待機できる時間を超えると発生します。トランザクション タイムアウトは、トランザクションが setTransactionTimeout() 内で定義された時間以上かかっている場合に発生します。デフォルトでは、プロセスがトランザクション モードでない場合、ブロッキング タイムアウトが実行されます。通信呼び出しの flags パラメータが TPNOTIME に設定されている場合は、ブロッキング タイムアウトのみが適用されます。プロセスがトランザクション モードである場合、ブロッキング タイムアウトおよび TPNOTIME フラグは適切ではありません。トランザクションが開始されたときにタイムアウトが定義されていた場合、プロセスはトランザクション タイムアウトのみに対応します。2 つの異なるタイプのタイムアウトの関係は、次のようになります。

commit() の影響

タイムアウトが commit() への呼び出しの後に発生した場合のトランザクションの状態は不明確です。トランザクションがタイムアウトし、そのトランザクションがアボートしたことをシステムが認識した場合、setRollbackOnly() はエラーを返します。

トランザクションの状態が明確ではない場合、トランザクションがコミットされたかアボートされたかを調べるために、リソースをクエリしてそのトランザクションの一部だった変更作業が適用されているかどうかを判断する必要があります。

TPNOTRAN の影響

注意: トランザクションは、そのトランザクションの一部ではないサービスからの応答を待機中にタイムアウトすることがあります。

プロセスがトランザクション内にあり、TPNOTRAN に設定された flags を使用して通信呼び出しを行う場合、呼び出されたサービスはそのトランザクションの参加コンポーネントになることはできません。サービスの成功または失敗は、そのトランザクションの結果に影響を与えません。

 


アプリケーション イベントのトラッキングのガイドライン

System.out.println() を使用してアプリケーションの実行を追跡し、WebLogic Server トレース ログにメッセージを書き込むことができます。String 型の変数を取得する log() メソッドを作成し、呼び出しへの引数として変数名を使用するか、呼び出しへの引数としてリテラルを引用符で囲んだメッセージを使用します。次の例は、tpcall() の進行状況を追跡するために使用する一連のメッセージです。

コード リスト 7-1 イベント ロギングの例

.

.

.

log("About to call tpcall");
try {
myRtn = myTux.tpcall("TOUPPER", myData, 0);
}
catch (TPReplyException tre) {
log("tpcall threw TPReplyExcption " + tre);
throw tre;
}
catch (TPException te) {
log("tpcall threw TPException " + te);
throw te;
}
catch (Exception ee) {
log("tpcall threw exception: " + ee);
throw new TPException(TPException.TPESYSTEM, "Exception: " + ee);
}
log("tpcall successfull!");
.

.

.

private static void

log(String s)

{ System.out.println(s);}

.

.

.

 

back to top previous page