Ошибка при создании пользовательского log4j Appender

1

Я пытаюсь создать пользовательский 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? Кто-нибудь выполнил сопротивление JPA в AppenderSkeleton, используя CDI?

Я также пытался не использовать CDI, но поскольку каждый другой объект в моем приложении использует его (классы JAX-RS), он обрушивается.

Теги:
jpa
log4j
cdi

1 ответ

3
Лучший ответ

EJB - это прокси. AppenderSkeleton есть метод getName который является окончательным. Я думаю, что для вашего случая использования вам необходимо реализовать Appender напрямую. Это позволит избежать метода bean getName

Тем не менее, я должен задать вопрос о попытке сделать appendar EJB. Как вы его создаете?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню