Problemas na SessionFactory

3 respostas
A

Boa noite senhores.
Eu estou com o seguinte problema. Fiz um pequeno cadastro usando hibernate e jsf. Mas quando eu iniciou o servidor. Eu recebo a seguinte messagem de erro: java.lang.ClassCastException: org.hibernate.impl.SessionImpl cannot be cast to org.hibernate.SessionFactory.

Alguém poderia me dar uma força a resolver esse problema.

Abaixo segue os codigos.

EVERE: Exception starting filter conexaoFilter
java.lang.ClassCastException: org.hibernate.impl.SessionImpl cannot be cast to org.hibernate.SessionFactory
	at br.com.ergoclinweb.filter.ConexaoHibernateFilter.init(ConexaoHibernateFilter.java:14)
	at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:295)
	at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:422)
	at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:115)
	at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4071)
	at org.apache.catalina.core.StandardContext.start(StandardContext.java:4725)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
	at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
	at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
	at org.apache.catalina.core.StandardService.start(StandardService.java:525)
	at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Minha classe Filter
public class ConexaoHibernateFilter implements Filter{
	private SessionFactory sf = null;
	
	public void init(FilterConfig config)throws ServletException{

		this.sf = (SessionFactory) HibernateUtil.getInstace();
	}
	
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws ServletException{
		try{
			this.sf.getCurrentSession().beginTransaction();
			chain.doFilter(request, response);
			this.sf.getCurrentSession().getTransaction().commit();
			this.sf.getCurrentSession().close();
		}catch(Throwable ex){
			try{
				if(this.sf.getCurrentSession().getTransaction().isActive()){
					this.sf.getCurrentSession().getTransaction().rollback();
				}
			}catch(Throwable t){
				t.printStackTrace();
			}
			throw new ServletException(ex);
		}
	}
	public void destroy(){}
}
Meu HibernateUtil
@SuppressWarnings("deprecation")
public class HibernateUtil {
	private static final SessionFactory sessionFactory;
	private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();

	static {
		try {
			Configuration configuration = new AnnotationConfiguration();
			configuration.configure("hibernate.cfg.xml");
			sessionFactory = configuration.buildSessionFactory();
		} catch (Throwable t) {
			throw new ExceptionInInitializerError(t);
		}
	}
	
	//Retorna uma SessionFactory
	public static Session getInstace() {
		Session session = (Session) threadLocal.get();
		session = sessionFactory.openSession();
		threadLocal.set(session);
		return session;
	}

}
Meu XML
<filter>
		<filter-name>conexaoFilter</filter-name>
		<filter-class>br.com.ergoclinweb.filter.ConexaoHibernateFilter</filter-class>
	</filter>
	
	<filter-mapping>
		<filter-name>conexaoFilter</filter-name>
		<url-pattern>*.jsf</url-pattern>
	</filter-mapping>

Agradeço a todos

3 Respostas

A

Valeu ja resolvi

otaviojava

Coloca como resolvido, e se possível também descreve o que vc fez.

A

Olá amigo.
Eu fiz o seguinte: removi a classe o mapeamento Filter do web.xml e adcionei um outro para interceptar as requesições e adicionei ao web.xml. Abaixo segue o codigo.

<servlet>
		<servlet-name>Faces Servlet</servlet-name>
		<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>Faces Servlet</servlet-name>
		<url-pattern>*.xhtml</url-pattern>
	</servlet-mapping>
Criado 2 de janeiro de 2012
Ultima resposta 3 de jan. de 2012
Respostas 3
Participantes 2