【发布时间】:2014-06-03 17:01:51
【问题描述】:
我正在尝试创建一个自定义 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$_$$_Weld$Proxy$ overrides final method getName.()Ljava/lang/String;
如何使用 CDI 将我的 EntityManager 注入到 AppenderSkeleton 中?有没有人使用 CDI 在 AppenderSkeleton 中实现 JPA 持久性?
我也尝试过不使用 CDI,但由于我的应用程序中的所有其他对象都使用它(JAX-RS 类),它会崩溃。
【问题讨论】: