Problema com CallBacks em JPA

Boa tarde pessoal,

Estou com o seguinte problema.

Preciso fazer auditoria do meu sistema. Optei por usar os Callbacks do JPA, @PostLoad, @PostPersist, etc. O que está acontecendo é que ao interceptar algum evento, quando preciso fazer um Select, ou tentar persistir alguma coisa, dentro dos meu método que monitoram os eventos, eu levo um nullpointer na fussa.

O meu interesse é o seguinte: Após o usuário realizar alguma ação, seja cadastrar, deletar ou editar … eu tenho q armazenar o que ele fez, os dados que foram adicionados, ou alterados ou deletados.
A minha classe listener intercepta as ações corretamente, mas quando preciso fazer alguma transação com a base de dados dentro dos métodos anotados, acontece a exceção no meu método logar da minha classe Managed Bean onde gerencio essa parte de login do Sistema

Estou monitorando minha Entidade Login. Quando inicio o sistema, o usuario faz login via Managed Bean, e paralelamente há essa interceptação de evento na Entidade Login via minha classe Listener.

Vou postar minha classe Listener:


@Stateless
public class LogSistemaListener implements Serializable{

    private LogSistemaGeral logSistema;
    private DataHora dataHora;
    @EJB
    private LogSistemaGeralFacadeLocal logDao;
    @EJB
    private PersisteLog persistir;
    @EJB
    private Sessao sessao;

    public LogSistemaListener() {

        logSistema = new LogSistemaGeral();
        dataHora = new DataHora();
    }

    // Método utilizado para monitorar a entidade logo após a inserção
    @PostPersist
    void monitorLogAcao(Object entidade) {

        if (entidade.getClass().getSimpleName().equals("Pivo")){
            
           // aqui veria a parte de inserção na tabela do banco
            
            
        }
    }

    //Método utilizado para monitorar o login no sistema
    @PostLoad
    void monitorLogInicial(Object entidade) {
        
        if (entidade.getClass().getSimpleName().equals("Login")) {
            Login obj = (Login) entidade;
            
           
            logSistema.setDataLog(dataHora.dataSistema());
            logSistema.setHoraEntrada(dataHora.horaSistema());
            logSistema.setUsuario(obj.getNome());
            
           logDao.create(logSistema); 
        }
    }
}

método logar da minha classe Managed Bean:


public String login() {

        
        usuarioLogado = login.logar(nome, senha);
        getPermissao();

        if (usuarioLogado != null && usuarioLogado.getIsstatus() == true) {
         
            return "/home.xhtml?faces-redirect=true";

            
        } else {
            return "/errogeral.xhtml?faces-redirect=true";
        }
    }

Será que o problema seria nessa parte teria a ver com JPA e o Servlet do JSF ?

Até onde eu sei, callback do JPA na versão 2.1 não tem suporte a injeção.

Ele ta dando nullpointer é no acesso a um EJB?

[quote=Hebert Coelho]Até onde eu sei, callback do JPA na versão 2.1 não tem suporte a injeção.

Ele ta dando nullpointer é no acesso a um EJB?[/quote]

Pior que é cara. Observando aqui, tirei as injeções e botei new para criar a instancia e funciou. Mas ainda tem o problema na hora de persistir um objeto dentro do método. Ainda estou recebendo um nullpointer. Eu tinha pensado em pegar o objeto com os dados, inserir na seção e persistir em outro local, o que acha ?.
Eu não sabia que callback do JPA não tinha suporte a Injeção. Estou estudando o livro que você me indicou “Interprise Java Beans 3.0”, e nele não fala sobre esse detalhe.

Hebert, eu to jogando na sessao e recuperando em outro objeto pra persistir e fazer da forma que quero. Tentei resolver de todas as formas possíveis, mas so tenho um nullpointer como resposta.

Vou fazer isso momentaneamente, porque preciso terminar essa funcionalidade, mas posteriormente irei corrigir isso e fazer de forma mais elegante !!!

Se você souber o que pode esta ocorrendo, ou algum outro colega souber, por favor, me dê um toque.

Eu suspeitei disso por causa da palestra que estou preparando para a JUDCon.

Olha o que achei no blog da oracle sobre a nova versão do JPA:

Por isso que você toma null.

Faça um lookup que você vai conseguir persistir.

[quote=Hebert Coelho]Eu suspeitei disso por causa da palestra que estou preparando para a JUDCon.

Olha o que achei no blog da oracle sobre a nova versão do JPA:

Por isso que você toma null.

Faça um lookup que você vai conseguir persistir.[/quote]

Puts cara, olha minha falta de atenção. Estou usando EclipseLink com JPA 2.0. Vou ter que baixar com a versão 2.1 e fazer o teste. Qual provedor de persistencia você costuma usar Hebert ?

Costumo usar ou hibernate ou eclipselink.

Estou com vontade de testar o batoo, quem sabe em breve. [=

Não estou conseguindo achar a biblioteca de persistência com a jpa 2.1 para baixar. Sabe de algum link Hebert ?

[quote=Frapout]Não estou conseguindo achar a biblioteca de persistência com a jpa 2.1 para baixar. Sabe de algum link Hebert ?[/quote]Nem foi lançada ainda. Eu vi no maven uma versão não oficial do hibernate. [=

Mas nem tenho o link mais aqui.

[quote=Hebert Coelho][quote=Frapout]Não estou conseguindo achar a biblioteca de persistência com a jpa 2.1 para baixar. Sabe de algum link Hebert ?[/quote]Nem foi lançada ainda. Eu vi no maven uma versão não oficial do hibernate. [=

Mas nem tenho o link mais aqui.[/quote]

Vou dar uma procurada cara … e muito obrigado pelas dicas !!
Assim que eu conseguir, post aqui o resultado dos meus testes.

Boa tarde,

Você consegui resolver seu problema? Pois estou com o mesmo.