1

ステートレスBeanメソッドですべての呼び出しを行う前にロジックを実行する必要があります。

例:

class MyStatelessBean
{
   void myPreExecutionLogic()
   {
       System.out.println("pre method execution logic");
   }

   void method1()
   {
       System.out.println("method 1");
   }

   void method2()
   {
       System.out.println("method 2");
   }
}

EJBを使用してこれを行う方法はありますか?ある種のリスナーを登録するか、@ PreConstructのようにmyPreExecutionLogicに注釈を付けますか?

4

2 に答える 2

2

EJB3 を使用している場合は、Interceptor@AroundInvoke

@AroundInvoke アノテーションを使用してインターセプター クラスをセットアップする

public class MyInterceptor {

    @AroundInvoke
    public Object doSomethingBefore(InvocationContext inv) {
         // Do your stuff here.
         return inv.proceed();
    }
}

次に、クラス名で ejb メソッドに注釈を付けます

public class MyStatelessBean {

       @Interceptors ( {MyInterceptor.class} )
       public void myMethod1() {
于 2012-02-23T16:11:08.347 に答える
1

Kalの答えの少しのバリエーションで、宣言された例と同じクラスでメソッドを作成することができました(junits @Beforeを思い出します)。

また、内部の実際のメソッド呼び出しからスローされる例外のメソッド シグネチャの「throws Exception」も忘れないでください。ctx.proceed()

class MyStatelessBean
{

    @AroundInvoke
    public Object myPreExecutionLogic(InvocationContext ctx) throws Exception{
        System.out.println("pre method execution logic");

        return ctx.proceed();
    }

   void method1()
   {
       System.out.println("method 1");
   }

   void method2()
   {
       System.out.println("method 2");
   }
}
于 2017-11-27T12:03:19.613 に答える