[
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)