Global exception is not catching a sudden db disconnection error in Struts 1

62 Views Asked by At

I'm getting a blank page when there is a sudden db disconnection error, and I want to redirect it to the error page rather than seeing it blank. But my problem is, my exception handler class is not catching any errors when the application is disconnected with the database.

public class LMExceptionHandler extends ExceptionHandler {

    protected Log log = LogFactory.getFactory().getInstance(this.getClass().getName());

    @Override
    public ActionForward execute(Exception ex, ExceptionConfig ae,
                                ActionMapping mapping,
                                ActionForm form,
                                HttpServletRequest request,
                                HttpServletResponse response) throws ServletException{

        log.debug("==========================>>>>>> EXECUTE WHEN PAGE IS BLANK!");

    return super.execute(ex, ae, mapping, form, request, response);
    }


}

struts-config.xml

    <global-exceptions>
        <exception
            key="error.exception.message"
            type="java.lang.Exception"
            handler="com.mypackage.LMExceptionHandler"
            path="/error.jsp" />
    </global-exceptions>

already tried:

java.lang.Throwable
java.io.IOException
java.sql.SQLException

This is the log error that is not being catch by the handler.

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
tomcat_1               | org.hibernate.exception.JDBCConnectionException: Cannot open connection
tomcat_1               |    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:99)
tomcat_1               |    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
tomcat_1               |    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:52)
tomcat_1               |    at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:449)
tomcat_1               |    at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167)
tomcat_1               |    at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:160)
tomcat_1               |    at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:81)
tomcat_1               |    at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1473)
tomcat_1               |    at sun.reflect.GeneratedMethodAccessor130.invoke(Unknown Source)
tomcat_1               |    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
tomcat_1               |    at java.lang.reflect.Method.invoke(Method.java:498)
tomcat_1               |    at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:345)
tomcat_1               |    at com.sun.proxy.$Proxy93.beginTransaction(Unknown Source)
tomcat_1               |    at com.legalmatch.legalmatch.common.hibernate.HibernateSessionFactory.getSession(HibernateSessionFactory.java:99)
tomcat_1               |    at com.legalmatch.legalmatch.common.hibernate.HibernateSessionFactory.getSession(HibernateSessionFactory.java:86)
tomcat_1               |    at com.legalmatch.legalmatch.common.hibernate.HibernateThreadFilter.doFilter(HibernateThreadFilter.java:32)
tomcat_1               |    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
tomcat_1               |    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
tomcat_1               |    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
tomcat_1               |    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
tomcat_1               |    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
tomcat_1               |    at org.apache.catalina.filters.AddDefaultCharsetFilter.doFilter(AddDefaultCharsetFilter.java:89)
tomcat_1               |    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
tomcat_1               |    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
tomcat_1               |    at org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:109)
tomcat_1               |    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
tomcat_1               |    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
tomcat_1               |    at com.legalmatch.legalmatch.servlet.ProxyRemoteAddrFilter.doFilter(ProxyRemoteAddrFilter.java:46)
tomcat_1               |    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
tomcat_1               |    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
tomcat_1               |    at com.legalmatch.legalmatch.external.itrack.EmailTrackingServletFilter.doFilter(EmailTrackingServletFilter.java:40)
tomcat_1               |    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
tomcat_1               |    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
tomcat_1               |    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
tomcat_1               |    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
tomcat_1               |    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493)
tomcat_1               |    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
tomcat_1               |    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
tomcat_1               |    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
tomcat_1               |    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
tomcat_1               |    at org.apache.coyote.ajp.AjpProcessor.service(AjpProcessor.java:476)
tomcat_1               |    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
tomcat_1               |    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:808)
tomcat_1               |    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498)
tomcat_1               |    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
tomcat_1               |    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
tomcat_1               |    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
tomcat_1               |    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
tomcat_1               |    at java.lang.Thread.run(Thread.java:748)
tomcat_1               | Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
tomcat_1               | 
tomcat_1               | The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
tomcat_1               |    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
tomcat_1               |    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
tomcat_1               |    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
 tomcat_1               |   at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
tomcat_1               |    at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
tomcat_1               |    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:990)
tomcat_1               |    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:335)
tomcat_1               |    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2187)
tomcat_1               |    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2220)
tomcat_1               |    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2015)
tomcat_1               |    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:768)
tomcat_1               |    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
tomcat_1               |    at sun.reflect.GeneratedConstructorAccessor110.newInstance(Unknown Source)
tomcat_1               |    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
tomcat_1               |    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
tomcat_1               |    at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
tomcat_1               |    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:385)
tomcat_1               |    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:323)
tomcat_1               |    at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:319)
tomcat_1               |    at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:212)
tomcat_1               |    at org.apache.tomcat.jdbc.pool.PooledConnection.reconnect(PooledConnection.java:372)
tomcat_1               |    at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:822)
tomcat_1               |    at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:652)
tomcat_1               |    at org.apache.tomcat.jdbc.pool.ConnectionPool.getConnection(ConnectionPool.java:198)
tomcat_1               |    at org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:132)
tomcat_1               |    at org.hibernate.connection.DatasourceConnectionProvider.getConnection(DatasourceConnectionProvider.java:92)
tomcat_1               |    at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446)
tomcat_1               |    ... 45 more
tomcat_1               | Caused by: java.net.NoRouteToHostException: No route to host (Host unreachable)
tomcat_1               |    at java.net.PlainSocketImpl.socketConnect(Native Method)
tomcat_1               |    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
tomcat_1               |    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
tomcat_1               |    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
tomcat_1               |    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
tomcat_1               |    at java.net.Socket.connect(Socket.java:589)
tomcat_1               |    at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:211)
tomcat_1               |    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:299)
tomcat_1               |    ... 65 more
0

There are 0 best solutions below