How to catch exceptions on ajax4jsf filter?
tomba Sep 27, 2007 3:40 AMHi all,
we have a JSF 1.1 application on Tomcat 6.0.13 and have a problem with exceptions. In fact when an uncaught exception occurs, it is logged but then afterwards tomcat gets stuck in 100% CPU for garbage collection.
Here is an example error:
java.io.IOException: FileUtils.WriteToFile failed, got: java.io.FileNotFoundException: C:\test\GEARO\UPLOAD\C:\Documents and Settings\Sede\Desktop\apache-tomcat-6.0.14.zip (The filename, directory name, or volume label syntax is incorrect) at be.sofico.web.framework.FileUtil.writeFile(FileUtil.java:73) at be.sofico.web.extranet.dynamic.files.CustomerUpload.process(CustomerUpload.java:64) 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:585) at com.sun.faces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:146) at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:92) at javax.faces.component.UICommand.broadcast(UICommand.java:332) at org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:186) at org.ajax4jsf.component.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:164) at org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.java:352) at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:95) at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:245) at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:110) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:213) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:141) at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:281) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:147) 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:230) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) at java.lang.Thread.run(Thread.java:595)
You can see we use an ajax4jsf filter. The problem is then that the exception happens but the user is not redirected to an error page. After that, the Tomcat problem occurs until we restart tomcat manually.
Is there any possibility to catch these exceptions and prevent tomcat from blocking the whole application?
Thanks