システム例外またはアプリケーション例外
質問
定義のあいまいな点と、その影響の可能性について混乱しています。 Application Exceptions
そして System Exceptions
で EJB
. 。特に、例外が次のように定義されているかどうかを理解できません。
public class SomeException extends Exception{
...
}
になる予定です Application
または System Exception
. 。仕様によれば、 Application Exception
常にアノテーションを使用して定義する必要があります @ApplicationException
. 。したがって、上記のクラスは Application Exception
チェックされた例外であっても。私の質問は、正しい Java 構文と、その後の Java の動作に関するものです。 EJB Container
この場合に備えて Exception
のビジネス メソッド内でスローされる Session Bean
(ない Singleton
けれど):
@Stateless
@LocalBean
public class StatelessBean{
public void doStuff(){
throw new SomeException();
}
}
1) SomeException
throw句で宣言するか?
2) Container
メソッドの後のインスタンスを破棄します doStuff()
呼ばれますか?
3)最終的には Sytem Exception
私の仮定は正しいですか、それは System Exception
チェックされる場合もそうでない場合もあります RuntimeException
?
アップデート:
私の意見では、仕様に従って、チェックされた例外が常に例外である必要があるかどうかは明確ではありません。 Application Exception
. 。チェックされたものを定義するとどうなるでしょうか RuntimeException
?に含めるべきか throw
メソッドの?ですか? System
または Application Exception
?
public class SomeException extends RuntimeException{
...
}
解決
仕様には次のように書かれています。
チェック例外であるアプリケーション例外は、Bean のビジネス インターフェイス、非インターフェイス ビュー、ホーム インターフェイス、コンポーネント インターフェイス、および Web サービス エンドポイントのメソッドの throws 句にリストすることによって、そのように定義できます。チェックされていない例外であるアプリケーション例外は、ApplicationException メタデータ アノテーションを付けるか、デプロイメント記述子で application-Exception 要素を使用して示すことによって、アプリケーション例外として定義されます。
したがって、上記のクラスはチェック例外であるため、アプリケーション例外になります。そしてもちろん、メソッドの throws 句にリストする必要があります。そうしないと、コードはコンパイルされません。いいえ、仕様に従って、この例外がスローされた後に Bean インスタンスは破棄されません。