BEA ホーム | 製品 | デベロッパ・センタ | support | askBEA
 ドキュメントのダウンロード   サイト マップ   用語集 
検索

BPM クライアント アプリケーション プログラミング

 前 次 目次 索引 PDFで表示  

ワークフロー例外のモニタリング

この章では、ワークフロー例外をモニタする方法について説明します。内容は以下のとおりです。

WebLogic Integration Studio を使用したワークフロー例外のモニタリングについては、『WebLogic Integration Studio ユーザーズ ガイド』の「ワークフロー例外の処理」を参照してください。

 


例外処理の概要

BEA WebLogic Integration の例外処理機能により、実行時における例外条件に対し、生成、トラップ、および対処できます。例外処理は、タスク レベルではなく、ワークフロー レベルで行われます。

以下の節では、ワークフロー例外と例外ハンドラについて説明します。例外処理の詳細については、『WebLogic Integration Studio ユーザーズ ガイド』の「ワークフローのモニタリング」を参照してください。

ワークフロー例外

ワークフロー例外とは、ユーザがワークフロー内で定義する異常な条件、またはユーザが適宜にトラップと処理を行う実行時の代表的なサーバ例外のことです。ワークフロー例外は、それぞれが適切な重大度レベルに対応する多数の条件の 1 つに対して送出されます。

ワークフロー例外に対して定義された重大度の各レベルを、その重大度コードの値を含め次の表に示します。

表24-1 ワークフロー例外の重大度レベル

重大度レベル

重大度コード

説明

システム エラー

ERROR_SYSTEM (1)

ユーザ要求を処理している時に致命的な例外が発生した。

ワークフロー エラー

ERROR_WORKFLOW (2)

ワークフロー ステータスの不一致など、致命的で不正な条件が発生した。

ワークフローの警告

WARNING_WORKFLOW (3)

致命的でないワークフロー条件が発生したが、これはユーザが手動で修正可能である。

不明なエラー

ERROR_UNKNOWN (0)

システム固有のエラーが発生した。この情報は内部使用でのみ利用可能である。

カスタム エラー

ERROR_CUSTOM (4)

com.bea.wlpi.server.worklist.Worklist.invokeWorkflowExceptionHandler() メソッドを呼び出すアプリケーション、または Studio 内の Invoke Error Handler アクションにより、カスタム エラーが発生した。

com.bea.wlpi.common.WorkflowException オブジェクトは、EJB のリモート呼び出しの実行時に発生したワークフロー例外をカプセル化します。

例外は wlpiError の JMS トピックに送られます。JMS への接続の詳細については、JMS コネクタの確立を参照してください。

ワークフロー例外ハンドラ

ワークフローのすべてのテンプレート定義では、システム例外ハンドラという少なくとも 1 つの例外ハンドラが指定されます。システム例外ハンドラは、デフォルトで設定される初期例外ハンドラで、例外が発生した時に常に呼び出されます。カスタム例外ハンドラを定義することもできます。ワークフロー テンプレート定義用のアクティブ例外ハンドラは、ワークフローの実行過程で繰り返し変更できます。

 


ワークフロー例外の作成

新しい WorkflowException オブジェクトを作成するコンストラクタを次の表にリストします。

表24-2 WorkflowException オブジェクトのコンストラクタ

コンストラクタ

作成オブジェクト

public WorkflowException (java.lang.Exception e)

ネストされた例外を含むワークフロー例外。指定された例外には、ERROR_SYSTEM の重大度レベルが割り当てられる。ただし、新たな例外がその重大度をネストされた例外から継承する WorkflowException クラスに属している場合を除く。

public WorkflowException (java.lang.Exception e, int severity)

指定された重大度レベルのネストされた例外を含むワークフロー例外。

有効な重大度レベルのリストについては、ワークフロー例外の重大度レベルの表を参照。

public WorkflowException( java.lang.Exception e, int msgNum, int severity)

指定されたメッセージ コードおよび重大度レベルのネストされた例外を含むワークフロー例外。

有効なメッセージ コードのリストについては、Javadoc の com.bea.wlpi.common.Messages を参照。有効な重大度レベルのリストについては、ワークフロー例外の重大度レベルの表を参照。

public WorkflowException( java.lang.Exception e, int msgNum, java.lang.Object[ ] args)

指定されたメッセージ コードと、ローカライズしたメッセージ文字列に置き換える引数のリストを持つ、ネストされた例外を含むワークフロー例外。

有効なメッセージ コードのリストについては、Javadoc の com.bea.wlpi.common.Messages を参照。

public WorkflowException( java.lang.Exception e, int msgNum, java.lang.Object[ ] args, int severity)

指定されたメッセージ番号、ローカライズしたメッセージ文字列に置き換える引数のリスト、およびメッセージの重大度レベルを持つ、ネストされた例外を含むワークフロー例外。

有効なメッセージ コードのリストについては、Javadoc の com.bea.wlpi.common.Messages を参照。有効な重大度レベルのリストについては、ワークフロー例外の重大度レベルの表を参照。

