You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@geronimo.apache.org by "David Jencks (JIRA)" <ji...@apache.org> on 2010/09/22 02:01:34 UTC

[jira] Reopened: (GERONIMO-5616) Tomcat native cluster not working because of ClassNotFoundException: org.apache.catalina.ha.session.SessionMessageImpl

     [ https://issues.apache.org/jira/browse/GERONIMO-5616?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

David Jencks reopened GERONIMO-5616:
------------------------------------


maven tells me that this introduces a circular dependency between catalina-ha and tribes so the tomcat-parent-7.0.0 project won't build.  I reverted it in rev 999693.  Will it work just as well without the added dependency?  Should the import packages be optional, I think tribes can be used independent of tomcat?

> Tomcat native cluster not working because of ClassNotFoundException: org.apache.catalina.ha.session.SessionMessageImpl
> ----------------------------------------------------------------------------------------------------------------------
>
>                 Key: GERONIMO-5616
>                 URL: https://issues.apache.org/jira/browse/GERONIMO-5616
>             Project: Geronimo
>          Issue Type: Bug
>      Security Level: public(Regular issues) 
>          Components: Tomcat
>    Affects Versions: 3.0
>         Environment: Windows 7 x86
> sun jdk 1.6.0_20
>            Reporter: Forrest Xia
>            Assignee: Forrest Xia
>             Fix For: 3.0
>
>         Attachments: GERONIMO-5616.patch
>
>
> Configure the tomcat native cluster via these steps to reproduce this bug
> 1. Get a latest geronimo tomcat build and unzip it to a folder
> 2. Update var/catalina/server.xml to add these lines into <Engine>
> <Engine name="Catalina" defaultHost="${ServerHostname}" jvmRoute="server2">            
>             <!--Put the cluster just after Engine, not in the Host element-->
> 				<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8">
>                     <Manager className="org.apache.catalina.ha.session.DeltaManager" expireSessionsOnShutdown="false" notifyListenersOnReplication="true" name="${clusterName}" channelSendOptions="6" mapSendOptions="6"/>
>                     <Channel className="org.apache.catalina.tribes.group.GroupChannel">
>                     <!--Update <server1_IP> with the real IP, for example, 9.1.2.3, the server2 must be in the same subnet as server1-->
>                         <Membership className="org.apache.catalina.tribes.membership.McastService" bind="localhost" address="228.0.0.4" port="45564" frequency="500" dropTime="3000" />
>                         <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="localhost" port="4000" autoBind="100" selectorTimeout="5000" maxThreads="6" />
>                         <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
>                             <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender" />
>                         </Sender>                        
>                         <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector" interval="60"/>                        
>                         
>                         <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor" />
>                         <Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor" />                        
>                     </Channel>
>                     <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;" />
>                     <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve" />
>                     <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener" />
>                     <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener" />
>       </Cluster>
> 3. Copy this server to another folder and update the portoffset, so that the server can run in the same machine, note that change jvmRoute property to another value.
> 4. Start server1 and server2, the server will try to setup a dynamic clustering via multicast service. You will see an ClassNotFoundException when trying to setup the cluster as following:
> 2010-09-20 23:42:06,594 ERROR [GroupChannel] Unable to deserialize message:ClusterData[src=org.apache.catalina.tribes.membership.MemberImpl[tcp://{127, 0, 0, 1}:4000,{127, 0, 0, 1},4000, alive=15847, securePort=-1, UDP Port=-1, id={-69 -59 107 100 42 49 65 125 -87 88 55 -60 67 60 110 -25 }, payload={}, command={}, domain={}, ]; id={102 -106 41 40 -55 -74 75 -106 -70 15 -66 -8 -58 117 -11 -16 }; sent=2010-09-20 23:42:06.567]
> java.lang.ClassNotFoundException: org.apache.catalina.ha.session.SessionMessageImpl
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:494)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:410)
> 	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:398)
> 	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:105)
> 	at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
> 	at java.lang.Class.forName0(Native Method)
> 	at java.lang.Class.forName(Class.java:247)
> 	at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:604)
> 	at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1575)
> 	at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496)
> 	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732)
> 	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
> 	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
> 	at org.apache.catalina.tribes.io.XByteBuffer.deserialize(XByteBuffer.java:573)
> 	at org.apache.catalina.tribes.io.XByteBuffer.deserialize(XByteBuffer.java:555)
> 	at org.apache.catalina.tribes.group.GroupChannel.messageReceived(GroupChannel.java:258)
> 	at org.apache.catalina.tribes.group.ChannelInterceptorBase.messageReceived(ChannelInterceptorBase.java:80)
> 	at org.apache.catalina.tribes.group.interceptors.TcpFailureDetector.messageReceived(TcpFailureDetector.java:112)
> 	at org.apache.catalina.tribes.group.ChannelInterceptorBase.messageReceived(ChannelInterceptorBase.java:80)
> 	at org.apache.catalina.tribes.group.ChannelInterceptorBase.messageReceived(ChannelInterceptorBase.java:80)
> 	at org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor.messageReceived(ThroughputInterceptor.java:90)
> 	at org.apache.catalina.tribes.group.ChannelInterceptorBase.messageReceived(ChannelInterceptorBase.java:80)
> 	at org.apache.catalina.tribes.group.ChannelCoordinator.messageReceived(ChannelCoordinator.java:258)
> 	at org.apache.catalina.tribes.transport.ReceiverBase.messageDataReceived(ReceiverBase.java:271)
> 	at org.apache.catalina.tribes.transport.nio.NioReplicationTask.drainChannel(NioReplicationTask.java:212)
> 	at org.apache.catalina.tribes.transport.nio.NioReplicationTask.run(NioReplicationTask.java:101)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
> 	at java.lang.Thread.run(Thread.java:619)
> This exception will lead to session replication failures. I guess this is caused by classloader mechanism change. In the bundle classloader, there is no SessionMessageImpl class to be able to load.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.