我有一个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。
答案 0 :(得分:0)
我已将项目从EAR / EJB项目更改为独立的Web项目。 CDI Stereotype现在可以使用EJB Session Bean。
我在github创建了一个小型演示。请注意,它使用JBoss Arquillian进行测试。
我希望这些信息可能有用。
此致
Charlee Ch。