Solucionado (ver solução)
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.