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


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.

Reply via email to