Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Aula 06 EJB Novos serviços com Interceptadores

Pessoal mais um vez esto com problema em minha aplicação que não responde da mesma forma que responde a aplicação da videoaula. Segue ai o meu código da LogInterceptador e de como está a anotação @interceptors na minha classe DAO.

Interceptador:

package br.com.caelum.livraria.interceptador;

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

public class LogInterceptador {

    @AroundInvoke
    public Object intercepta(InvocationContext context) throws Exception {

        Long millis = System.currentTimeMillis();

        //chamada do método dao
        Object object = context.proceed();


        System.out.println("Tempo Gasto: " + (System.currentTimeMillis() - millis));

        return object;
    }

}

Classe DAO:

package br.com.caelum.livraria.dao;

import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.ejb.TransactionManagement;
import javax.ejb.TransactionManagementType;
import javax.inject.Inject;
import javax.interceptor.Interceptors;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.transaction.NotSupportedException;
import javax.transaction.SystemException;
import javax.transaction.UserTransaction;

import br.com.caelum.livraria.interceptador.LogInterceptador;
import br.com.caelum.livraria.modelo.Autor;

@Stateless
//@TransactionManagement(TransactionManagementType.BEAN)
@TransactionManagement(TransactionManagementType.CONTAINER) // opcional
@Interceptors({LogInterceptador.class})
public class AutorDao {

    @PersistenceContext
    private EntityManager manager;

    @PostConstruct
    void aposCriacao() {
        System.out.println("AutorDao foi criado!");
    }

    public void salva(Autor autor) {

            manager.persist(autor);

        System.out.println("Salvou autor " + autor.getNome());


//        throw new RuntimeException("Serviço externo deu erro!");

    }

    public List<Autor> todosAutores() {
        return manager.createQuery("select a from Autor a", Autor.class).getResultList();
    }

    public Autor buscaPelaId(Integer autorId) {
        Autor autor = this.manager.find(Autor.class, autorId);
        return autor;
    }

}

A saída no console exatamente após executar o método no dao:

15:07:55,068 INFO  [stdout] (http-localhost-127.0.0.1-8080-1) Hibernate: select autor0_.id as id0_, autor0_.nome as nome0_ from Autor autor0_

15:07:55,074 INFO  [stdout] (http-localhost-127.0.0.1-8080-1) Hibernate: select autor0_.id as id0_, autor0_.nome as nome0_ from Autor autor0_

15:07:55,082 INFO  [stdout] (http-localhost-127.0.0.1-8080-1) Hibernate: select autor0_.id as id0_, autor0_.nome as nome0_ from Autor autor0_

15:07:55,087 INFO  [stdout] (http-localhost-127.0.0.1-8080-1) Hibernate: select autor0_.id as id0_, autor0_.nome as nome0_ from Autor autor0_

15:07:55,093 INFO  [stdout] (http-localhost-127.0.0.1-8080-1) Hibernate: select autor0_.id as id0_, autor0_.nome as nome0_ from Autor autor0_

15:07:55,098 INFO  [stdout] (http-localhost-127.0.0.1-8080-1) Hibernate: select autor0_.id as id0_, autor0_.nome as nome0_ from Autor autor0_

15:07:55,102 INFO  [stdout] (http-localhost-127.0.0.1-8080-1) Salvando autor Marcos Ribeiro

15:07:55,113 INFO  [stdout] (http-localhost-127.0.0.1-8080-1) Hibernate: insert into Autor (nome) values (?)

15:07:55,153 INFO  [stdout] (http-localhost-127.0.0.1-8080-1) Salvou autor Marcos Ribeiro

15:07:55,209 INFO  [stdout] (http-localhost-127.0.0.1-8080-1) Hibernate: select autor0_.id as id0_, autor0_.nome as nome0_ from Autor autor0_
3 respostas

Oi Rodrigo,

você chegou a fazer a configuração do xml, como descrito aqui => https://cursos.alura.com.br/course/ejb/task/4864 ?

Alberto,

Nessa altura da aula ainda não havia sido usado o xml para com figurar o interceptador, que é depois do instrutor mostrar como funciona sem o xml. Tanto que a anotação @Interceptors ainda não está comentada.

A execução ocorreu diferente como pode ver no console, não mostrando o tempo de execução como na video aula.

Desde já agradeço qq ajuda que puder me dá.

solução!

Um belo dia entrei no projeto e estava funcionando. Não sei explicar o que tinha de errado. Não fiz nada.