3.12.1概要
- このサンプルの目的
このアプリケーション作成例を通して、以下について知ることができます。
- 例外ハンドリングの実装方法
- サンプルアプリケーションの内容
CB3では特別な例外処理を行いたい場合、サービス内でキャッチすることを想定しています。 サービス内で例外処理を行ったあとに、ジョブを異常終了させたい場合、サービス例外(CB3が提供する例外)や実行時例外、または、エラーをスローします。 スローされた例外はCB3が捕捉し、使用しているリソース(アクセッサで使用したDBやファイルなど)の解放を行った後にジョブを異常終了させます。
CB3が提供する機能がスローする例外については、各機能のJavadocを参照してください。
このサンプルでは以下のファイルについて説明します。- ExceptionHandling.java
サービスのプログラムです。 - 起動用バッチファイル - exceptionhandling.bat
サービスを起動するためのバッチファイルです。
- ExceptionHandling.java
3.12.2サービスの作成
- ExceptionHandling.java
01:public class ExceptionHandling extends CB3Service { 02: 03: /** 04: * 例外キャッチのサンプルメソッド 05: * DBアクセスで意図的に例外を発生させている 06: */ 07: @Override 08: protected int doService(ServiceParameters serviceparameters, 09: RuntimeParameters runtimeparameters) throws ServiceException { 10: 11: LogMessageFactory message = new LogMessageFactory(ExceptionMessageContant.CB3_EXCEPTION_FILE); 12: 13: DBQueryParameterMap param = new DBQueryParameterMap(); 14: DBAccessor ac = (DBAccessor)getDataAccessContext().lookup("dbaccessConfig"); 15: 16: try { 17: ac.delete("delete"); 18: 19: param.put("ID", "1"); 20: param.put("VALUE", "test"); 21: ac.insert("insert", param); 22: 23: //IDが重複するためエラー発生 24: param.put("ID", "1"); 25: param.put("VALUE", "error"); 26: ac.insert("insert", param); 27: 28: } catch (DataAccessException e) { 29: String exceptionMsg = message.getMessage(ExceptionMessageContant.CB3_EXCEPTION_MESSAGE); 30: System.out.println(exceptionMsg); 31: 32: //キャッチした例外をラップし送出 33: throw new ServiceException(exceptionMsg, e); 34: } 35: 36: return ExitCodeConstant.SUCCESS; 37: } 38:}
11行目:
例外用のメッセージファクトリオブジェクトを生成しています。
28行目〜34行目:
このサンプルプログラムではDBアクセスで意図的に発生させた例外をスローしています。doService()メソッドはjp.co.cybec.cb3.exception.ServiceExceptionのみを スローすることができます。よって、33行目ではServiceExceptionに発生元の例外を設定しています。
ServiceExceptionには以下のメソッドが定義されています。public ServiceException(Exception cause)
発生元の例外を引数にとります。public ServiceException(String msg)
例外発生時のメッセージを引数にとります。public ServiceException(String msg, Exception cause)
発生元の例外と例外発生時のメッセージを引数にとります。
3.12.3サービスの実行
- exceptionhandling.bat
下記バッチファイルはサービスを起動するためのバッチファイルです。
01:@echo off 02: 03:setlocal 04: 05:call ./set_classpath_com.bat 06: 07:set CLASSPATH=%CB3_HOME%/resources/config/exceptionhandling;%CLASSPATH% 08: 09:java jp.co.cybec.cb3.container.provider.ServiceProviderImpl -ServiceName exceptionhandling 10: 11:pause
上記バッチファイルを実行すると下記のように表示されます。
JobProcessID:[exceptionhandling20080822111606] ServiceID:[exceptionhandling] Mes sageID:[CB3.EXCEPTION.MESSAGE] サンプル用の例外が発生しました! 続行するには何かキーを押してください . . .
cb3.log確認すると以下のようにログ出力されています。(一部抜粋)