ページの先頭行へ戻る
Interstage Business Application Server アプリケーション開発ガイド
FUJITSU Software

6.3 エラー処理

業務処理開始アプリケーションで利用する非同期アプリケーション連携実行基盤のAPIを実行したときの、メソッドの動作に従ってエラー処理を記述します。
非同期アプリケーション連携実行基盤のAPIを実行したときのメソッドの動作は、“■APIを実行したときのメソッドの動作”を参照してください。
非同期アプリケーション連携実行基盤のJava APIの詳細は、“ Interstage Business Application Server リファレンス”の“アプリケーションインタフェース(Java)”を参照してください。

非同期アプリケーション連携実行基盤のAPIのエラー処理記述を以下に示します。

com.fujitsu.interstage.apfw.client.FlowExceptionのハンドリング

非同期アプリケーション連携実行基盤のAPIを組み込むと、以下のソースが挿入されています。
APIを実行したときに例外が発生した場合の処理をTODO部に記述します。

catch (FlowException e) {
    // TODO エラー処理を記述してください。

}

■フローを実行した結果のハンドリング

非同期アプリケーション連携実行基盤のAPIを組み込むと、以下のソースが挿入されています。
処理結果のメッセージを取得したときの処理を記述します。TODO部に処理を記述します。
処理結果のメッセージを取得するAPIの動作については、“■APIを実行したときのメソッドの動作”の“◆処理結果のメッセージを取得するAPIの動作”を参照してください。

FlowMap result = flowClient.receiveMessage(cid);
if (result != null) { int kind = result.getMessageKind(); if (kind == FlowMap.KIND_SUCCESS) { // TODO 正常時の処理を記述してください。 } else if (kind == FlowMap.KIND_ERROR_SEND_ERRORQUEUE) { // TODO メッセージがエラーメッセージ退避キューへ退避された場合の処理を記述してください。 } else if (kind == FlowMap.KIND_ERROR_WRITE_SERIALIZEFILE) { // TODO メッセージがシリアライズファイルへ退避された場合の処理を記述してください。 } } else { // TODO 結果受信キューに処理結果のメッセージが存在しない場合の処理を記述してください。 }

フローを実行した結果として異常が発生した場合、com.fujitsu.interstage.apfw.client.FlowMapクラスのgetErrorListメソッドにより、異常情報が格納されたオブジェクト配列を取得できます。異常情報のオブジェクトはcom.fujitsu.interstage.apfw.client.IFlowErrorインタフェースで参照可能です。異常情報オブジェクトに含まれる異常情報の種類を以下に示します。

異常情報の種類

メソッド

詳細

エラーコード

getErrorCode

エラーの種別を判別するためのコードです。

処理結果種別

getMessageKind

メッセージの処理結果を判別するためのコードです。

エラー発生日時

getErrorDate

エラーの発生日時です。

エラーメッセージ

getErrorMessage

エラーの内容を示すメッセージです。

エラー発生サーバ名

getErrorServerName

エラーが発生したサーバ名です。

エラー発生キューDestination名

getErrorDestination

エラーが発生したキューのDestinationです。

業務アプリケーションのエラーコード (注)

getUserErrorCode

業務アプリケーションで異常が発生した際のエラーコードです。

業務アプリケーションのエラー詳細情報 (注)

getUserErrorData

業務アプリケーションで異常が発生した際のエラー詳細情報です。

業務アプリケーションのエラーメッセージ (注)

getUserErrorMessage

業務アプリケーションで異常が発生した際のエラーメッセージです。

注) 業務アプリケーションでエラーが発生した場合のみ有効な値を取得できます。

異常が発生した場合の処理機能の詳細については、“2.4 異常処理”を参照してください。

補償処理メッセージが発行された場合の情報の取得方法

補償処理メッセージが発行された場合の情報を取得する方法を、以下に示します。

フローを実行した結果がcom.fujitsu.interstage.apfw.client.FlowMap.KIND_SUCCESSとして返却されます。このとき、処理結果のメッセージであるcom.fujitsu.interstage.apfw.client.FlowMapオブジェクトからgetErrorListメソッドを行うことで、補償処理の情報が格納されたオブジェクト配列を取得することができます。

int kind = result.getMessageKind();
if (kind == FlowMap.KIND_SUCCESS) {
    // TODO 正常時の処理を記述してください。
    IFlowError[] iFlowErrors = result.getErrorList();
    if (iFlowErrors.length > 0) {
        int eKind = iFlowErrors[0].getMessageKind();
        if (eKind == FlowMap.KIND_ERROR_SEND_UNDOMESSAGE) {
            // 補償処理メッセージが発行された場合の処理を記述。
            ・・・
        }
    }
}

APIの詳細は、“ Interstage Business Application Server リファレンス”の“アプリケーションインタフェース(Java)”を参照してください。

エラーメッセージ退避キューからのメッセージ受信

エラーメッセージ退避キューに退避されたメッセージは、業務処理開始アプリケーションでcom.fujitsu.interstage.apfw.client.FlowClientクラスのreceiveMessageErrorメソッドを使用することで、受信できます。また、このメッセージから、エラーメッセージ退避キューに退避される契機となったエラー情報を取得することができます。取得したメッセージに含まれている情報の参照方法については、“■フローを実行した結果のハンドリング”を参照してください。

エラーメッセージ退避キューからのメッセージを受信する場合と、そのメッセージのエラー情報を取得する場合の記述例を以下に示します。

FlowClient flowClient = new FlowClient("flow01", "apfwdefdb");
// エラーメッセージ退避キューへ退避されたメッセージを受信
FlowMap result = flowClient.receiveMessageError();

// エラーメッセージ退避キューへ退避される契機となったエラー情報を取得
IFlowError[] iFlowErrors = result.getErrorList();
int length = iFlowErrors.length;
if (length > 0) { 
    // 処理結果種別を取得
    int errKind = iFlowErrors[length-1].getMessageKind();

    // エラーコードを取得
    String errCode = iFlowErrors[length-1].getErrorCode();

    // エラーメッセージを取得
    String errMessage = iFlowErrors[length-1].getErrorMessage();

    // エラーが発生した日時を取得
    Date errDate = iFlowErrors[length-1].getErrorDate();

    // エラーが発生したサーバ名を取得
    String errServerName = iFlowErrors[length-1].getErrorServerName();

    // エラーが発生したキューのDestination名を取得
    String errDestination = iFlowErrors[length-1].getErrorDestination();

    // エラーが発生した業務処理実行アプリケーションのエラーコードを取得
    String usrErrCode = iFlowErrors[length-1].getUserErrorCode();

    // エラーが発生した業務処理実行アプリケーションのエラーメッセージを取得
    String usrErrMessage = iFlowErrors[length-1].getUserErrorMessage();

    // エラーが発生した業務処理実行アプリケーションのエラー情報を取得
    byte[] usrErrData = iFlowErrors[length-1].getUserErrorData();
}

注意

1つのエラーメッセージ退避キューを複数のフロー定義で定義している場合、取得したメッセージは、FlowClientに設定しているフロー定義を用いて開始されたものではない可能性があります。

APIの詳細は、“Interstage Business Application Server リファレンス”の“アプリケーションインタフェース(Java)”を参照してください。