7
respostas

Erro de Login

Após realizar todas as alterações, não consigo mais logar na aplicação. Segue o erro:

23:55:13,475 Advertência [javax.enterprise.resource.webcontainer.jsf.lifecycle] (http-localhost-127.0.0.1-8080-1) #{loginBean.efetuaLogin}: java.lang.NullPointerException: javax.faces.FacesException: #{loginBean.efetuaLogin}: java.lang.NullPointerException
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118) [jsf-impl-2.1.7-jbossorg-2.jar:]
    at javax.faces.component.UICommand.broadcast(UICommand.java:315) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) [jsf-impl-2.1.7-jbossorg-2.jar:]
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) [jsf-impl-2.1.7-jbossorg-2.jar:]
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) [jsf-impl-2.1.7-jbossorg-2.jar:]
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]
    at org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPropagationFilter.java:62) [weld-core-1.1.5.AS71.Final.jar:2012-02-10 15:31]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.13.Final.jar:]
    at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50) [jboss-as-jpa-7.1.1.Final.jar:7.1.1.Final]
    at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final]
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.13.Final.jar:]
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.13.Final.jar:]
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671) [jbossweb-7.0.13.Final.jar:]
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930) [jbossweb-7.0.13.Final.jar:]
    at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0]
Caused by: javax.faces.el.EvaluationException: java.lang.NullPointerException
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102) [jsf-impl-2.1.7-jbossorg-2.jar:]
    ... 24 more
Caused by: java.lang.NullPointerException
    at br.com.caelum.livraria.dao.UsuarioDao.buscaPeloLogin(UsuarioDao.java:15) [classes:]
    at br.com.caelum.livraria.login.LoginBean.efetuaLogin(LoginBean.java:30) [classes:]
    at br.com.caelum.livraria.login.LoginBean$Proxy$_$$_WeldClientProxy.efetuaLogin(LoginBean$Proxy$_$$_WeldClientProxy.java) [classes:]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.7.0]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [rt.jar:1.7.0]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.7.0]
    at java.lang.reflect.Method.invoke(Method.java:601) [rt.jar:1.7.0]
    at org.apache.el.parser.AstValue.invoke(AstValue.java:262) [jbossweb-7.0.13.Final.jar:]
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278) [jbossweb-7.0.13.Final.jar:]
    at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:39) [weld-core-1.1.5.AS71.Final.jar:2012-02-10 15:31]
    at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50) [weld-core-1.1.5.AS71.Final.jar:2012-02-10 15:31]
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) [jsf-impl-2.1.7-jbossorg-2.jar:]
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
    ... 25 more
7 respostas

O erro está aqui:

Caused by: java.lang.NullPointerException at br.com.caelum.livraria.dao.UsuarioDao.buscaPeloLogin(UsuarioDao.java:15)

Poste pra getnte o seu UsuarioDao e o metodo buscaPeloLogin indicando qual é a linha 15.

Tem algo que está fazendo ter um null ali

Segue...

@Stateless
public class UsuarioDao {

    @PersistenceContext
    private EntityManager    manager;

    public Usuario buscaPeloLogin(String login) {
        Usuario usuario = (Usuario) this.manager.createQuery("select u from Usuario u where u.login=:pLogin")
                .setParameter("pLogin", login).getSingleResult();
        return usuario;
    }

}

Acho que o EntityManager está null. verifique isso.

Nào está sendo injetado por algum motivo. como você está obtendo o UsuarioDAO em LoginBean?

Segue o LoginBean.

@Named
@RequestScoped
public class LoginBean {

    private Usuario usuario = new Usuario();
    @Inject
    private UsuarioDao    dao;

    @Inject
    UsuarioLogadoBean usuarioLogado;

    @Inject
    MenuBean menu;

    public Usuario getUsuario() {
        return usuario;
    }

    public String efetuaLogin() {

        Usuario usuarioEncontrado = this.dao.buscaPeloLogin(usuario.getLogin());

        if(usuarioEncontrado!= null && possuiMesmaSenha(usuarioEncontrado)) {
            usuarioLogado.logar(usuarioEncontrado);
            return menu.paginaLivros();
        }

        criaMensagem("Usuário não encontrado!");
        limparForm();

        return "";
    }

    public String efetuaLogout() {
        this.usuarioLogado.deslogar();
        return this.menu.paginaLogin();
    }


    private void limparForm() {
        this.usuario = new Usuario();
    }

    private void criaMensagem(String mensagem) {
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, mensagem, ""));
    }

    private boolean possuiMesmaSenha(Usuario usuarioEncontrado) {
        return usuarioEncontrado.getSenha().equals(usuario.getSenha());
    }
}

Oi Alexandre, na hora de subir o wildfly o seu datasource está sendo cadastrado corretamente?

Deveria aparecer no console do eclipse uma mensagem.

abs

Agora deu certo. Comecei do zero e o problema era o seguinte:

Ao invés disso:

private Autor     autor    = new Autor();
@Inject
private AutorDao     dao;

Estava fazendo isso:

@Inject
private Autor     autor;
private AutorDao     dao = new AutorDao();

Estava injetando a classe errada, tanto no AutorBean quanto no LoginBean.

Valeu pela ajuda, pessoal!!!

Curiosamente, inseri uma melhoria no capitulo anterior a esse sugerindo uma melhoria na descrição das classes que serão injetadas, reparei que não estava explicito que a alteração na classe LoginBean é obrigatória quando o usuário injeta a classe Banco no AutorDao ou UsuarioDao. Caso contrário o erro de retorno é exatamente relativo a esse, um nullPointerException.

Obs: Meu comentário é apenas uma critica construtiva já que tive um problema parecido e a descrição do exercicio não estava descrita claramente naquele momento.

Abs