CDI Bean中的默认拦截器

时间:2015-06-17 16:32:12

标签: java java-ee java-ee-6 java-melody

我有一个问题。每当我们有EJB jar

<ejb-jar
   xmlns = "http://java.sun.com/xml/ns/javaee"
   version = "3.0"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"
        >
    <interceptors>
        <interceptor>
            <interceptor-class>net.bull.javamelody.MonitoringInterceptor</interceptor-class>
        </interceptor>
    </interceptors>
    <assembly-descriptor>
        <interceptor-binding>
            <ejb-name>*</ejb-name>
            <interceptor-class>net.bull.javamelody.MonitoringInterceptor</interceptor-class>
        </interceptor-binding>
    </assembly-descriptor>
</ejb-jar>

现在我的 MonitoringInterceptor 拦截所有EJB。这里有一个问题:我可以用CDI拦截器做类似的事情吗?

<beans xmlns="http://java.sun.com/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
      http://java.sun.com/xml/ns/javaee
      http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
    <interceptors>
        <class>net.bull.javamelody.MonitoringInterceptor</class>
    </interceptors>

</beans>

我希望将 MonitoringInterceptor 默认设置为注入应用程序的所有CDI Bean。我该如何获得?提前感谢您的回复。

2 个答案:

答案 0 :(得分:0)

一种方法是创建一个扩展,将Annotation添加到类中。

作为实际例子你可以看一下 EjbExtensionExtended

processAnnotatedType(@Observes ProcessAnnotatedType<T> pat) 

确保可以处理bean

createEJBWrapper 
如果需要,

将@EjbTransactional添加到课程中。

答案 1 :(得分:0)

我认为没有一种声明性的方法可以做到这一点 - 有充分理由因为“所有豆类”在CDI世界中是一个相当含糊的概念。在部署时间之后豆类来来去去。本文介绍了一种以编程方式为管理员注册的所有bean执行此操作的方法,这可能会为您提供所需的结果:byteslounge.com/tutorials/…