EJB アプリケーション例外継承の振る舞いの変更を確認する

Java EE 6.0 仕様以降、アプリケーション例外はサブクラス例外クラスによってデフォルトで継承されるようになりました。 この振る舞いは、@ApplicationException アノテーション、または ejb-jar.xml ファイルの <application-exception> エレメントで構成可能です。

この規則により、定義された inherited 属性がない javax.ejb.ApplicationException アノテーションにフラグを立て、また定義された inherited エレメントがない ejb-jar.xml ファイル内の <application-exception> エレメントにフラグを立てます。


例えば、この規則は以下の @ApplicationException アノテーションにフラグを立てます。
@ApplicationException(rollback = true)
public class ExceptionA extends Exception {
}

public class ExceptionB extends ExceptionA {
}

この規則はまた、以下の例の ejb-jar.xml 内の <application-exception> エレメントにもフラグを立てます。
<application-exception>
    <exception-class>ExceptionA</exception-class>
    <rollback>true</rollback>
</application-exception>


ejb-jar.xml 内の例外は、以下の例のようにアプリケーションに実装できます。
public class ExceptionA extends Exception {
}

public class ExceptionB extends ExceptionA {
}

Java EE 5.0 では ExceptionB は ApplicationException と見なされませんが、Java EE 6.0 では ExceptionB は ExceptionA クラスから継承するので ApplicationException です。 Java EE 6.0 に追加された inherited 属性のデフォルト値は true です。 したがって、継承されたクラスもすべて ApplicationException です。

以下の方法で、Java EE 5.0 の動作を保持できます。

詳しくは、以下のリソースを参照してください。