Hi, I'm using the Redis Session Manager (https://jitpack.io/p/ran-jit/TomcatClusterRedisSessionManager) to replicate sessions in a Tomcat cluster.
When the Redis database is down, a 500 response is returned in every request. In this case I would rather like to switch back to local session management. Like this I could at least serve jsp pages. There's already an issue for this https://github.com/redisson/redisson/issues/1651 but nobody seems to care about it. Does anybody have experience with the implementation of session managers? Maybe it would be easy to just write a thin "wrapper"? Exception stacktrace that is thrown when Redis is down: 21-Mar-2023 22:28:10.146 SEVERE [http-nio-8090-exec-10] org.apache.catalina.core.StandardHostValve.custom Exception Processing ErrorPage[errorCode=500, location=/fehlerseiten/500.jsp] org.apache.jasper.JasperException: javax.servlet.ServletException: redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool at org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:638) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:499) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329) at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:712) at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:461) at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:384) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312) at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:394) at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:253) at org.apache.catalina.core.StandardHostValve.throwable(StandardHostValve.java:348) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:173) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:668) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:417) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:834) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.base/java.lang.Thread.run(Thread.java:829) Caused by: javax.servlet.ServletException: redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool at org.apache.jsp.fehlerseiten._500_jsp._jspService(_500_jsp.java:1106) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:476) ... 26 more Caused by: redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool at redis.clients.util.Pool.getResource(Pool.java:53) at redis.clients.jedis.JedisPool.getResource(JedisPool.java:226) at redis.clients.jedis.JedisPool.getResource(JedisPool.java:16) at tomcat.request.session.data.cache.impl.redis.RedisManager.setnx(RedisManager.java:52) at tomcat.request.session.data.cache.impl.redis.RedisCache.setnx(RedisCache.java:33) at tomcat.request.session.redis.SessionManager.createSession(SessionManager.java:107) at tomcat.request.session.redis.SessionManager.createSession(SessionManager.java:31) at org.apache.catalina.connector.Request.doGetSession(Request.java:3018) at org.apache.catalina.connector.Request.getSession(Request.java:2416) at org.apache.catalina.connector.RequestFacade.getSession(RequestFacade.java:908) at javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:241) at org.apache.catalina.core.ApplicationHttpRequest.getSession(ApplicationHttpRequest.java:564) at org.apache.catalina.core.ApplicationHttpRequest.getSession(ApplicationHttpRequest.java:509) at org.apache.jasper.runtime.PageContextImpl.initialize(PageContextImpl.java:133) at org.apache.jasper.runtime.JspFactoryImpl.internalGetPageContext(JspFactoryImpl.java:109) at org.apache.jasper.runtime.JspFactoryImpl.getPageContext(JspFactoryImpl.java:60) at org.apache.jsp.fehlerseiten._500_jsp._jspService(_500_jsp.java:140) ... 29 more Caused by: redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: connect timed out at redis.clients.jedis.Connection.connect(Connection.java:207) at redis.clients.jedis.BinaryClient.connect(BinaryClient.java:93) at redis.clients.jedis.BinaryJedis.connect(BinaryJedis.java:1767) at redis.clients.jedis.JedisFactory.makeObject(JedisFactory.java:106) at org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:868) at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:435) at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:363) at redis.clients.util.Pool.getResource(Pool.java:49) ... 45 more Caused by: java.net.SocketTimeoutException: connect timed out at java.base/java.net.PlainSocketImpl.socketConnect(Native Method) at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:412) at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:255) at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:237) at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) at java.base/java.net.Socket.connect(Socket.java:609) at redis.clients.jedis.Connection.connect(Connection.java:184) ... 52 more Thanks for any help or tips! Best regards, Benny