-
1. Re: Clustering Question
slaboure Oct 11, 2002 5:00 AM (in response to integ)JBoss supports session failover.
The load-balancing behaviour must be handled externally, either by a hardware LB or software LB (such as Apache).
Next, concerning sticky-sessions, you should really use that mechanism to avoid inconsistent behaviour. BUT this behaviour must be handled at the load-balancer level, not JBoss level: so you must configure your LB to correctly handle sticky sessions. (see numerous posts on this topic in this forum).
Cheers,
sacha -
2. Re: Clustering Question
integ Oct 11, 2002 4:14 PM (in response to integ)Hi Sacha,
The LB does handle the sticky sessions properly - on server1 i get session as sessionid.server1 and on server2 as sessionid.server2. (server 2 is on a different machine)So the sticky sessions are working.
BUT, when i try to failover, i get the following error and a new session id (which means session didnt replicate):
19:23:27,517 ERROR [LogInterceptor] EJBException, causedBy:
java.lang.NullPointerException
at java.io.ByteArrayInputStream.(Unknown Source)
at org.jboss.ejb.plugins.CMPClusteredInMemoryPersistenceManager.loadEnti
ty(CMPClusteredInMemoryPersistenceManager.java:352)
at org.jboss.ejb.plugins.CMPPersistenceManager.loadEntity(CMPPersistence
Manager.java:410)
at org.jboss.ejb.plugins.EntitySynchronizationInterceptor.invoke(EntityS
ynchronizationInterceptor.java:262)
at org.jboss.ejb.plugins.EntityInstanceInterceptor.invoke(EntityInstance
Interceptor.java:152)
at org.jboss.ejb.plugins.EntityLockInterceptor.invoke(EntityLockIntercep
tor.java:107)
at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:203)
at org.jboss.ejb.EntityContainer.invoke(EntityContainer.java:493)
at org.jboss.ejb.Container.invoke(Container.java:712)
at org.jboss.ejb.EntityContainer.invoke(EntityContainer.java:1058)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:517)
at org.jboss.invocation.local.LocalInvoker.invoke(LocalInvoker.java:98)
at org.jboss.invocation.InvokerInterceptor.invoke(InvokerInterceptor.jav
a:102)
at org.jboss.proxy.TransactionInterceptor.invoke(TransactionInterceptor.
java:77)
at org.jboss.proxy.ejb.HomeInterceptor.invoke(HomeInterceptor.java:189)
at org.jboss.proxy.ClientContainer.invoke(ClientContainer.java:76)
at $Proxy15.remove(Unknown Source)
at org.jboss.ha.httpsession.server.ClusteredHTTPSessionService.removeHtt
pSession(ClusteredHTTPSessionService.java:153)
at java.lang.reflect.Method.invoke(Native Method)
at org.jboss.mx.capability.ReflectedMBeanDispatcher.invoke(ReflectedMBea
nDispatcher.java:284)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:517)
at org.jboss.util.jmx.MBeanProxy.invoke(MBeanProxy.java:174)
at $Proxy232.removeHttpSession(Unknown Source)
at org.jboss.web.catalina.session.ClusterManager.removeSession(ClusterMa
nager.java:496)
at org.jboss.web.catalina.session.ClusterManager.remove(ClusterManager.j
ava:277)
at org.jboss.web.catalina.session.ClusteredSession.setId(ClusteredSessio
n.java:348)
at org.jboss.web.catalina.session.ClusterManager.findSession(ClusterMana
ger.java:209)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j
ava:173)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline
.java:566)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatche
rValve.java:170)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline
.java:564)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j
ava:170)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline
.java:564)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:
468)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline
.java:564)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
a:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal
ve.java:174)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline
.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
a:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.ajp.tomcat4.Ajp13Processor.process(Ajp13Processor.java:458
)
at org.apache.ajp.tomcat4.Ajp13Processor.run(Ajp13Processor.java:551)
at java.lang.Thread.run(Unknown Source)
19:23:27,597 ERROR [Engine] Ajp13Processor[8009][4] process: invoke
java.lang.NullPointerException
at org.jboss.web.catalina.session.ClusterManager.findSession(ClusterMana
ger.java:220)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j
ava:173)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline
.java:566)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatche
rValve.java:170)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline
.java:564)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j
ava:170)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline
.java:564)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:
468)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline
.java:564)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
a:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal
ve.java:174)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline
.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
a:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.ajp.tomcat4.Ajp13Processor.process(Ajp13Processor.java:458
)
at org.apache.ajp.tomcat4.Ajp13Processor.run(Ajp13Processor.java:551)
at java.lang.Thread.run(Unknown Source)
Iam using JBoss3.0.3_tomcat4.0.5.I noticed that in previous versions - Jboss3.0.1_tomcat4.0.4 - the error didnt happen but still i got a new session id anyways.
Point to note : Without sticky sessions, everything works FINE! - sessions replicate, failover happens etc.
When i stop server1, does the session get replicated immediately on server2? I have put jbossha-httpsession.sar in deploy directory, in web.xml, True , specified roundrobin as bean loadbalancing policy in jboss.xml etc. i can attach these files if needed.
Any solutions / ideas?
Thanks -
3. Re: Clustering Question
integ Oct 14, 2002 5:33 PM (in response to integ)Please, anybody has any help/solution/ideas on this??? as far as i can see iam not doing anything wrong in the configuration...
-
4. Re: Clustering Question
integ Oct 14, 2002 6:55 PM (in response to integ)This is the log iam getting on tomcat2 (after i stop tomcat1 which had sticky session going on it)
The tomcat2 log clearly shows the session id (NsLuDM0DMSL+MeuDgdt3Vg**.tomcat1) which used to exist on tomcat1 - meaning that session IS being replicated, but subsequently there is an error in CMPClusteredInMemoryPersistenceManager.
And why is removeHttpSession being called ? What is the need to remove the replicated session???
2002-10-14 14:40:21,642 DEBUG [org.jboss.web.catalina.EmbeddedCatalinaServiceSX] Looking for sessions that have expired
2002-10-14 14:40:57,093 DEBUG [org.jboss.web.catalina.EmbeddedCatalinaServiceSX] Looking for session with id=NsLuDM0DMSL+MeuDgdt3Vg**.tomcat1
2002-10-14 14:40:57,103 DEBUG [org.jboss.ha.httpsession.server.ClusteredHTTPSessionService] getHttpSession called for session: NsLuDM0DMSL+MeuDgdt3Vg**.tomcat1
2002-10-14 14:40:58,014 DEBUG [org.jboss.ha.httpsession.server.ClusteredHTTPSessionService] removeHttpSession called for session: NsLuDM0DMSL+MeuDgdt3Vg**.tomcat1
2002-10-14 14:40:58,024 DEBUG [org.javagroups.DefaultPartition] [Mon Oct 14 14:40:58 PDT 2002] [INFO] NAKACK.send(): sending msg #1
2002-10-14 14:40:58,024 DEBUG [org.javagroups.DefaultPartition] [Mon Oct 14 14:40:58 PDT 2002] [INFO] STABLE.startStableTask(): stable task started; num_gossip_runs=3, max_gossip_runs=3
2002-10-14 14:40:58,024 DEBUG [org.jboss.ha.httpsession.server.ClusteredHTTPSessionService] removeHttpSession called for session: NsLuDM0DMSL+MeuDgdt3Vg**.tomcat1
2002-10-14 14:40:58,024 ERROR [org.jboss.ejb.plugins.LogInterceptor] EJBException, causedBy:
java.lang.NullPointerException
at java.io.ByteArrayInputStream.(Unknown Source)
at org.jboss.ejb.plugins.CMPClusteredInMemoryPersistenceManager.loadEntity(CMPClusteredInMemoryPersistenceManager.java:352)
at org.jboss.ejb.plugins.CMPPersistenceManager.loadEntity(CMPPersistenceManager.java:410)
at org.jboss.ejb.plugins.EntitySynchronizationInterceptor.invoke(EntitySynchronizationInterceptor.java:262)
at org.jboss.ejb.plugins.EntityInstanceInterceptor.invoke(EntityInstanceInterceptor.java:152)
at org.jboss.ejb.plugins.EntityLockInterceptor.invoke(EntityLockInterceptor.java:107)
at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:203)
at org.jboss.ejb.EntityContainer.invoke(EntityContainer.java:493)
at org.jboss.ejb.Container.invoke(Container.java:712)
at org.jboss.ejb.EntityContainer.invoke(EntityContainer.java:1058)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:517)
at org.jboss.invocation.local.LocalInvoker.invoke(LocalInvoker.java:98)
at org.jboss.invocation.InvokerInterceptor.invoke(InvokerInterceptor.java:102)
at org.jboss.proxy.TransactionInterceptor.invoke(TransactionInterceptor.java:77)
at org.jboss.proxy.ejb.HomeInterceptor.invoke(HomeInterceptor.java:189)
at org.jboss.proxy.ClientContainer.invoke(ClientContainer.java:76)
at $Proxy15.remove(Unknown Source)
at org.jboss.ha.httpsession.server.ClusteredHTTPSessionService.removeHttpSession(ClusteredHTTPSessionService.java:153)
at java.lang.reflect.Method.invoke(Native Method)
at org.jboss.mx.capability.ReflectedMBeanDispatcher.invoke(ReflectedMBeanDispatcher.java:284)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:517)
at org.jboss.util.jmx.MBeanProxy.invoke(MBeanProxy.java:174)
at $Proxy232.removeHttpSession(Unknown Source)
at org.jboss.web.catalina.session.ClusterManager.removeSession(ClusterManager.java:496)
at org.jboss.web.catalina.session.ClusterManager.remove(ClusterManager.java:277)
at org.jboss.web.catalina.session.ClusteredSession.setId(ClusteredSession.java:348)
at org.jboss.web.catalina.session.ClusterManager.findSession(ClusterManager.java:209)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:173)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:468)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.ajp.tomcat4.Ajp13Processor.process(Ajp13Processor.java:458)
at org.apache.ajp.tomcat4.Ajp13Processor.run(Ajp13Processor.java:551)
at java.lang.Thread.run(Unknown Source)
I'll take a look again at the source code, but if anyone can help me with this i'll be very grateful.
Thanks -
5. Re: Clustering Question
integ Oct 15, 2002 8:03 PM (in response to integ)I think the bug is in ClusterManager.findSession() method..i guess you do not need to call sessions.remove(id) nad removeSession(id) before session.setId() -> setId() anyways removes the session from the local and distributed store using ClusterManager.remove()
So commenting sessions.remove(id) & removeSession(id) should do the trick.I'll submit this as a bug anyways.