Exception consulta EJB

Eai pessoal,

Estou realizando um projeto na faculdade e estou com o seguinte problema na consulta de Login do usuário:

Esta é a view:

[code]<p:dialog styleClass=“ui-dialog” widgetVar=“telaLogin” width=“300”
height=“400” modal=“true” resizable=“false” showEffect=“fade”
hideEffect=“fade” header=“Efetuar Login”>

        &lt;h:form id="login"&gt;

        &lt;p:growl id="growl" showDetail="true" sticky="true" /&gt;  

        &lt;h:outputLabel style="text-align: center"&gt;
            &lt;h3&gt;
                Realize Login ou
                &lt;p:commandLink value="Registre-se" onclick="selecRegistro.show()"&gt;&lt;/p:commandLink&gt;
            &lt;/h3&gt;
        &lt;/h:outputLabel&gt;

        &lt;h:panelGrid columns="2" cellpadding="5"&gt;
            
            &lt;h:outputLabel for="usuario" value="Usuário:" /&gt;
            &lt;h:inputText styleClass="ui-input" id="usuario" required="true"
                         label="usuario" value="#{loginMB.dadosLogin.login}" /&gt;

            &lt;h:outputLabel for="senha" value="Senha:" /&gt;
            &lt;h:inputSecret styleClass="ui-input" id="senha" required="true"
                           label="senha" value="#{loginMB.dadosLogin.senha}" /&gt;

            &lt;f:facet name="footer"&gt;
                &lt;center&gt;
                    &lt;p:commandButton styleClass="ui-button" id="botaoLogin"
                                     value="Entrar" update="growl" action="#{loginMB.login}"/&gt;
                &lt;/center&gt;
            &lt;/f:facet&gt;
            
        &lt;/h:panelGrid&gt;

        &lt;h:outputLabel style="text-align: left;"&gt;
            &lt;h5&gt;
                &lt;p:commandLink value="Esqueci minha Senha!"&gt;&lt;/p:commandLink&gt;
            &lt;/h5&gt;
        &lt;/h:outputLabel&gt;
        
        &lt;/h:form&gt;

    &lt;/p:dialog&gt;[/code]

Esta é a Bean que recebe os dados (dadosLogin é um objeto do tipo Login(Entity do banco gerada pelo EJB)):

[code]public void login() {
FacesContext context = FacesContext.getCurrentInstance();

    System.out.print(dadosLogin.getLogin() + dadosLogin.getSenha() + dadosLogin.getAtivo() + dadosLogin.getTipologin());
    loginRetornado = loginDAO.verificarLogin(dadosLogin);

    if (loginRetornado != null) {
        if(loginRetornado.getTipologin() == 'u') {
            // faz chamada pra dao que retorna um obj usuario
            usuarioLogado = loginDAO.findUsuario(dadosLogin);
            usuarioLogado.setLoginLogin(loginRetornado);
            logado = true;
            context.addMessage(null, new FacesMessage("Bem vindo" + usuarioLogado.getNomeusu()));
        } else if (loginRetornado.getTipologin() == 'e') {
            // chamada estabelecimento
            estabLogado = loginDAO.findEstabelecimento(dadosLogin);
            estabLogado.setLoginLogin(loginRetornado);
            logado = true;
            context.addMessage(null, new FacesMessage("Bem vindo" + estabLogado.getNomeestab()));
        } else if (loginRetornado.getTipologin() == 'a') {
        // faz chamada pra dao que retorna um obj usuario mas do tipo administrador
            adminLogado = loginDAO.findAdmin(dadosLogin);
            adminLogado.setLoginLogin(loginRetornado);
            logado = true;
            context.addMessage(null, new FacesMessage("Login Efetuado com sucesso!", "Bem vindo" + adminLogado.getNomeusu()));
        }
    } else {
        context.addMessage(null, new FacesMessage("Falha ao realizar Login!", "Verifique seu Usuário e Senha!"));
    }
}[/code]

E por fim esta é a DAO:

[code]public Login verificarLogin(Login login) {

    try {

        retorno = (Login) em.createQuery("SELECT l FROM Login l WHERE l.login = 'cmoradore' AND l.senha = '123456'")
                .setParameter("login", login.getLogin())
                .setParameter("senha", login.getSenha())
                .getSingleResult();
        
        if (retorno.getAtivo() == true) {
            return retorno;
        } else {
            return null;
        }

    } catch (Exception e) {
        System.out.println(retorno);
        e.printStackTrace();
        return null;
    }
}[/code]

