Como tratar as excessoes em Filtros

3 respostas
O

Boa tarde galera. Estou utilizando filtros para comitar e fechar a sessao de um sisteminha, mas estou enfrentando um problema e gostaria da ajuda de voces. Como estou utilizando Hibernate, Struts e Filtros. Na minha Action eu efetuo o Crud, mas o commit e o session.close esta sendo feito em um filter. Dae acontece o seguinte. Se acaso der algum erro no commit como por exemplo restricao de integridade de um dado que nao deveria ser excluido eu apenas estou conseguindo pegar o stackTrace, getMessage,getCause e imprimir no console. Gostaria de tratar essa excessao e deixar para o usuario uma mensagem intuitiva junto com o getCause desta excessao em uma pagina. A rotina commit e o fechamento da sessao esta sendo efetuados na resposta do filtro, por isso eu nao consigo mandar essa Excessao como um atributo para a pagina. O que devo fazer para que o usuario veja em uma pagina uma mensagem intuitiva e o getCause dessa excessao? Obrigado pela ajuda.

Filtros

public class HibernateFilter implements Filter {

	private FilterConfig config;
	private static Log log = LogFactory.getLog(HibernateFilter.class);
	
	public void destroy() {
		
		
	}

	public void doFilter(ServletRequest req, ServletResponse resp,
			FilterChain chain) throws IOException, ServletException {
		
		try {
			chain.doFilter(req, resp);
			log.debug("Committing the database transaction");
			HibernateUtil.comitTransacao();
			
		} catch (HibernateException he) {
			he.printStackTrace();
						
		} finally {
			
			HibernateUtil.closeSessao();
		}
	}

	public void init(FilterConfig config) throws ServletException {
		this.config = config;
		log.debug("Inicializando o Filtro...");
      
		
	}

}

Web.xml

<filter>
		<filter-name>Hibernate</filter-name>
		<filter-class>br.com.MGFSuporte.filtros.HibernateFilter</filter-class>
	</filter>
	<filter>
		<filter-name>LoginFiltro</filter-name>
		<filter-class>br.com.MGFSuporte.filtros.LoginFilter</filter-class>
	</filter>
	
	<filter-mapping>
		<filter-name>Hibernate</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	<filter-mapping>
		<filter-name>LoginFiltro</filter-name>
		<url-pattern>/pages/*</url-pattern>
	</filter-mapping>

3 Respostas

Guilherme_Gomes

Em vez de usar o filtro para isso, use as TAGs do web.xml para mapear os erros e exceptions:

<error-page>
  	<exception-type>java.lang.NumberFormatException</exception-type>
  	<location>/erroNumerico.jsp</location>
  </error-page>
  <error-page>
  	<exception-type>java.lang.Throwable</exception-type>
  	<location>/erroGenerico.jsp</location>
  </error-page>

//Também existe isso

  <error-page>
  	<error-code>500</error-code>
  	<location>/erroServidor.jsp</location>
  </error-page>

Veja se isso pode resolver o seu caso…

xandevieira

Vc poderia criar um metodo recebendo uma Exception, fazer alguma comparação do tipo de exceção.

O

Valeu galera. Estou usando os filtros apenas para efetuar o comit e fechar a sessao… Mas vou tentar assim… Obrigado

Criado 25 de março de 2008
Ultima resposta 26 de mar. de 2008
Respostas 3
Participantes 3