Problema: javax.servlet.ServletException

1 resposta
S

Pessoal,

estou desenvolvendo um sistema usando JSF, MyFaces, Tomahawk e Hibernate.
O erro que recebo na página é o seguinte:

HTTP Status 500 -

--------------------------------------------------------------------------------

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Filter execution threw an exception

root cause

java.lang.NoClassDefFoundError: Could not initialize class br.com.acesso.jsf.hibernate.hibernateutil.HibernateUtil
br.com.acesso.jsf.hibernate.sessionfilter.HibernateSessionFilter.doFilter(HibernateSessionFilter.java:23)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.18 logs.
No console:
SEVERE: Servlet.service() for servlet FacesServlet threw exception java.lang.NoClassDefFoundError: Could not initialize class br.com.acesso.jsf.hibernate.hibernateutil.HibernateUtil at br.com.acesso.jsf.hibernate.sessionfilter.HibernateSessionFilter.doFilter(HibernateSessionFilter.java:23) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) at java.lang.Thread.run(Unknown Source)
Segue o arquivo web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	id="WebApp_ID" version="2.5">

	<!-- Welcome files -->
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
		<welcome-file>index.htm</welcome-file>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>

	<description>debug web.xml</description>

	<!-- Context Param -->
	<context-param>
		<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
		<param-value>server</param-value>
	</context-param>
	
	<context-param>
		<param-name>org.apache.myfaces.ALLOW_JAVASCRIPT</param-name>
		<param-value>true</param-value>
	</context-param>
	
	<context-param>
		<param-name>org.apache.myfaces.DETECT_JAVASCRIPT</param-name>
		<param-value>false</param-value>
	</context-param>
	
	<context-param>
		<param-name>org.apache.myfaces.PRETTY_HTML</param-name>
		<param-value>true</param-value>
	</context-param>
	
	<context-param>
		<param-name>org.apache.myfaces.AUTO_SCROLL</param-name>
		<param-value>true</param-value>
	</context-param>

	<!-- Faces Servlet -->
	<servlet>
	  <servlet-name>FacesServlet</servlet-name> 
  	  <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
  		<load-on-startup>1</load-on-startup> 
	 </servlet>
	<servlet-mapping>
  		<servlet-name>FacesServlet</servlet-name> 
  		<url-pattern>*.jsf</url-pattern> 
  	</servlet-mapping>

	<!-- Hibernate Filter -->
	<filter>
		<filter-name>hibernateFilter</filter-name>
		<filter-class>br.com.acesso.jsf.hibernate.sessionfilter.HibernateSessionFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>hibernateFilter</filter-name>
		<url-pattern>*.jsf</url-pattern>
	</filter-mapping>

	<!-- Extensions Filter -->
	<filter>
		<filter-name>MyFacesExtensionsFilter</filter-name>
		<filter-class>org.apache.myfaces.webapp.filter.ExtensionsFilter</filter-class>
		<init-param>
			<param-name>uploadMaxFileSize</param-name>
			<param-value>20m</param-value>
		</init-param>
		<init-param> 
			<param-name>uploadThresholdSize</param-name> 
  			<param-value>100k</param-value> 
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>MyFacesExtensionsFilter</filter-name>
		<url-pattern>*.jsf</url-pattern>
	</filter-mapping>
	<filter-mapping>
		<filter-name>MyFacesExtensionsFilter</filter-name>
		<url-pattern>/faces/*</url-pattern>
	</filter-mapping>

</web-app>
HibernateSessionFilter.java:
package br.com.acesso.jsf.hibernate.sessionfilter;

public class HibernateSessionFilter implements Filter {
	public void doFilter(ServletRequest servletRequest,	ServletResponse servletResponse, FilterChain filterChain) throws ServletException {
		try {
			HibernateUtil.openSession();
			HibernateUtil.currentSession().beginTransaction();
			filterChain.doFilter(servletRequest, servletResponse);
			HibernateUtil.currentSession().getTransaction().commit();
		} catch (Exception e) {
			HibernateUtil.currentSession().getTransaction().rollback();
			throw new ServletException(e);
		} finally {
			HibernateUtil.closeCurrentSession();
		}
	}

	public void destroy() {

	}

	public void init(FilterConfig arg0) throws ServletException {

	}
}
HibernateUtil.java:
package br.com.acesso.jsf.hibernate.hibernateutil;

public class HibernateUtil {
	private static ThreadLocal<Session> sessions;

	private static SessionFactory sessionFactory;
	static {
		sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
		sessions= new ThreadLocal<Session>();
	}

	public static Session openSession() {
		return sessionFactory.openSession();
	}

	public static Session getCurrentSession() {
		if (sessions.get() == null) {
			sessions.set(openSession());
		}
		return sessions.get();
	}

	public static void closeCurrentSession() {
		getCurrentSession().close();
		sessions.set(null);
	}
}

Alguém pode ajudar?

Abraços...

1 Resposta

E

O seu problema é classpath mesmo…

O teu filter não está encontrando em tempo de runtime esta classe: br.com.acesso.jsf.hibernate.hibernateutil.HibernateUtil

Verifique onde ela está e se está sendo empacotada junto com o teu war.

Abraços

Criado 22 de dezembro de 2008
Ultima resposta 26 de dez. de 2008
Respostas 1
Participantes 2