EJBインターセプターから例外をスローする

ejb-3.1 glassfish-3 java java-ee
EJBインターセプターから例外をスローする

次のように見えるインターセプターがあるとしましょう:

public class AuthorizationInterceptor {

  Logger log = Logger.getLogger(getClass().getName());

  @AroundInvoke
  private Object authorize(InvocationContext ic) throws Exception{
    // ... some other logic for authorization

    if (!allowedMethods.contains(ic.getMethod().getName())){
      log.info("Authorization failed. Preparing to throw exception");
      throw new AuthException("Authorization failed for method " +
                ic.getMethod().getName());
    }

    return ic.proceed();
  }
}

これは、EJBのさまざまなメソッドに適用されます。

通常、すべての通常のEJB例外のように、例外がスローされることを呼び出し側クライアントに渡すことを期待しています。

インターセプターから投げた場合、どうやらこれは起こりません…​ サーバーにもログオンしていません。スローされることはありませんが、returnステートメントは実行されません。

何がおかしいのですか?

GF 3.0.1を使用しています

  5  0


ベストアンサー

この問題を少し検索した後、https://stackoverflow.com/questions/4284031/what-is-the-proper-way-to-deal-with-exceptions-in-interceptors-in-ejb3 [this SO post]数分前に回答されました。 見積もり:

_
それを行う正しい方法はないと思います。 メソッドは宣言した例外のみをスローする必要があり、インターセプターは新しい例外を追加しないでください。 私の個人的なケースは、すべてのメソッドによってスローされるデフォルトの例外にエラーコードを追加することで修正されました。
_

質問の著者は、この答えに答えて受け入れたのと同じ人なので、彼はあなたと同じ問題を解決しようとしていて、それができないという結論に達したと思います。

2


ここで試すべきことがいくつかあります。

1. Check that the authorize(...) method is called.
2. Try making the authorize(...) method public instead of private.
3. Check that the EJB has an annotation like this:
      @Interceptors(AuthorizationInterceptor.class)

1


タイトルとURLをコピーしました