CDI Stereotype不适用于EJB会话Bean

时间:2011-12-19 03:52:37

标签: ejb cdi

我有一个CDI Sterotypes,它包含一些InterceptorBinding,如下所示: -

@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 {

}

当我在非EJB中定义此Sterotype时,它可以正常工作。在执行done1()之前和之后打印消息。

@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有误解或混淆。你能帮忙进一步提出建议吗?非常感谢您的帮助。我很期待很快收到你的来信。

此致

Charlee Ch。

1 个答案:

答案 0 :(得分:0)

我已将项目从EAR / EJB项目更改为独立的Web项目。 CDI Stereotype现在可以使用EJB Session Bean。

我在github创建了一个小型演示。请注意,它使用JBoss Arquillian进行测试。

我希望这些信息可能有用。

此致

Charlee Ch。