Query não é executada

12 respostas
P
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.
public List<Escola> findAll() {
       
        List <Escola> 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;   
    }

12 Respostas

P

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)

rock

pjava:
Esse é o log do glassfish

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

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’ ?

P
Este é meu EntityManagerFactorySingleton .
public class EntityManagerFactorySingleton {
	private static EntityManagerFactory instancia = null;	
	private EntityManagerFactorySingleton() {		
	}
	
	public static EntityManagerFactory getInstance() {		
		if (instancia == null){
			instancia = Persistence.createEntityManagerFactory("puMosaicoDigital");
		}
		return instancia;		
	}}
P

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.

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

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.

M

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

P
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";
	}
}
@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<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;	}
}
caputojf1

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,

P

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.

caputojf1

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…

P

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?

caputojf1

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…

Criado 10 de maio de 2011
Ultima resposta 11 de mai. de 2011
Respostas 12
Participantes 4