O que acontece é que quando eu Debbugo, coloco um breakpoint na linha da DAO, em que o retorno recebe o objeto do tipo Login que vem de uma query executada no banco, ele pula diretamente pro catch e gera a exception:

INFO: cmoradore123456nullnull INFO: null SEVERE: java.lang.NullPointerException at com.conhecactba.dao.LoginDAO.verificarLogin(LoginDAO.java:31) at com.conhecactba.mb.LoginMB.login(LoginMB.java:39) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at com.sun.el.parser.AstValue.invoke(AstValue.java:254) at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:302) at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88) at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102) at javax.faces.component.UICommand.broadcast(UICommand.java:315) at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794) at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259) at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161) at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231) at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317) at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195) at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860) at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757) at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056) at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229) at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) at com.sun.grizzly.ContextTask.run(ContextTask.java:71) at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) at java.lang.Thread.run(Thread.java:722)

O problema é que testando, eu inseri as informações da seguinte forma:

retorno = (Login) em.createQuery("SELECT l FROM Login l WHERE l.login = 'cmoradore' AND l.senha = '123456'").getSingleResult();

E mesmo assim retorna o mesmo erro, como se ele não estivesse executando a query e pulando direto pra exception, o que me leva a crer que muito provavelmente possa ser algum erro relacionado unicamente a essa linha. Os outros módulos estão funcionando beleza, mas esse me travou tudo, já que muita coisa depende do login. Por favor, se algum abençoado tiver uma idéia do que esteja acontecendo, de uma luz ai. Vai ser de grande valia.

Abraços

Carlos Moradore.

Alguém?! Pelo amor de Deus!

Coloque seu DAO e o LoginMB inteiro aqui, assim dá pra analisar onde deu NullPointer.

Aí está!

loginMB

[code]package com.conhecactba.mb;

import com.conhecactba.entity.Estabelecimentos;
import com.conhecactba.entity.Usuarios;
import com.conhecactba.entity.Login;
import java.io.Serializable;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import com.conhecactba.dao.UsuarioDAO;
import com.conhecactba.dao.LoginDAO;

/**
*

  • @author carloshm
    */

@ManagedBean
@SessionScoped
public class LoginMB implements Serializable {

@EJB
private UsuarioDAO usuarioDAO = new UsuarioDAO();
private LoginDAO loginDAO = new LoginDAO();
private Login dadosLogin = new Login();
private Login loginRetornado = new Login();
private Usuarios usuarioLogado = new Usuarios();
private Usuarios adminLogado = new Usuarios();
private Estabelecimentos estabLogado = new Estabelecimentos();
private boolean logado = false;
FacesMessage message = null;
private static final long serialVersionUID = 1L;

public void login() {
    FacesContext context = FacesContext.getCurrentInstance();

    System.out.print(dadosLogin.getLogin() + dadosLogin.getSenha());
    loginRetornado = loginDAO.verificarLogin(dadosLogin);

    if (loginRetornado != null) {
        if(loginRetornado.getTipologin() == 'u') {
            // faz chamada pra dao que retorna um obj usuario
            usuarioLogado = loginDAO.findUsuario(loginRetornado);
            usuarioLogado.setLoginLogin(loginRetornado);
            logado = true;
            context.addMessage(null, new FacesMessage("Bem vindo" + usuarioLogado.getNomeusu()));
        } else if (loginRetornado.getTipologin() == 'e') {
            // chamada estabelecimento
            estabLogado = loginDAO.findEstabelecimento(loginRetornado);
            estabLogado.setLoginLogin(loginRetornado);
            logado = true;
            context.addMessage(null, new FacesMessage("Bem vindo" + estabLogado.getNomeestab()));
        } else if (loginRetornado.getTipologin() == 'a') {
        // faz chamada pra dao que retorna um obj usuario mas do tipo administrador
            adminLogado = loginDAO.findUsuario(loginRetornado);
            adminLogado.setLoginLogin(loginRetornado);
            logado = true;
            context.addMessage(null, new FacesMessage("Login Efetuado com sucesso!", "Bem vindo" + adminLogado.getNomeusu()));
        }
    } else {
        context.addMessage(null, new FacesMessage("Falha ao realizar Login!", "Verifique seu Usuário e Senha!"));
    }
}

public void logout() {
    if (logado) {

        adminLogado = null;
        usuarioLogado = null;
        estabLogado = null;
        logado = false;
        message = new FacesMessage("Logout efetuado com sucesso!", "Obrigado por utilizar o ConheçaCuritiba.");
    }
    FacesContext.getCurrentInstance().addMessage(null, message);
}

public UsuarioDAO getUsuarioDAO() {
    return usuarioDAO;
}

public void setUsuarioDAO(UsuarioDAO usuarioDAO) {
    this.usuarioDAO = usuarioDAO;
}

public LoginDAO getLoginDAO() {
    return loginDAO;
}

public void setLoginDAO(LoginDAO loginDAO) {
    this.loginDAO = loginDAO;
}

public Login getDadosLogin() {
    return dadosLogin;
}

public void setDadosLogin(Login dadosLogin) {
    this.dadosLogin = dadosLogin;
}

public Login getLoginRetornado() {
    return loginRetornado;
}

public void setLoginRetornado(Login loginRetornado) {
    this.loginRetornado = loginRetornado;
}

public Usuarios getUsuarioLogado() {
    return usuarioLogado;
}

public void setUsuarioLogado(Usuarios usuarioLogado) {
    this.usuarioLogado = usuarioLogado;
}

public Usuarios getAdminLogado() {
    return adminLogado;
}

public void setAdminLogado(Usuarios adminLogado) {
    this.adminLogado = adminLogado;
}

public Estabelecimentos getEstabLogado() {
    return estabLogado;
}

public void setEstabLogado(Estabelecimentos estabLogado) {
    this.estabLogado = estabLogado;
}

public boolean isLogado() {
    return logado;
}

public void setLogado(boolean logado) {
    this.logado = logado;
}

public FacesMessage getMessage() {
    return message;
}

public void setMessage(FacesMessage message) {
    this.message = message;
}

}[/code]

loginDAO

[code]package com.conhecactba.dao;

import com.conhecactba.entity.Login;
import com.conhecactba.entity.Usuarios;
import com.conhecactba.entity.Estabelecimentos;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

/**
*

  • @author carloshm
    */
    @Stateless
    @LocalBean
    public class LoginDAO {

    @PersistenceContext(unitName = “ConhecaCuritiba-ejbPU”)
    private EntityManager em;
    Usuarios usuarioLogado = new Usuarios();
    Estabelecimentos estabLogado = new Estabelecimentos();
    Login retorno = new Login();

    public Login verificarLogin(Login dadosLog) {

     try {
    
         Query validar = em.createQuery("SELECT l FROM login l WHERE l.login = :login AND l.senha = :senha")
                 .setParameter("login", dadosLog.getLogin())
                 .setParameter("senha", dadosLog.getSenha());
    
         retorno = (Login) validar.getSingleResult();
        
         if (retorno.getAtivo() == true) {
             return retorno;
         } else {
             return null;
         }
    
     } catch (Exception e) {
         System.out.println(retorno);
         e.printStackTrace();
         return null;
     }
    

    }

public Usuarios findUsuario(Login login) {

    try {

        Query validaUser = em.createQuery("SELECT u FROM usuarios u WHERE u.login_login = '" + login.getLogin() + "'");
        usuarioLogado = (Usuarios) validaUser.getSingleResult();

        return usuarioLogado;
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

public Estabelecimentos findEstabelecimento(Login login) {

    try {

        Query validaUser = em.createQuery("SELECT  FROM estabelecimentos u WHERE u.login_login = '" + login.getLogin() + "'");
        estabLogado = (Estabelecimentos) validaUser.getSingleResult();

        return estabLogado;
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}   

}[/code]

Att. Carlos Moradore

Anote com @EJB seu LoginDAO no managedBean, não o instancie com new() e teste novamente.

Apenas assim:

@EJB private LoginDAO loginDAO;

O servidor JEE pela injeção de dependências gerencia as instâncias, por isso o @EJB e @Inject não precisam de new.

Caramba, nem me atentei a isso, nas outras está funcionando corretamente porque ta anotado com @EJB e não ta criando uma instância na mão. Tu é o cara! Salvou meu fds. hehehehehehe.
Embora esteja funcionando, está dando o seguinte WARNING na hora de iniciar o servidor:

WARNING: Multiple [2] JMX MBeanServer instances exist, we will use the server at index [0] : [com.sun.enterprise.v3.admin.DynamicInterceptor@69b27d09]. WARNING: JMX MBeanServer in use: [com.sun.enterprise.v3.admin.DynamicInterceptor@69b27d09] from index [0] WARNING: JMX MBeanServer in use: [com.sun.jmx.mbeanserver.JmxMBeanServer@1a7e1727] from index [1]

Tem idéia do que pode ser?

Desde já muito obrigado!