我遇到了 CDI 拦截器绑定问题,但我不知道出了什么问题。
当我使用 Eclipse 进行开发时,只有激活了 JRebel 代理,拦截器才能正常工作,但是当我部署相同的应用程序时,在相同的 glassfish 安装中,这一次是使用 asadmin 命令的 EAR 文件,拦截器被完全忽略。当我关闭 jrebel 代理时也会发生同样的情况。
我将 Glassfish 3.1.2.2 与 Weld 1.1.11 和 JDK 1.6 一起使用。
我的应用程序是一个多模块 Maven 项目,例如:
APP
\--MODULE-EJB1 (annotation and interceptor resides here.)
\--META-INF\beans.xml (with interceptor declaration)
\--MODULE-EJB2
\--META-INF\beans.xml (empty one)
\--MODULE-JAR
\--META-INF\beans.xml (empty one)
\--MODULE-WAR
\--WEB-INF\beans.xml (empty one)
\--MODULE-EAR
我的注释:
@InterceptorBinding
@Target({ TYPE, METHOD })
@Retention(RUNTIME)
public @interface Audited {
}
我的拦截器类:
@Audited
@Interceptor
public class AuditInterceptor implements Serializable {
[...]
}
我截取的方法:
@Override
@Audited
public E save(E model) throws SGIException, ConstraintViolationException {
[...]
}
我的 beans.xml 文件:
<?xml version="1.0"?>
<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://jboss.org/schema/cdi/beans_1_0.xsd" >
<interceptors>
<class>pkg.interceptor.AuditInterceptor</class>
</interceptors>
</beans>
<!-- empty one -->
<?xml version="1.0"?>
<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://jboss.org/schema/cdi/beans_1_0.xsd" />
我希望我提供了所有重要的东西。
在此先感谢您的帮助,这是应用程序中非常重要的一部分。