2013-07-25 57 views
0

我遇到CDI拦截器绑定问题,我无法弄清楚什么是错误的。当我使用Eclipse开发时,只有JRebel代理处于活动状态,拦截器才能正常工作,但是当我部署相同的应用程序时,在同一个glassfish安装时,这次使用asadmin命令的EAR文件,拦截器完全被忽略。当我关闭jrebel代理时也会发生同样的情况。只使用Jrebel时CDI拦截器工作

我正在使用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" /> 

我希望我提供了重要的一切。

在此先感谢您的帮助,它是应用程序非常关键的一部分。

回答

0

自第一天起,Glassfish就出现了拦截器正常启用的问题。我不知道他们是否已经修复了它。目前唯一的方法是继续部署和重新部署,直到他们最终工作:(

+0

有没有办法在应用程序部署完成后立即发现此类问题,而无需运行我的应用程序? – dmota

+0

不幸的是,没有我知道的。 – LightGuard