Erro ao pegar o usuário

Esse é o erro que dá, quando eu vou redirecionar para uma nova página

[code]javax.servlet.ServletException: org.apache.catalina.session.StandardSessionFacade cannot be cast to br.com.mosaicodigital.modelo.HttpSession
root cause

java.lang.ClassCastException: org.apache.catalina.session.StandardSessionFacade cannot be cast to br.com.mosaicodigital.modelo.HttpSession[/code]

Não sei o que fazer com essa classe. Essa classe tá aí, porque o eclipse reclamou e sugeriu criar

public class HttpSession { public Login getAttribute(String string) { //getSession().setAttribute("usuarioLogado", ()); return null; } }
Esse é o código que fiz e carreguei para pegar o usuário logado.

[code]public FacesContext getFacesContext() {
return FacesContext.getCurrentInstance();
}
public HttpSession getSession() {
return (HttpSession) getFacesContext().getExternalContext().getSession(false);
}
public List<Escola> findAll() {
Login usuario = (Login) getSession().getAttribute(“LoginControle”);

	Query query =  getEntityManager().createQuery("select distinct esc from Escola esc ,Matricula mat" +
			                                      " where mat.idescola = esc.idescola" +
			                                      " and mat.idpessoa =  " + usuario.getPessoa().getIdPessoa() +
			                                      " and mat.situacao = 'A' order by esc.nome");    
         return (List&lt;Escola&gt;) query.getResultList();	
}[/code]

retirei a classe HttpSession e agora deu esse erro:

[code]javax.servlet.ServletException: Unresolved compilation problem:
The method getSession() from the type ListaEscola refers to the missing type HttpSession

root cause

java.lang.Error: Unresolved compilation problem:
The method getSession() from the type ListaEscola refers to the missing type HttpSession[/code]

Eu nunca fiz nada com login, nunca peguei usuário logado, essa é minha dúvida. Em delphi é bem diferente.

A classe que pega o usuário logado. Agora o que fazer no meu MB?

[code]public class ListaEscola {
private List<Escola> escola;
private EntityManager em;

public List&lt;Escola&gt; getEscola() {
	return escola;
}

public void setEscola(List&lt;Escola&gt; escola) {
	this.escola = escola;
}

public EntityManager getEm() {  
    return em;  
}  
public void setEm(EntityManager em) {  
    this.em = em;  
}  

protected EntityManager getEntityManager() 
{    
	if (this.em == null)  {
        this.em = EntityManagerFactorySingleton.getInstance().createEntityManager();
    }// throw new IllegalStateException("Erro");      
    return this.em; 
}

/*public Session getSession() {
    EntityManager entityManager;
	return ((Session)entityManager.getDelegate());
}

 public final Criteria createCriteriaExample(Entity example) {
    Criteria executableCriteria = getSession().createCriteria(example.getClass());
   
    return executableCriteria;
}*/


public FacesContext getFacesContext() {
    return FacesContext.getCurrentInstance();
}

public HttpSession getSession() {
    return (HttpSession) getFacesContext().getExternalContext().getSession(false);
}


public List&lt;Escola&gt; findAll() { 
	Login usuario = (Login) getSession().getAttribute("LoginControle");
	        
	Query query =  getEntityManager().createQuery("select distinct esc from Escola esc ,Matricula mat" +
			                                      " where mat.idescola = esc.idescola" +
			                                      " and mat.idpessoa =  " + usuario.getPessoa().getIdPessoa() +
			                                      " and mat.situacao = 'A' order by esc.nome");    
         return (List&lt;Escola&gt;) query.getResultList();

}	

}[/code]

To fazendo uma salada tremenda. Em realidade na classe login eu só tenho a validação do login. Essa classe aqui em baixo, acho é que eu deveria pegar o id do usuário, certo?

[code]public class LoginDAO extends DAOGenerico<Login> {

public LoginDAO(EntityManager em) {
    super(em);
}
@SuppressWarnings("unchecked")
public List&lt;Login&gt; buscaLogin(String loginProcurado) {
   
    em.getTransaction().begin();
   
    Query q = em.createQuery("from Login l where l.login = :loginProcurado");
    q.setParameter("loginProcurado", loginProcurado);
    List&lt;Login&gt; listaLogin = q.getResultList();
   
    em.getTransaction().commit();       
    return listaLogin;
}   

}[/code]

Nada funciona aqui. Uma luz me daria uns 10 pontos com meu chefe

Eu e um colega aqui trabalhamos juntos e na máquina dele não dá esse erro e na minha dá.

[code]javax.servlet.ServletException: javax.persistence.PersistenceException: org.hibernate.AnnotationException: Unknown Id.generator: seq_escola

root cause

javax.faces.el.EvaluationException: javax.persistence.PersistenceException: org.hibernate.AnnotationException: Unknown Id.generator: seq_escola

root cause[/code]

Agora isso só aconteceu depois de eu tentar pegar o usuário logado e tive que fazer uma alteração assim:

[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();
       
        em.getTransaction().begin();
        Query query =  em.createQuery("select distinct esc from Escola esc ,Matricula mat" +
                                                      " where mat.idescola = esc.idescola" +
                                                      " and mat.idpessoa =  1 " + //login.getPessoa().getIdPessoa() +
                                                      " and mat.situacao = 'A' order by esc.nome");   
        listEscola = query.getResultList();
        em.getTransaction().commit();
       
    } catch (Exception e) {
        e.printStackTrace();
       
        if(em.getTransaction().isActive()){
            em.getTransaction().rollback();
        }
    }finally{
        em.close();
    }
   
