[ https://issues.apache.org/jira/browse/TOMEE-2865?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17310755#comment-17310755 ]
David Benes commented on TOMEE-2865: ------------------------------------ We are facing very similar issue. But it seems that it is not related to the way how sessions are replicated. We are using [https://github.com/ran-jit/tomcat-cluster-redis-session-manager] as a session storage, so no internal Tomcat session replication is configured. We are trying to run 3 applications on 2 TomEE (Tomcat with additional projects) servers. Both TomEE servers has configuration of your Redis session manager and pointing to the same redis. On first server session is created by calling first application. Using that cookie we are able to call the second application on the same server without issue. After that we can call the application on another TomEE server without issues. But once we try to call the application on the first server (after doing one or many requests to the second server), we get following stack trace is shown in log and receives 401 error. Once we replace TomEE with Tomcat it starts working without any issue. {noformat} 29-Mar-2021 11:58:45.331 SEVERE [http-nio-8080-exec-1445] tomcat.request.session.redis.SessionManager.findSession Error occurred while de-serializing the session object.. java.lang.IllegalStateException: On a thread without an initialized context nor a classloader mapping a deployed app at org.apache.openejb.cdi.ThreadSingletonServiceImpl.get(ThreadSingletonServiceImpl.java:350) at org.apache.openejb.cdi.ThreadSingletonServiceImpl.getContext(ThreadSingletonServiceImpl.java:326) at org.apache.openejb.cdi.ThreadSingletonServiceImpl.get(ThreadSingletonServiceImpl.java:361) at org.apache.openejb.cdi.ThreadSingletonServiceImpl.get(ThreadSingletonServiceImpl.java:69) at org.apache.webbeans.config.WebBeansFinder.getSingletonInstance(WebBeansFinder.java:57) at org.apache.webbeans.config.WebBeansContext.getInstance(WebBeansContext.java:180) at org.apache.webbeans.config.WebBeansContext.currentInstance(WebBeansContext.java:198) at org.apache.webbeans.context.PassivatingContext.readExternal(PassivatingContext.java:50) at java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:2197) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2146) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1647) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:483) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:441) at org.apache.catalina.session.StandardSession.doReadObject(StandardSession.java:1587) at org.apache.catalina.session.StandardSession.readObjectData(StandardSession.java:1040) at tomcat.request.session.model.Session.readObjectData(Session.java:124) at tomcat.request.session.util.SerializationUtil.deserializeSessionData(SerializationUtil.java:77) at tomcat.request.session.redis.SessionManager.findSession(SessionManager.java:167) at tomcat.request.session.redis.SessionManager.findSession(SessionManager.java:31) at org.apache.catalina.connector.Request.isRequestedSessionIdValid(Request.java:2517) at org.apache.catalina.connector.RequestFacade.isRequestedSessionIdValid(RequestFacade.java:942) at com.cogniware.platform.api.security.UserStatusProcessor.process(UserStatusProcessor.java:56) at org.apache.camel.processor.DelegateSyncProcessor.process(DelegateSyncProcessor.java:63) at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:548) at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201) at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201) at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:97) at org.apache.camel.http.common.CamelServlet.doService(CamelServlet.java:213) at org.apache.camel.http.common.CamelServlet.service(CamelServlet.java:79) at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.catalina.filters.RestCsrfPreventionFilter.doFilter(RestCsrfPreventionFilter.java:128) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) at org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:45) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:666) at tomcat.request.session.redis.SessionHandlerValve.invoke(SessionHandlerValve.java:29) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) at org.apache.tomee.catalina.OpenEJBSecurityListener$RequestCapturer.invoke(OpenEJBSecurityListener.java:97) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690) at tomcat.request.session.redis.SingleSignOnValve.invoke(SingleSignOnValve.java:103) 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:373) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1589) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748){noformat} > Session Replication for CDI beans fails often > ---------------------------------------------- > > Key: TOMEE-2865 > URL: https://issues.apache.org/jira/browse/TOMEE-2865 > Project: TomEE > Issue Type: Bug > Components: TomEE Core Server > Affects Versions: 8.0.2, 8.0.3 > Reporter: Thomas Andraschko > Priority: Blocker > > Session clustering / replication often fails with this exception: > java.lang.IllegalStateException: On a thread without an initialized > context nor a classloader mapping a deployed app > at > org.apache.openejb.cdi.ThreadSingletonServiceImpl.get(ThreadSingletonServiceImpl.java:350) > at > org.apache.openejb.cdi.ThreadSingletonServiceImpl.getContext(ThreadSingletonServiceImpl.java:326) > at > org.apache.openejb.cdi.ThreadSingletonServiceImpl.get(ThreadSingletonServiceImpl.java:361) > at > org.apache.openejb.cdi.ThreadSingletonServiceImpl.get(ThreadSingletonServiceImpl.java:69) > at > org.apache.webbeans.config.WebBeansFinder.getSingletonInstance(WebBeansFinder.java:57) > at > org.apache.webbeans.config.WebBeansContext.getInstance(WebBeansContext.java:180) > at > org.apache.webbeans.config.WebBeansContext.currentInstance(WebBeansContext.java:198) > at > org.apache.webbeans.context.PassivatingContext.readExternal(PassivatingContext.java:50) > at > java.base/java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:2191) > at > java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2140) > at > java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1646) > at > java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:464) > at > java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:422) > at > org.apache.catalina.ha.session.DeltaSession.doReadObject(DeltaSession.java:849) > at > org.apache.catalina.ha.session.DeltaSession.readObjectData(DeltaSession.java:631) > at > org.apache.catalina.ha.session.DeltaSession.readExternal(DeltaSession.java:606) > at > java.base/java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:2191) > at > java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2140) > at > java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1646) > at > java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:464) > at > java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:422) > at > org.apache.catalina.tribes.io.XByteBuffer.deserialize(XByteBuffer.java:560) > at > org.apache.catalina.tribes.tipis.AbstractReplicatedMap$MapMessage.value(AbstractReplicatedMap.java:1507) > at > org.apache.catalina.tribes.tipis.AbstractReplicatedMap$MapMessage.deserialize(AbstractReplicatedMap.java:1465) > at > org.apache.catalina.tribes.tipis.AbstractReplicatedMap.messageReceived(AbstractReplicatedMap.java:663) > at > org.apache.catalina.tribes.group.GroupChannel.messageReceived(GroupChannel.java:336) > at > org.apache.catalina.tribes.group.ChannelInterceptorBase.messageReceived(ChannelInterceptorBase.java:91) > at > org.apache.catalina.tribes.group.interceptors.TcpFailureDetector.messageReceived(TcpFailureDetector.java:117) > at > org.apache.catalina.tribes.group.ChannelInterceptorBase.messageReceived(ChannelInterceptorBase.java:91) > at > org.apache.catalina.tribes.group.ChannelInterceptorBase.messageReceived(ChannelInterceptorBase.java:91) > at > org.apache.catalina.tribes.group.ChannelCoordinator.messageReceived(ChannelCoordinator.java:274) > at > org.apache.catalina.tribes.transport.ReceiverBase.messageDataReceived(ReceiverBase.java:261) > at > org.apache.catalina.tribes.transport.nio.NioReplicationTask.drainChannel(NioReplicationTask.java:213) > at > org.apache.catalina.tribes.transport.nio.NioReplicationTask.run(NioReplicationTask.java:101) > at > java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) > at > java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) > at java.base/java.lang.Thread.run(Thread.java:834) > Setup: > Nginx, TomEE N1, TomEE N2 > Steps to reproduce: > - Open the browser and call the webapp > - Session will be initialized on N1 > - Shutdown N1 > - Open the link again and you will see your initialized session on N2 > - Startup N1 > - Open the link again -> exception will be thrown > Will post the configs in the comments -- This message was sent by Atlassian Jira (v8.3.4#803005)