CDIステレオタイプはEJBセッションBeanでは機能しません

私は以下のようなInterceptorBindingのいくつかを含むCDIステレオタイプを持っています:

@Inherited
@InterceptorBinding
@Retention(RetentionPolicy.RUNTIME)
@Target({
    ElementType.METHOD,
    ElementType.TYPE})
@Documented
public @interface MyInterceptable {

}

@Interceptor
@MyInterceptable
public class MyInterceptor {
    @AroundInvoke
    public Object perform(InvocationContext context) throws Exception {
        log.info("My Interceptor begin.");
        Object result =context.proceed();
        log.info("My Interceptor end.");
        return result;
    }
}

@Stereotype
@MyInterceptable
@Retention(RetentionPolicy.RUNTIME)
@Target({
   ElementType.TYPE
   })
@Documented
public @interface MyStereoable {

}

このSterotypeを非EJBで定義すると、正しく動作します。このメッセージは、doing1()の実行の前後に出力されます。

@Singleton
@MyStereoable
public class MyCustomized {
   public void doning1(){
     //print something.
   }
}

とにかく、これをステートレスEJBで使用しようとすると、それは機能しません。インターセプターによって印刷されたメッセージはありません。

@Remote
public interface HelloServiceable extends Serializable {
   void doning2();
}

@Stateless
@MyStereoable
public class HelloService implements HelloServiceable {
    public void doing2() {
       //Print something
    }
}

それから、ケース1とケース2を次のように混ぜます:

@Stateless
@MyStereoable
public class HelloService implements HelloServiceable {
    @Inject
    private MyCustomized myBean;

    public void doing2() {
       this.myBean.doing1();
       //Print something
    }
}

MyCustomizedはインターセプトでき、メッセージは出力されますが、ステートレスEJBでは出力されません。

CDIとEJBについて誤解や混乱があるかどうかはわかりません。さらに助言してもらえますか?事前にお手数をおかけしていただきありがとうございます。私はあなたからすぐにあなたの意見を聞くことを楽しみにしています。

よろしく、

シャーリーCh。

0
どのコンテナでこれをテストしていますか?
追加された 著者 Kris,
Weld-1.1.4-FinalでWindows用のGlassfish 3.1.1を使用しています。 weld-osgi-bundle-1.1.4.Final.jarをダウンロードし、GF_HOME/glassfish/modulesに置き換えます。
追加された 著者 Charlee Chitsuk,

1 答え

プロジェクトをEAR/EJBプロジェクトからスタンドアロンWebプロジェクトに変更しました。 CDIステレオタイプは、EJBセッションBeanと連携して動作するようになりました。

私は github で小さなデモンストレーションを作成しました。 JBoss Arquillianを使ってテストしています。

私はこの情報が役に立つと思う。

よろしく、

シャーリーCh。

0
追加された