2つのビューを定義するEJBがあると仮定します。
- ローカルビジネス、
- リモートビジネス。
両方のインターフェイスは同じメソッドシグネチャを共有するため、次のようになります。
public interface MyBusinessCommon {
void myMethod(Object o);
}
@Local
public interface MyBusinessLocal extends MyBusinessCommon { }
@Remote
public interface MyBusinessRemote extends MyBusinessCommon { }
@Stateless
public class MyBusinessBean implements MyBusinessLocal, MyBusinessRemote {
public void myMethod(Object o) {
// ...
}
}
EJB自体(またはそのインターセプター)内からどのEJBビューが呼び出されたかを把握する方法はありますか?
使用するビューに応じて異なる認証手順を実行したいとします。リモートはより制約されるべきであり、ローカルはそうではありません。
呼び出すことはできますがSessionContext#getInvokedBusinessInterface()
、これはクラスオブジェクトに関する情報のみを提供します。EJBセマンティクスに関する情報は提供しません。単純にリフレクションを使用してインターフェースまたはBean上のアノテーションの存在をチェックするだけでは不十分です(で定義されたビューはejb-jar.xml
どうですか?)
ストレートEJB仕様を使用してそれが可能かどうかは疑問ですが、おそらく私が見逃したことがあります。
そうでない場合、アプリケーションサーバーの内部からこの情報を取得することは可能ですか?(JBoss AS 7.x、Glassfish 3.x、TomEE 1.5.1のみを考えてみましょう)。