    return listEscola;   
}[/code]

Antes era assim:

public List&lt;Escola&gt; findAll() { Query query = getEntityManager().createQuery("select distinct esc from Escola esc ,Matricula mat" + " where mat.idescola = esc.idescola" + " and mat.idpessoa = 1 " + " and mat.situacao = 'A' order by esc.nome"); return (List&lt;Escola&gt;) query.getResultList(); }

Agora nenhum e nem outro e até o GlassFish começou a dar pau. É muito para mim.

Olá

[quote]view plaincopy to clipboardprint?
javax.servlet.ServletException: javax.persistence.PersistenceException: org.hibernate.AnnotationException: Unknown Id.generator: seq_escola
root cause
javax.faces.el.EvaluationException: javax.persistence.PersistenceException: org.hibernate.AnnotationException: Unknown Id.generator: seq_escola
root cause [/quote]
Neste seu teste a sua maquina e de seu colega estavam apontando para o mesmo banco ?!? Pois o log aponta não encontrar a sequence “seq_escola”;

Outra coisa não sei o motivo que levou voce mudar seu select, mas na forma que estava antes funcionaria normalmente. Outra coisa até onde lembro operações de select não necessitam que voce inicie uma “transação” de “commit” ou “rollback”.
A proposito seu select esta fixado na busca como o mat.idpessoa = 1, é isto mesmo que deseja ??

    public List<Escola> findAll() {  
            Query query =  getEntityManager().createQuery("select distinct esc from Escola esc ,Matricula mat" +  
                                                          " where mat.idescola = esc.idescola" +  
                                                          " and mat.idpessoa = 1 " +  
                                                          " and mat.situacao = 'A' order by esc.nome");     
                 return (List<Escola>) query.getResultList();     
        }  

1 era só o teste, em realidade eu preciso é do usuário logado no sistema. Ao invés do 1 eu pego o ID do usuário.

Apaga essa classe HttpSession que você criou.

Vai nas suas outras classes e troca o import “br.com.mosaicodigital.modelo.HttpSession” por “javax.servlet.http.HttpSession”.

O problema de compilação deve ser porque você apagou sua classe HttpSession, mas seus imports ainda estavam apontando para ela.

Com esse método aqui tá pegando o usuário. Acontece que na página a lista vem vazia, mas a query que eu peguei pelo log do GlassFish, está correto. Não estou conseguindo debugar, colocar um break.

[code]List <Escola> listEscola = null;
try {

		HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
		LoginControle loginControle = (LoginControle)   session.getAttribute("LoginControle");
		Login login = loginControle.getLogin();
		
		//em.getTransaction().begin();
		
		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();
		
		//if(em.getTransaction().isActive()){
			//em.getTransaction().rollback();
		//}
	}finally{
		em.close();
	}		
	return listEscola;	
}[/code]

Aqui tá vindo NULL, pois eu debuguei e foi isso q encontrei.

Query query = em.createQuery(comando); listEscola = query.getResultList();
Assim chamo o em

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