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.