EJB仕様ではEJBの実行中に発生する例外として、以下の2種類を定義しています。
アプリケーション例外: クライアントに通知される例外です。以下の全ての条件を満たす例外がアプリケーション例外です。
java.lang.Exceptionのサブクラスである。
java.lang.RuntimeExceptionのサブクラスではない。
java.rmi.RemoteExceptionのサブクラスではない。
システム例外: 処理を継続できなくなるような回復不能な例外を表します。この例外はEJBコンテナが受け取り、例外を発生したEJBのオブジェクトは削除されます。以下のすべての条件を満たす例外がシステム例外です。
アプリケーション例外でない。
java.rmi.RemoteExceptionのサブクラスではない。
ビジネスクラスで発生した例外も基本的に上記の分類に従って処理されます。
アプリケーション例外の場合、クライアントに通知されます。
システム例外の場合、EJBコンテナに通知されます。その結果、セションBeanのオブジェクトは削除されます。
ただし、ビジネスクラスがPostprocessorインタフェースを実装している場合は、例外はhandleExceptionメソッドで処理されます。handleExceptionメソッドが例外を発生した場合は、上記の処理に従います。handleExceptionメソッドについては、“4.2 エラー処理”を参照してください。
デバッグの目的で、セションBean内で発生したシステム例外をクライアントに通知する場合は、初期化パラメータuji.informSystemExceptionを“client”に設定してください。この設定により、システム例外はコンテナではなくクライアントに通知されます。また、システム例外が発生してもセションBeanオブジェクトは削除されません。運用時はuji.informSystemExceptionを“container”に設定して、通常どおりシステム例外がEJBコンテナに通知されるように設定してください。