public WorkflowException(int msgNum)

指定されたエラー コードを持つワークフロー例外。指定された例外には、デフォルトで、ERROR_SYSTEM の重大度レベルが割り当てられる。

有効なメッセージ コードのリストについては、Javadoc の com.bea.wlpi.common.Messages を参照。

public WorkflowException(int msgNum, java.lang.Object[ ] args)

指定されたエラー コードと、ローカライズしたメッセージ文字列に置き換える引数のリストを持つワークフロー例外。指定された例外には、デフォルトで、ERROR_SYSTEM の重大度レベルが割り当てられる。

有効なメッセージ コードのリストについては、Javadoc の com.bea.wlpi.common.Messages を参照。

public WorkflowException(int msgNum, int severity)

指定されたエラー コードと重大度レベルを持つワークフロー例外。

有効なメッセージ コードのリストについては、Javadoc の com.bea.wlpi.common.Messages を参照。有効な重大度レベルのリストについては、ワークフロー例外の重大度レベルの表を参照。

public WorkflowException(int msgNum, java.lang.Object[ ] args, int severity)

指定されたエラー コード、ローカライズしたメッセージ文字列に置き換える引数のリスト、およびメッセージの重大度レベルを持つワークフロー例外。

有効なメッセージ コードのリストについては、Javadoc の com.bea.wlpi.common.Messages を参照。有効な重大度レベルのリストについては、ワークフロー例外の重大度レベルの表を参照。

public WorkflowException(int msgNum, java.lang.Object[ ] args, int severity, java.lang.String origin)

指定されたエラー コード、ローカライズしたメッセージ文字列に置き換える引数のリスト、メッセージの重大度レベル、およびメッセージの発生源を持つワークフロー例外。

有効なメッセージ コードのリストについては、Javadoc の com.bea.wlpi.common.Messages を参照。有効な重大度レベルのリストについては、ワークフロー例外の重大度レベルの表を参照。


 

 


ワークフロー例外情報の取得

以下の節では、ワークフロー例外(重大度レベル、メッセージ テキスト、メッセージ番号、メッセージの発生源、ワークフロー例外がデッドロックに起因するかどうか、など)の情報を収集する方法と、スタック トレースのプリント方法を説明します。

ワークフロー例外の取得

オリジナルまたはネストされたワークフロー例外を取得するには、以下のそれぞれの 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() メソッドの、値を指定するパラメータを次に表に示します。

表24-3 invokeWorkflowExceptionHandler() メソッドのパラメータ

パラメータ

説明

有効な値

templateDefinitionId

ユーザがエラー ハンドラを呼び出しているワークフロー テンプレート定義の ID

有効なテンプレート定義 ID。

テンプレート定義 ID を取得するには、次の com.bea.wlpi.common.TemplateDefinitionInfo メソッドを使用する。

public final String getId()

TemplateDefinitionInfo オブジェクトで選択可能なメソッドの詳細については、TemplateDefinitionInfo オブジェクトを参照。

instanceId

ワークフロー インスタンスの ID

テンプレート定義に関連するワークフロー インスタンスの ID。

インスタンス ID を取得するには、次の com.bea.wlpi.common.TemplateDefinitionInfo メソッドを使用する。

public final String getInstanceId()

TemplateDefinitionInfo オブジェクトを取得する方法については、ワークフロー インスタンスの取得を参照。TemplateDefinitionInfo オブジェクトで選択可能なメソッドの詳細については、TemplateDefinitionInfo オブジェクトを参照。

handlerName

呼び出しするエラー ハンドラの名前

有効なエラー ハンドラ。

xml

ユーザ定義のサブツリー

サブツリーを定義する XML ドキュメント。

transactionId

トランザクションの ID

注意: このパラメータは、クラスタ化環境においてのみ必要です。

ユニークなトランザクション ID を指定するオブジェクト。

ユニークなトランザクション ID を生成するには、次のコンストラクタを使用して新しい com.bea.wlpi.client.common.GUID オブジェクトを作成する。

GUID transactionId = new GUID();

GUID クラスの詳細については、Javadoc の com.bea.wlpi.client.common.GUID を参照。

このメソッドは、クライアント要求 DTDに記載のとおり、Client Request DTD の ClientReq.dtd に準拠する XML ドキュメントを返します。この XML ドキュメントは、実行中のインスタンスの情報を含み、たとえば、SAX (Simple API for XML) パーサーのような XML 構文解釈ツールを使用してドキュメント解析によるアクセスが可能です。SAX パーサーの実装サンプルについては、実行時タスクの管理例を参照してください。

たとえば、次のコード例はエラー ハンドラの MyErrorHandler を呼び出し、ユーザ定義のツリーを myXml 文字列の変数を介して渡し、結果の XML ドキュメントを clientReq 変数に格納します。このコード例では、worklistWorklist 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 を参照してください。

 

ページの先頭 前 次