geronimo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Forrest Xia (JIRA)" <j...@apache.org>
Subject [jira] Created: (GERONIMO-5616) Tomcat native cluster not working because of ClassNotFoundException: org.apache.catalina.ha.session.SessionMessageImpl
Date Mon, 20 Sep 2010 15:58:36 GMT
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.


Mime
View raw message