JBoss7.1.1.Final和CDI

时间:2014-04-16 16:22:57

标签: java jboss7.x cdi

有CDI的麻烦。这是一个场景:一个非常令人印象深刻的SLSB

import javax.ejb.Remote;
import javax.ejb.Stateless;

import edu.xxx.aop.log.utils.AopLog;

@Stateless
@Remote(EjbGatewayRemote.class)
public class EjbGateway implements EjbGatewayRemote {
    @AopLog
    public String echo(String msg) {
        return "echo: "+msg;
    }
}

一个令人印象深刻的拦截器:

import javax.interceptor.AroundInvoke;
import javax.interceptor.Interceptor;
import javax.interceptor.InvocationContext;

import org.apache.log4j.Logger;

@AopLog
@Interceptor
public class AopLogger {

    private static Logger logger = Logger.getLogger(AopLogger.class);
    private long time;
    private StringBuilder sb;

    public AopLogger() {}

    @AroundInvoke
    public Object log(InvocationContext icx) {
        sb = new StringBuilder();
        sb.append(icx.getClass().getCanonicalName()+"."+icx.getMethod().toString());
        sb.append("(");
        for(Object o : icx.getParameters()) {
            sb.append(" "+o.getClass()+" "+o.toString());
        }
        sb.append(" )");
        logger.info(sb.toString());
        time = System.currentTimeMillis();
        try {
            return icx.proceed();
        } catch (Exception e) {
            logger.error(e);
            return null;
        } finally {
            sb = new StringBuilder();
            sb.append(icx.getClass().getCanonicalName()+"."+icx.getMethod().toString());
            sb.append(" complete in "+(System.currentTimeMillis() - time)+" milliseconds.");
            logger.debug(sb.toString());
        }
    }
}

及其注释:

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import javax.interceptor.InterceptorBinding;

@InterceptorBinding
@Retention(RetentionPolicy.RUNTIME) 
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface AopLog {}

SLSB和拦截器位于不同的模块中,两者都部署在%JBossAS7.1.1.Final HOME%/ standalone / deploymentments中,分别部署在AopLogEJB.jar和AopLogUtils.jar中。 AopLogEJB.jar有这个beans.xml:

<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>edu.pezzati.aop.log.utils.AopLogger</class>
    </interceptors>
</beans>

和这个MANIFEST.MF

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: Francesco
Build-Jdk: 1.6.0_26
Dependencies: deployment.AopLogUtils.jar

AopLogUtils.jar有这个beans.xml:

<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">
</beans>

和这个MANIFEST.MF:

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: Francesco
Build-Jdk: 1.6.0_26

当AopLogUtils.jar部署得很好时,我在部署AopLogEJB.jar时遇到错误:

ERROR [org.jboss.msc.service.fail] (MSC service thread 1-4) MSC00001: Failed to start service jboss.deployment.unit."AopLogEJB.jar".WeldService: org.jboss.msc.service.StartException in service jboss.deployment.unit."AopLogEJB.jar".WeldService: org.jboss.weld.exceptions.DeploymentException: WELD-001417 Enabled interceptor class <class>edu.xxx.aop.log.utils.AopLogger</class> in vfs:/C:/Users/Francesco/jboss-as-7.1.1.Final/bin/content/AopLogEJB.jar/META-INF/beans.xml@4 is neither annotated @Interceptor nor registered through a portable extension
    at org.jboss.as.weld.services.WeldService.start(WeldService.java:83)
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [rt.jar:1.6.0_26]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [rt.jar:1.6.0_26]
    at java.lang.Thread.run(Thread.java:662) [rt.jar:1.6.0_26]
Caused by: org.jboss.weld.exceptions.DeploymentException: WELD-001417 Enabled interceptor class <class>edu.xxx.aop.log.utils.AopLogger</class> in vfs:/C:/Users/Francesco/jboss-as-7.1.1.Final/bin/content/AopLogEJB.jar/META-INF/beans.xml@4 is neither annotated @Interceptor nor registered through a portable extension
    at org.jboss.weld.bootstrap.Validator.validateEnabledInterceptorClasses(Validator.java:491)
    at org.jboss.weld.bootstrap.Validator.validateDeployment(Validator.java:369)
    at org.jboss.weld.bootstrap.WeldBootstrap.validateBeans(WeldBootstrap.java:379)
    at org.jboss.as.weld.WeldContainer.start(WeldContainer.java:83)
    at org.jboss.as.weld.services.WeldService.start(WeldService.java:76)
    ... 5 more

整个东西在Wildfly上运行良好。这是关于JBoss7焊接模块的问题吗?我已经将模块从1.1.5更新到1.1.10但没有任何改变。

0 个答案:

没有答案