Apcoordinator ユーザーズガイド
目次 前ページ次ページ

第2部 Apcoordinatorコアの機能> 第4章 APIを使ったプログラミング

4.3 エラー処理

ビジネスクラスで発生する例外に対して細かく制御を行うためにはtry-catchブロックを使用します。

    public void startup(DispatchContext context) {
        dm = new DataManager();
        try {
            dm.prepareData();
        } catch(DataManagerException e) {
            // 例外に応じた画面を表示するためのsetResponseBean
            ....
        } catch(IOException e) {
            // 例外に応じた画面を表示するためのsetResponseBean
            ....
        }
        ....
    }

Apcoordinatorでは、Postprocessorインタフェースを使って、あまり発生しないような例外をまとめて処理することができます。 ビジネスクラス、セションクラス、アプリケーションクラスでPostprocessorインタフェースを実装すると、処理中に例外が発生した場合にhandleExceptionメソッドが呼ばれます。 その例外に対応可能ならば対応して正常終了、対応不可能ならば再度その例外をスローします。 handleExceptionメソッドは、ビジネスクラスの外で発生した例外も受け取る可能性があります。そのため、例外に対応可能かどうか判定し、対応不可能な例外は再度スローする必要があります。

public class SampleHandler extends com.fujitsu.uji.GenericHandler
                                implements com.fujitsu.uji.Postprocessor
{
    public Object handleException(DispatchContext context, Throwable th) {
        if(th instanceof MyException) {
            // 例外に応じた画面を表示するsetResponseBean
            ....
        } else {
            // 不明な例外
            throw th;
        }
        return null;   // ダウンロードサーブレットを使用する場合に必要
    }
}

例外は発生時の形のままではなく、NestedExceptionに変換されて通知されることがあります。 NestedException形式の例外はgetRootCauseメソッドにより、原因の例外を知ることができます。

import com.fujitsu.uji.log.NestedException;
....
    public Object handleException(DispatchContext context, Throwable th) {
        while(th instanceof NestedException) {
            th = ((NestedException)th).getRootCause();
        }
        // thは原因の例外
        ....
    }
....


目次 前ページ次ページ

All Rights Reserved, Copyright © 富士通株式会社 2000-2005