Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
10
respostas

Login não funciona após Interceptor

Olá Pessoal,

Quando fiz o Interceptor, assim como apresentado na vídeo aula, para abrir e e fechar a transação do EntityManager, meu login e senha só dão inválidos.

Se eu deixo o código antigo, sem a classe ControleDeTransacaoInterceptor, funciona normalmente o Login e os recursos.

Segue o código abaixo:

@Intercepts(after=AutorizadorInterceptor.class)
public class ControleDeTransacaoInterceptor {
    private final EntityManager em;

    @Inject
    public ControleDeTransacaoInterceptor(EntityManager em) {
        this.em = em;
    }

    public ControleDeTransacaoInterceptor() {
        this(null);
    }

    @BeforeCall
    public void before() {
        em.getTransaction().begin();
    }

    @AfterCall
    public void after() {
        em.getTransaction().commit();

    }

}

Retirei o begin e o commit da classe ProdutoDao:

    public void adiciona(Produto produto) {
        em.persist(produto);
    }
10 respostas

Ninguém pode me ajudar?

Quando uso o Interceptor para abrir e fechar a conexão, meu método "existe" da classe "UsuarioDao" sempre retorna false, ou seja, não consegue encontrar o usuário.

Já verifiquei e o usuário e a senha está correto.

Quando deixo o begin e o commit na classe ProdutoDao, o login funciona perfeitamente.

Não estou entendendo qual a dependência das transações do ProdutoDao com o Login.

Oi Asser,

conseguiu resolver?

Caso continue com o problema envie o seu projeto (sem jars) para nico.steppat@caelum.com.br.

Abs

Não consegui. Vou enviar então.

Oi Asser, conseguiu testar a aplicação?

abs

Testei sim, ainda não consegui encontrar o erro, fiz exatamente como me mandou via e-mail e não funcionou.

Na página de login, tento fazer o login com usuário e senha "vraptor", mas dá "login - Nome ou senha inválido!".

Agora se eu apagar a classe "ControleDeTransacaoInterceptor" e deixar o ProdutoDao assim:

    public void adiciona(Produto produto) {
        em.getTransaction().begin();
        em.persist(produto);
        em.getTransaction().commit();
    }

Aí funciona perfeitamente.

Agora a pouco eu exportei este projeto e fiz o teste em uma máquina Ubuntu 13.10 e deu o mesmo erro.

Obs.: Estou usando o Eclipse Luna Service Release 1 (4.4.1) com Tomcat 7.0.56 x64, rodando no Windows 8.1 Update x64.

Oi Asser, vc usou o projeto que eu te mandei? abs

Obrigado pela paciência Nico,

No que você mandou para mim, funciona perfeitamente.

Fiz a cópia das classes que você modificou e coloquei no meu projeto e ainda assim continua com o mesmo erro.

Obs.: Percebi que você modificou as classes: ProdutoController, ProdutoDao e ControleDeTransacaoInterceptor.

O que eu queria era saber onde estou errando para consertar o meu erro e aprender com ele. Será que este erro é em algum arquivo específico, tipo de configuração?

No mais, agradeço pela atenção.

solução!

Vou encerrar a discussão, não descobri meu problema, talvez o projeto estava "bugado", quando criei outro do zero e fiz, funcionou perfeitamente também. No mais, obrigado ao Nico pela paciência.

estou com o mesmo problema aqui, não sei o que fiz de errado.