Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建自定义log4j Appender时出错_Java_Jpa_Log4j_Cdi - Fatal编程技术网

Java 创建自定义log4j Appender时出错

Java 创建自定义log4j Appender时出错,java,jpa,log4j,cdi,Java,Jpa,Log4j,Cdi,我正在尝试创建一个自定义Appender,它将使用JPA将日志持久化到数据库中 问题是我使用的是PersistenceContext属性如下 package com.foobar.logging; import com.foobar.model.SysLog; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import org.apache.log4j.AppenderS

我正在尝试创建一个自定义Appender,它将使用JPA将日志持久化到数据库中

问题是我使用的是
PersistenceContext
属性如下

package com.foobar.logging;

import com.foobar.model.SysLog;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.apache.log4j.AppenderSkeleton;
import org.apache.log4j.MDC;
import org.apache.log4j.spi.LoggingEvent;
import javax.ejb.Stateless;

@Stateless
public class LogManager extends AppenderSkeleton {

    @PersistenceContext(unitName = "primary")
    private EntityManager em;

    @Override
    protected void append(LoggingEvent le) {
        SysLog log = new SysLog();
        log.setDescripcion(le.getMessage().toString());
        if (MDC.get("IdUsuario") != null) {
            log.setIdUsuario(MDC.get("IdUsuario").toString());
        }
        log.setSysAccionLog(null);

        this.em.persist(log);
    }

    @Override
    public void close() {
    }

    @Override
    public boolean requiresLayout() {
        return false;
    }

}
现在,当我将WAR部署到JBoss AS 7.1时,它失败了,我得到了错误:

java.lang.VerifyError:class com.foobar.logging.LogManager$Proxy$\u$$\ uWeld$Proxy$覆盖最终方法getName。()Ljava/lang/String

如何使用CDI将EntityManager注入AppenderSkleton?有没有人使用CDI在AppenderSkeleton中实现JPA持久性


我也尝试不使用CDI,但由于我的应用程序中的其他对象都使用它(JAX-RS类),所以它会崩溃。

EJB是代理
AppenderSkeleton
有一个
getName
方法是final。我认为对于您的用例,您需要直接实现
Appender
。这将避免bean方法
getName

然而,我不得不质疑尝试将appender变成EJB的想法。你是如何实例化它的