質問

定義のあいまいな点と、その影響の可能性について混乱しています。 Application Exceptions そして System ExceptionsEJB. 。特に、例外が次のように定義されているかどうかを理解できません。

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 インスタンスは破棄されません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top