非チェック例外 and チェック例外
① システムレベル例外 非チェック例外
② アプリケーション例外 非チェック例外
③ アプリケーション例外 チェック例外
④ リソース例外 チェック例外
① 空参照、ゼロ除算など、アプリケーション不具合発生した際に、JVMによってスローされた例外です。Java.lang.RuntimeExceptionクラスかそのサブクラスを指します。
② ありえない条件分岐やデータの不整合など、アプリケーション的な異常が発生した際にスローされた例外です。java.lang.RuntimeExceptionクラスかそのサブクラス、あるいは、java.lang.RuntimeException継承した独自の例外クラス。
③ 残高不足や期限切れなど、ビジネス上のルール違反が発生した際にスローされた例外です。この場合は、呼び出し元で適切に回復処理を行う必要がある。java.lang.Exception継承した独自の例外クラス。
④ 外部リソースアクセスで異常が発生した際に、JVM、JavaEEサーバ、JDBCドライバ等によってスローされた例外です。具体的に、java.io.IOException,java.sql.SQLException,java.jms.JMSExceptio,javax.naming.NamingException
非チェック例外発生の場合、EJBコンテナは、Rollbackし、呼び出し元に、受け取った例外を、javax.ejb.EJBException(ローカル呼び出しの場合)か、javax.rmi.RemoteException(リモートで呼び出しの場合)でラップして返します。
チェック例外発生の場合、Rollbakcしません。ただし、明示的に「ロールバックマーク」をつけていた場合、rollbackします。呼び出し元に、受け取った例外をそのまま再スローします。チェック例外をスローするためには、メソッドにthrows宣言が必要です。