概要:
ServiceProcess実行時に非システム例外が発生した場合の例外ハンドラを指定する。
エラーハンドラには、
- JavaHelperクラスの呼び出し
- SessionBeanHelerの呼び出し
- エラーメッセージ指定例外送信
- エラー番号付エラーメッセージ例外送信
- Directive指定(&Skipまたは&Return)
を指定することができる。
error宣言部が存在しない場合は、外部ServiceProcessHelperまたは、format_typeセクションで生成した例外内容がそのまま返される。
キー:
「error」(固定|オプション)
形式:
Key・値またはKey・複数値
記述1:JavaHelperクラスを指定する
error !パッケージ名を含むJavaクラス名
値の先頭に"!"をつけて、パッケージ名を含むJavaのクラス名を指定する。
記述例:
error !imeg.share.error.service.交通費精算書.交通費精算書保存ServiceErrorHandler
javaのクラスは、下記のインタフェースを実装する必要がある。
pexa.share.service.process.ServiceProcessErrorHandler
実行時には上記インタフェースの下記のメソッドが呼び出される
public ServiceSession handle(Service service, ServiceSession session, Exception ex) throws ServiceException, FatalException;
- service:例外が発生したService
- session:例外発生時のServiceSession
- ex:プロセス又は、外部ServiceHelperから送信された例外
なお、pexaは外部Helperクラスオブジェクトを取得するに当たって、下記の順番でメソッド、コンストラクタを検索する
- staticなgetInstance(pexa.share.util.res.Resource)
- staticなgetInstance()
- pexa.share.util.res.Resourceを引数に持つコンストラクタ
- デフォルトコンストラクタ
記述2:SessionBeanHelperを指定する
error !JNDIパス名
値の先頭に"!"をつけて、SessionBeanのJNDIパス名を指定する。
ただし、JNDIパス名に":"が含まれていること(":"の有無でSessionBeanの呼び出しであるか否かを判断している)
記述例:
error !facade:KoutsuhiSeisansyoServiceErrorHandler
SessionBeanは、下記のインタフェースを実装する必要がある
pexa.share.service.ServiceErrorHandlerFacade
実行時には上記インタフェースの下記のメソッドが呼び出される
public ServiceSession handle(ServiceProcess process, ServiceSession session, ServiceException ex) throws ServiceProcessException, FatalException;
- process:例外が発生したServiceProcess
- session:例外発生時のServiceSession
- ex:発生した例外
記述3:エラーメッセージを指定して例外送信
error "エラーメッセージ"
指定された例外メッセージを含むpexa.share.service.ServiceProcessExceptionを生成して例外を送信する。
このとき、ServiceExceptionに設定されるFatalReasonには、エラー番号"-402"ServiceProcessエラーが設定される。
(FatalReasonのサブクラスにはpexa.share.service.ServiceFatalReasonが使用される)
エラーメッセージには先頭が"!"で始まらない文字列を指定する。
エラーメッセージに空白を含む場合はダブルクオートでメッセージを囲む。
記述例:
error "XXの実行に失敗しました。"
記述4:エラー番号付エラーメッセージ例外送信
error "エラーメッセージ",エラー番号
指定された例外メッセージおよび、指定されたエラー番号によるpexa.share.service.UserServiceFatalReasonが設定されたpexa.share.service.ServiceExceptionを送信する。
エラーメッセージには先頭が"!で始まらない文字列を指定する。"
エラーメッセージに空白を含む場合はダブルクオートでメッセージを囲む。
エラー番号には正の数値を指定すること。
記述例:
error "XXの実行に失敗しました。"
記述5:Directive指定
error &Skip
error &Return
サービスを正常終了する。
プロセスの実行又は、外部ServiceHelperで例外が発生してもサービス呼び出し側にそれを通知したくない場合に利用する。