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

Reply via email to