BEA ホーム | 製品 | デベロッパ・センタ | support | askBEA |
![]() |
![]() |
|
![]() |
e-docs > WebLogic Integration > BPM トピック > BPM クライアント アプリケーション プログラミング > ワークフロー例外のモニタリング |
BPM クライアント アプリケーション プログラミング
|
ワークフロー例外のモニタリング
この章では、ワークフロー例外をモニタする方法について説明します。内容は以下のとおりです。
WebLogic Integration Studio を使用したワークフロー例外のモニタリングについては、『WebLogic Integration Studio ユーザーズ ガイド』の「ワークフロー例外の処理」を参照してください。
例外処理の概要
BEA WebLogic Integration の例外処理機能により、実行時における例外条件に対し、生成、トラップ、および対処できます。例外処理は、タスク レベルではなく、ワークフロー レベルで行われます。
以下の節では、ワークフロー例外と例外ハンドラについて説明します。例外処理の詳細については、『WebLogic Integration Studio ユーザーズ ガイド』の「ワークフローのモニタリング」を参照してください。
ワークフロー例外
ワークフロー例外とは、ユーザがワークフロー内で定義する異常な条件、またはユーザが適宜にトラップと処理を行う実行時の代表的なサーバ例外のことです。ワークフロー例外は、それぞれが適切な重大度レベルに対応する多数の条件の 1 つに対して送出されます。
ワークフロー例外に対して定義された重大度の各レベルを、その重大度コードの値を含め次の表に示します。
com.bea.wlpi.common.WorkflowException オブジェクトは、EJB のリモート呼び出しの実行時に発生したワークフロー例外をカプセル化します。
例外は wlpiError の JMS トピックに送られます。JMS への接続の詳細については、JMS コネクタの確立を参照してください。
ワークフロー例外ハンドラ
ワークフローのすべてのテンプレート定義では、システム例外ハンドラという少なくとも 1 つの例外ハンドラが指定されます。システム例外ハンドラは、デフォルトで設定される初期例外ハンドラで、例外が発生した時に常に呼び出されます。カスタム例外ハンドラを定義することもできます。ワークフロー テンプレート定義用のアクティブ例外ハンドラは、ワークフローの実行過程で繰り返し変更できます。
ワークフロー例外の作成
新しい WorkflowException オブジェクトを作成するコンストラクタを次の表にリストします。
ワークフロー例外情報の取得
以下の節では、ワークフロー例外(重大度レベル、メッセージ テキスト、メッセージ番号、メッセージの発生源、ワークフロー例外がデッドロックに起因するかどうか、など)の情報を収集する方法と、スタック トレースのプリント方法を説明します。
ワークフロー例外の取得
オリジナルまたはネストされたワークフロー例外を取得するには、以下のそれぞれの com.bea.wlpi.common.WorkflowException メソッドを使用します。
public java.lang.Exception getOriginalException()
public java.lang.Exception getNestedException()
第 1 のメソッドでは、オリジナルのワークフロー例外が返されます。第 2 のメソッドでは、ネストされたワークフロー例外が返されますが、ネストされたワークフロー例外が存在しない場合は null が返されます。
たとえば、次のコードでは、所定のワークフロー例外に対してネストされたワークフロー例外が取得されます。
try {
// some methods;
}
catch(WorkflowException e) {
Exception nested e.getNestedException();
}
getOriginalException() と getNestedException() メソッドの詳細については、Javadoc の com.bea.wlpi.common.WorkflowException を参照してください。
重大度レベルの情報の取得
ワークフロー例外のメッセージの重大度レベルを取得するには、以下のいずれかの com.bea.wlpi.common.WorkflowException メソッドを使用します。
メソッド 1
public java.lang.String getSeverity()
メソッド 2
public java.lang.String getSeverityDescription()
メソッド 3
public java.lang.String getLocalizedSeverityDescription()
第 1 のメソッドでは、メッセージの重大度コードが整数値で返されます。第 2 のメソッドでは、メッセージの重大度の値が文字列の値で返されます。第 3 のメソッドでは、ローカライズされたメッセージの重大度コードが文字列の値で返されます。重大度レベルの値とコードについては、ワークフロー例外の重大度レベルの表を参照してください。
たとえば、次のコードでは、所定のワークフロー例外に対するメッセージの重大度コードを取得します。
try {
// some methods;
}
catch(WorkflowException e) {
String severity e.getSeverity();
}
getSeverity() メソッドの詳細については、Javadoc の com.bea.wlpi.common.WorkflowException を参照してください。
メッセージ テキストの取得
ワークフロー例外に関連したメッセージ テキストを取得するには、以下のいずれかの com.bea.wlpi.common.WorkflowException メソッドを使用します。
メソッド 1
public java.lang.String getMessage()
メソッド 2
public java.lang.String getLocalizedMessage()
第 1 のメソッドでは、ネストされたメッセージに関連したメッセージ テキスト(可能な場合)、例外を送出するシステム ロケールの言語によるメッセージ テキスト、およびメッセージ テキストが作成されなかった場合は null のいずれか 1 つが返されます。
第 2 のメソッドでは、ローカライズされたメッセージ テキスト(可能な場合)、例外を送出するシステム ロケールの言語によるメッセージ テキスト、およびメッセージ テキストが作成されなかった場合は null のいずれか 1 つが返されます。
たとえば、次のコードでは、所定のワークフロー例外に対するメッセージ テキストを取得します。
try {
// some methods;
}
catch(WorkflowException e) {
String message e.getMessage();
}
getMessage() または getLocalizedMessage() メソッドの詳細については、Javadoc の com.bea.wlpi.common.WorkflowException を参照してください。
メッセージ番号の取得
ワークフロー例外の場合のメッセージ番号を取得するには、次の com.bea.wlpi.common.WorkflowException メソッドを使用します。
public java.lang.String getMessageNumber()
たとえば、次のコードでは、所定のワークフロー例外に対するメッセージ テキストを取得します。
try {
// some methods;
}
catch(WorkflowException e) {
String number e.getMessageNumber();
}
getMessageNumber() メソッドの詳細については、Javadoc の com.bea.wlpi.common.WorkflowException を参照してください。
発生源の名前の取得
ワークフロー例外が発生した発生源(ワークフロー コンポーネント)の名前を取得するには、次の com.bea.wlpi.common.WorkflowException メソッドを使用します。
public java.lang.String getOrigin()
たとえば、次のコードでは、所定のワークフロー例外に対する発生源のテキストを取得します。
try {
// some methods;
}
catch(WorkflowException e) {
String origin e.getOrigin();
}
getOrigin() メソッドの詳細については、Javadoc の com.bea.wlpi.common.WorkflowException を参照してください。
ワークフロー例外がデータベースのデッドロックに起因するかの確認
ワークフロー例外がデッドロックに起因するかどうか確認するには、以下のいずれかの com.bea.wlpi.common.WorkflowException メソッドを使用します。
メソッド 1
public boolean isDeadlock()
メソッド 2
public static boolean isDeadlock(java.lang.Exception e)
各メソッドは、ワークフロー例外がデータベースのデッドロックに起因する場合は true を返し、それ以外の場合は false を返します。
第 2 のメソッドでは、オリジナルの例外を取り出すために、getOrginalException() メソッドが呼び出されます。オリジナルの例外が java.sql.SQLException のインスタンスの場合、このメソッドはオリジナルの問題がデータベースのデッドロックに起因するかどうかを判断するために、getSQLState() メソッドが呼び出されます。
たとえば、次のコードでは、メソッドが所定のワークフロー例外に対してデッドロックするかどうか判断されます。
try {
// some methods;
}
catch(WorkflowException e) {
String boolean e.isDeadlock();
}
isDeadlock() メソッドの詳細については、Javadoc の com.bea.wlpi.common.WorkflowException を参照してください。
スタック トレースのプリント
スタック トレースをプリントするには、以下のいずれかの com.bea.wlpi.common.WorkflowException メソッドを使用します。
メソッド 1
public void printStackTrace()
メソッド 2
public void printStackTrace(java.io.PrintStream stream)
メソッド 3
public void printStackTrace(java.io.PrintWriter writer)
各メソッドは、ワークフロー例外とそのバック トレースをプリントします。第 1 のメソッドでは、情報が標準エラー ストリーム(System.err)にプリントされ、第 2 のメソッドでは、指定されたプリント ストリームにプリントされ、第 3 のメソッドでは、指定されたプリント ライタにプリントされます。
出力の一行目には、このオブジェクトに対する toString() メソッドの呼び出しの結果が含まれます。残りの内容は、前回 fillInStackTrace() メソッドで記録されたデータを表します。ワークフロー例外にネストされたワークフロー例外が含まれる場合、このメソッドはそのスタック トレースもプリントされます。
たとえば、次のコードでは、所定のワークフロー例外に対するスタック トレースがプリントされます。
try {
// some methods;
}
catch(WorkflowException e) {
e.printStackTrace();
}
printStackTrace() メソッドの詳細については、Javadoc の com.bea.wlpi.common.WorkflowException を参照してください。
ワークフロー例外ハンドラの呼び出し
ワークフロー インスタンスに対してワークフロー例外ハンドラを呼び出す_には、以下の com.bea.wlpi.server.worklist.Worklist メソッドのいずれかを使用します。
メソッド 1
public java.lang.String invokeWorkflowExceptionHandler(
java.lang.String templateDefinitionId,
java.lang.String instanceId,
java.lang.String handlerName,
java.lang.String xml
) throws java.rmi.RemoteException,
com.bea.wlpi.common.WorkflowException
メソッド 2
public java.lang.String invokeWorkflowExceptionHandler(
java.lang.String templateDefinitionId,
java.lang.String instanceId,
java.lang.String handlerName,
java.lang.String xml,
java.lang.Object transactionId
) throws java.rmi.RemoteException,
com.bea.wlpi.common.WorkflowException
invokeWorkflowExceptionHandler() メソッドの、値を指定するパラメータを次に表に示します。
このメソッドは、クライアント要求 DTDに記載のとおり、Client Request DTD の ClientReq.dtd に準拠する XML ドキュメントを返します。この XML ドキュメントは、実行中のインスタンスの情報を含み、たとえば、SAX (Simple API for XML) パーサーのような XML 構文解釈ツールを使用してドキュメント解析によるアクセスが可能です。SAX パーサーの実装サンプルについては、実行時タスクの管理例を参照してください。
たとえば、次のコード例はエラー ハンドラの MyErrorHandler を呼び出し、ユーザ定義のツリーを myXml 文字列の変数を介して渡し、結果の XML ドキュメントを clientReq 変数に格納します。このコード例では、worklist は Worklist EJB への EJBObject 参照を表します。
String clientReq = worklist.invokeWorkflowExceptionHandler(
definition.getId(), instanceID, “MyErrorHandler”, myXml);
テンプレート定義 ID は、com.bea.wlpi.common.TemplateDefinitionInfo オブジェクトである definition と関連付けられたメソッドを使用して取得されます。InstanceInfo オブジェクトは、ワークフロー インスタンスの取得に記載のメソッドを使用して取得されます。instanceID は、InstanceInfo オブジェクトのメソッドを使用して取得されます。
com.bea.wlpi.common.TemplateDefinitionInfo メソッドの詳細については、TemplateDefinitionInfo オブジェクトを参照してください。com.bea.wlpi.common.InstanceInfo メソッドの詳細については、InstanceInfo オブジェクトを参照してください。
invokeWorkflowExceptionHandler() メソッドの詳細については、Javadoc の com.bea.wlpi.server.worklist.Worklist を参照してください。
![]() |
![]() |
![]() |
![]() |
||
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |