Query não é executada

Essa vquery parece não está sendo executada. Debuguei e não consigo chegar nela. Chega na chamada ao FactorySingleton ele não anda mais. Antes o debug reclamou de faltar o hibernate-entitymanager.jar. Adicionei e continuou a reclamar. Restartei o eclipse e agora ele para nesse método e não anda mais.
Ele para aqui

private EntityManager em = EntityManagerFactorySingleton.getInstance().createEntityManager();

Parece não executar essa query, pois a lista vem vazia. Mas pelo log do Container a query é montada, tando que se carrego direta no banco funciona, logo o erro está na chamada.

import javax.persistence.EntityManager;

A minha chamada completa do método.

[code]public List<Escola> findAll() {

    List &lt;Escola&gt; listEscola = null;
    try {           
        HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
        LoginControle loginControle = (LoginControle)   session.getAttribute("LoginControle");
        Login login = loginControle.getLogin();
       
        String comando = "select distinct esc from Escola esc ,Matricula mat" +
                            " where mat.idescola = esc.idescola" +
                            " and mat.idpessoa = " + login.getPessoa().getIdPessoa() +
                            " and mat.situacao = 'A' order by esc.nome";
       
        Query query =   em.createQuery(comando);   
        listEscola = query.getResultList();
       
    } catch (Exception e) {
        e.printStackTrace();
    }finally{
        em.close();
    }       
    return listEscola;   
}[/code]

Esse é o log do glassfish

GRAVE: java.lang.NullPointerException at br.com.mosaicodigital.modelo.ListaEscola.findAll(ListaEscola.java:43) at br.com.mosaicodigital.controle.MostraEscolaAtiva.getEscolas(MostraEscolaAtiva.java:37) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at javax.el.BeanELResolver.getValue(BeanELResolver.java:302) at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176) at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203) at com.sun.el.parser.AstValue.getValue(AstValue.java:116) at com.sun.el.parser.AstValue.getValue(AstValue.java:163) at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:219) at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109) at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194) at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182) at javax.faces.component.UIData.getValue(UIData.java:731) at javax.faces.component.UIData.getDataModel(UIData.java:1798) at javax.faces.component.UIData.setRowIndexWithoutRowStatePreserved(UIData.java:484) at javax.faces.component.UIData.setRowIndex(UIData.java:473) at javax.faces.component.UIData.visitColumnsAndColumnFacets(UIData.java:2078) at javax.faces.component.UIData.visitTree(UIData.java:1431) at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600) at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600) at com.sun.faces.application.view.StateManagementStrategyImpl.saveView(StateManagementStrategyImpl.java:149) at com.sun.faces.application.StateManagerImpl.saveView(StateManagerImpl.java:133) at com.sun.faces.application.view.WriteBehindStateWriter.flushToWriter(WriteBehindStateWriter.java:225) at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:418) at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131) at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:410) at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1534) 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 com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98) at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162) at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:326) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:227) at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:170) at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:822) at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:719) at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1013) at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225) 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:662)

[quote=pjava]Esse é o log do glassfish

GRAVE: java.lang.NullPointerException at br.com.mosaicodigital.modelo.ListaEscola.findAll(ListaEscola.java:43)[/quote]

Qual é a linha 43 do seu ListaEscola?

Independente disso, vc comentou que para aqui:

private EntityManager em = EntityManagerFactorySingleton.getInstance().createEntityManager();  

imagino que a linha 43 seja esta:

Query query =   em.createQuery(comando);    

Seu EntityManager está null? Talvez algum erro de biblioteca ou configuração.
Se o EntityManager está null, qual o código do método ‘createEntityManager()’ da classe ‘EntityManagerFactorySingleton’ ?

Este é meu EntityManagerFactorySingleton .

[code]public class EntityManagerFactorySingleton {
private static EntityManagerFactory instancia = null;
private EntityManagerFactorySingleton() {
}

public static EntityManagerFactory getInstance() {		
	if (instancia == null){
		instancia = Persistence.createEntityManagerFactory("puMosaicoDigital");
	}
	return instancia;		
}}[/code]

Descobri o erro. Agora não sei como resolver. Como pego o usuário logado? Dessa forma não funciona. Ele sai e não me retorna nada.

	[code]HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
	LoginControle loginControle = (LoginControle)   session.getAttribute("LoginControle");
	Login login = loginControle.getLogin();
	
	
	minhaVar = login.getPessoa().getIdPessoa();[/code]

Acho q tá faltando um setAttribute(“LoginControle”,meu_obj); Isso tá faltando, mas não sei onde colocar esse cara e o que vai em meu_obj. Que objeto devo colocar e onde vai o setAttribute(), em que momento, em que parte do sistema. Dúvidas, dúvidas, dúvidas.

FacesContext… hum, vc esta usando JSF? posta sua classe LoginControle e Login

[code]public class LoginControle {

private Login login = new Login();
private boolean logado = false;	
//getters/setters
public boolean isLogado() {
	return logado;
}
public void setLogado(boolean logado) {
	this.logado = logado;
}
public String entrar(){		
	Login loginValidado = login.validaLogin(getLogin()) ;
	String ret = null;		
	if(loginValidado == null){			
		ResourceBundle bundle = CapturaLocale.getBundleLocale();
		FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, 
				bundle.getString("msgLoginSenhaInvalidos"), null);
		FacesContext.getCurrentInstance().addMessage(null, message);			
	}else{			
		setLogin(loginValidado);
		String tipoPessoa = loginValidado.getPessoa().getTipoPessoa().getValor();			
		if(tipoPessoa.equalsIgnoreCase(EnumTipoPessoa.P.getValor())){
			ret = "professor";
		}else if(tipoPessoa.equalsIgnoreCase(EnumTipoPessoa.A.getValor())){
			ret = "aluno";
		}else if(tipoPessoa.equalsIgnoreCase(EnumTipoPessoa.C.getValor())){
			ret = "coordenador";
	    }else if(tipoPessoa.equalsIgnoreCase(EnumTipoPessoa.R.getValor())){
			ret = "administrador";
	    }			
		HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
		logado = true;
		session.setAttribute("autenticado", true);
	}		
	return ret;
}	
public String sair(){		
	HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
	session.removeAttribute("autenticado");		
	setLogin(new Login());
	return "sair";
}

}[/code]

[code]@Entity
@Table(name=“login”)
@SequenceGenerator(sequenceName=“login_idlogin_seq”, name=“seqLogin”, allocationSize=1)
public class Login {

@Id
@Column(name="idLogin")
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seqLogin")
private int idLogin;

@OneToOne
@JoinColumn(name="idPessoa")
private Pessoa pessoa;

@Column(name="login", unique=true)
private String login;

@Column(name="pwd")
private String pwd;

@ManyToOne
@JoinColumn(name="idgrupo")
private Grupo grupo;

@Transient
private boolean logado;
//getters/setters removido por espaço
public boolean isLogado() {
	return logado;
}
public void setLogado(boolean logado) {
	this.logado = logado;
}	
public Login validaLogin(Login login){		
	EntityManager em = EntityManagerFactorySingleton.getInstance().createEntityManager();
	em.getTransaction().begin();		
	Login loginValidado = null;		
	try {
		LoginDAO loginDAO = new LoginDAO(em);
		List&lt;Login&gt; listLogin = loginDAO.buscaLogin(login.login);			
		if(listLogin != null && listLogin.size()&gt; 0) {				
			Login loginAchado = listLogin.get(0);
			String pwdCriptografada = CriptografiaPwd.criptografar(login.getPwd());				
			if(login.getPwd() != null && pwdCriptografada.equals(loginAchado.getPwd())){
				loginAchado.setLogado(true);
				loginValidado = loginAchado; 
			}
		}
		em.getTransaction().commit();			
	} catch (Exception e) {
		e.printStackTrace();
		if(em.getTransaction().isActive()){
			em.getTransaction().rollback();
		}
	}finally{
		em.close();
	}		
	return loginValidado;	}

}[/code]

Cara, você tá conseguindo rodar esse projeto assim?
Você já debugou??
Entra no método entrar
e veja o que ele retorna para loginValidado nessa linha…

Login loginValidado = login.validaLogin(getLogin()) ; 

Outra sugestão…
Sua @Entity com esse método validaLogin…
Esse método deveria ficar na sua classe de Controle e não numa entidade…

Posta aí…
Abs,

Trabalha eu e um colega e toda parte de login ele fez. Não que eu soubesse, pois eu não saberia e talvez fizesse igual. O projeto saiu de nosso escopo(controle) e agora to tentando apagar o incêndio. Tô apanhando muito e não dá para refazer. Só precios pegar o usuário logado hoje, nem que seja por gambi, só para ir pra teste e depois sim, com a cabeça no lugar fazer as alterações, a menos se a gambi for bem feita,rs.

Então vamos por partes…
Debuga esse método…

public Login validaLogin(Login login){ EntityManager em = EntityManagerFactorySingleton.getInstance().createEntityManager(); em.getTransaction().begin(); Login loginValidado = null; try { LoginDAO loginDAO = new LoginDAO(em); List<Login> listLogin = loginDAO.buscaLogin(login.login); if(listLogin != null && listLogin.size()> 0) { Login loginAchado = listLogin.get(0); String pwdCriptografada = CriptografiaPwd.criptografar(login.getPwd()); if(login.getPwd() != null && pwdCriptografada.equals(loginAchado.getPwd())){ loginAchado.setLogado(true); loginValidado = loginAchado; } } em.getTransaction().commit(); } catch (Exception e) { e.printStackTrace(); if(em.getTransaction().isActive()){ em.getTransaction().rollback(); } }finally{ em.close(); } return loginValidado; }
veja se ele tá recendo o login que foi enviado por parêmetro;
depois veja se a listLogin está vindo preenchida…
e veja se ele retorna um loginValidado preenchido…
Caso sim me avise que vou te dar uma dica…

Vou dando F5 e de repente para, não anda mais e quando começa o debug ele não para na linha que foi marcada. Há um jeito belê de se fazer um debug no eclipse?

F5 => Entra no método da linha.
F6 => Executa o método e vai para a próxima linha.
F8 => Libera o programa até o próximo BreakPoint.

Desmarque todos os breakpoints e coloque só na linha que você quer…
Depois selecione a variável q quer saber o valor clique com o botão direito Inspect…