私はmethodB()という別のEJBメソッドを呼び出すmethodA()というEJBメソッドを持っています。これは新しいコンテナ管理トランザクションを開始します。 methodBでは、私は正しくcaughtBによって捕捉され、methodAに伝播されないトランザクションタイムアウトを強制しています。しかし、私はメソッドAが例外を受け取ることに驚いています。私はここでsoemthingが欠けていますか?EJBでのTransactionTimeout例外の処理
methodA() {
try {
methodB();
System.out.println("print me!");
} catch(Exception e) {
System.out.println("shouldn't be here");
}
}
@TransactionTimeout(5) //5 sec timeout
methodB() {
try {
Thread.sleep(6000);
} catch(Throwable t) {
System.out.println("Eating all the Exception..");
}
}
メソッドBがそれを食べたので、最初のメソッドは例外(EJBTransactionTimeoutException)を検出してはいけません。私は "私を印刷してください!"の代わりに "ここにはいけない"という出力を見ています。それは、すでにタイムアウト例外がスローされているにもかかわらず、コンテナがmethodBが完了した直後にEJBTransactionTimeoutExceptionのもう1つの例外をスローするのでは不思議です。
@phewataalこのように考えることができます。メソッドBの前後にコードが挿入されています。これはあなたの設定に従ってコンテナによって生成されたコードです。したがって、このコードは例外をスローします。 – alexsmail
プロキシがタイムアウトを処理していて例外をスローしていたことが、私のmethodAの結果として例外をキャッチしていたことになります。しかし、私はJBossアプリケーションをデバッグモードで実行しただけで、methodBによってスローされた例外をキャッチすることができました。なぜ私が方法Bを捕まえることができるのか不思議に思う。 – phewataal
methodBで実際にキャッチした例外の種類は何ですか? –