CDI Bean 中的默认拦截器
Default Interceptors in CDI Beans
我有一个问题。每当我们有 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。我怎样才能获得它?
一种方法是创建一个扩展,将注释添加到 classes。
作为实际例子你可以看看
EjbExtensionExtended
processAnnotatedType(@Observes ProcessAnnotatedType<T> pat)
确保可以处理 bean
createEJBWrapper
如有必要,将@EjbTransactional 添加到 class。
我不认为有一种声明式的方式来做到这一点 - 有充分的理由,因为 "all beans" 在 CDI 的世界中是一个相当模糊的概念。即使在部署时间之后,Bean 也会来来去去。 This article描述了一种以编程方式为向管理器注册的所有bean执行此操作的方法,这可能会给您带来您想要的结果:byteslounge.com/tutorials/…
我有一个问题。每当我们有 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。我怎样才能获得它?
一种方法是创建一个扩展,将注释添加到 classes。
作为实际例子你可以看看 EjbExtensionExtended
processAnnotatedType(@Observes ProcessAnnotatedType<T> pat)
确保可以处理 bean
createEJBWrapper
如有必要,将@EjbTransactional 添加到 class。
我不认为有一种声明式的方式来做到这一点 - 有充分的理由,因为 "all beans" 在 CDI 的世界中是一个相当模糊的概念。即使在部署时间之后,Bean 也会来来去去。 This article描述了一种以编程方式为向管理器注册的所有bean执行此操作的方法,这可能会给您带来您想要的结果:byteslounge.com/tutorials/…