tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Filip Hanik - Dev Lists <devli...@hanik.com>
Subject Re: DeltaManager cannot receive message through TCP channel in Tomcat cluster
Date Tue, 02 Oct 2007 18:00:49 GMT
Daniel M Garland wrote:
> Thanks for the response
>
> So is it better to have one cluster rather than one per host? 
easier to manage and troubleshoot one cluster than many.
> What about hosts that don't have clustering enabled? 
that's not a problem, clustering only applies to webapps with the 
<distributable/> element, if the all apps in a host are non clustered, 
then no clustering will be applied.
> Surely there are advantages with having a separate cluster, its 
> listening on a different address so it would have its own message 
> buffer etc.?
I see that as disadvantages, but thats a personal opinion.
>
> My current config is roughly as follows : I have two clusters 
> transmitting on differnet multicast addresses (but on the same port) 
> while I am binding my TCP listener to the external IP of the Tomcat 
> server on a different port:
>
>     <Engine name="Catalina" defaultHost="localhost" jvmRoute="bulk">
>
>       ...
>
>       <Host name="myvirtualhost.com" appBase="/var/webapps/domain.com"
>           unpackWars="true" autoDeploy="true">
>     
>       ...
>
>          <Cluster 
> className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"
>
> managerClassName="org.apache.catalina.cluster.session.DeltaManager"
>                  expireSessionsOnShutdown="false"
>                  useDirtyFlag="true"
>                  notifyListenersOnReplication="true">
>
>             <Membership
>                 
> className="org.apache.catalina.cluster.mcast.McastService"
>                 mcastAddr="228.0.0.5"
>                 mcastPort="45565"
>                 mcastFrequency="500"
>                 mcastDropTime="20000"/>
>
>             <Receiver
>
> className="org.apache.catalina.cluster.tcp.ReplicationListener"
>                 tcpListenAddress="10.78.1.32"
>                 tcpListenPort="5000"
>                 tcpSelectorTimeout="100"
>                 tcpThreadCount="6"/>
>
>             <Sender
>
> className="org.apache.catalina.cluster.tcp.ReplicationTransmitter"
>                 replicationMode="pooled"
>                 ackTimeout="15000"
>                 stateTransferTimeout="45"
>                 waitForAck="true"/>
>
>             <Valve 
> className="org.apache.catalina.cluster.tcp.ReplicationValve"
>
> filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.css;.*\.txt;"/>
>             <ClusterListener 
> className="org.apache.catalina.cluster.session.ClusterSessionListener"/>
>         </Cluster>
>       </Host>
>
>      <Host name="myothervirtualhost.com" appBase="/var/webapps/blah"
>        unpackWars="true" autoDeploy="true">
>
>        ...
>
>        <Cluster 
> className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"
>
> managerClassName="org.apache.catalina.cluster.session.DeltaManager"
>                  expireSessionsOnShutdown="false"
>                  useDirtyFlag="true"
>                  notifyListenersOnReplication="true">
>
>             <Membership
>                 
> className="org.apache.catalina.cluster.mcast.McastService"
>                 mcastAddr="229.0.0.5"
>                 mcastPort="45565"
>                 mcastFrequency="500"
>                 mcastDropTime="20000"/>
>
>             <Receiver
>
> className="org.apache.catalina.cluster.tcp.ReplicationListener"
>                 tcpListenAddress="10.78.1.32"
>                 tcpListenPort="5100"
>                 tcpSelectorTimeout="100"
>                 tcpThreadCount="6"/>
>
>             <Sender
>
> className="org.apache.catalina.cluster.tcp.ReplicationTransmitter"
>                 replicationMode="pooled"
>                 ackTimeout="15000"
>                 waitForAck="true"/>
>
>             <Valve 
> className="org.apache.catalina.cluster.tcp.ReplicationValve"
>
> filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.css;.*\.txt;"/>
>
>             <ClusterListener 
> className="org.apache.catalina.cluster.session.ClusterSessionListener"/>
>         </Cluster>
>      </Host>
>
>      ...
>
>     </Engine>
>
> Is there anything amiss with this configuration that would result in 
> the problems I am seeing?
shouldn't be, unless you have some rogue instances running somewhere 
with the same config

Filip
>
> Thanks
> Dan
>
>
> Filip Hanik - Dev Lists wrote:
>> it would have to be the multicast address that is unique to take care 
>> of the problem, however, easier to run one cluster instance at the 
>> engine level, the cluster knows what vhost a piece of replicated data 
>> belongs to
>>
>> Filip
>>
>> Daniel M Garland wrote:
>>> OK I've figured out what's happening, but not how to fix it!
>>>
>>> I'm running a single Tomcat instance that is hosting some virtual 
>>> hosts, and we have three Tapestry web applications. For those 
>>> unfamiliar with Tapestry, a Visit object is defined to represent the 
>>> user's session and is sort of a facade to avoid working directly 
>>> with HttpSession. Hence in a cluster this Visit object is propagated 
>>> around the cluster.
>>>
>>> Now, what seems to be the case is that Tomcat is getting muddled up 
>>> with the different Visit classes in each separate application; which 
>>> is not good. Not only are the classes in different java packages, 
>>> but they have unique serialVersionIDs. This then gives me the error:
>>>
>>> java.io.InvalidClassException: com.mydomain.Visit; local class 
>>> incompatible: stream classdesc serialVersionUID = -139355480
>>> 5485899996, local class serialVersionUID = 8444624889687850885
>>>
>>> and it turns out that -1393554805485899996 is the Visit object from 
>>> a completely different web application.
>>>
>>> I'm trying to figure out what changes to my config I made when I 
>>> went from my old hardware to a new setup, and I believe that the 
>>> only change is that we configured each virtual host to use its own 
>>> <cluster> element, rather than having a single cluster for the 
>>> engine; but I would've thought that having three seperate clusters 
>>> on different ports/ addresses would help to prevent this sort of 
>>> thing happening, rather than cause it?
>>>
>>> Any other reasons why my serialized objects are being confused in 
>>> this way?
>>>
>>> Daniel M Garland wrote:
>>>> Hi all,
>>>>
>>>> I've been running two Tomcat 5.5.20 servers in a cluster for some 
>>>> time on Mac OSx but we've recently moved to 64-bit architecture 
>>>> (Debian etch) . I tried as far as possible to keep the config the 
>>>> same, so only the OS has changed (and I also got the Apache 
>>>> Portable Runtime going). However since moving to this new setup I'm 
>>>> starting to see the following messages in my catalina.out:
>>>>
>>>> 25-Sep-2007 16:35:11 
>>>> org.apache.catalina.cluster.session.DeltaManager messageReceived
>>>> SEVERE: Manager []: Unable to receive message through TCP channel
>>>> java.lang.ClassNotFoundException:
>>>> com.mycompany.someSerialiazbleObject
>>>>
>>>> and sometimes in other web apps I see instead of 
>>>> ClassNotFoundException:
>>>>
>>>> java.io.InvalidClassException: 
>>>> org.mycomapny.someOtherSerializableObject; local class 
>>>> incompatible: stream classdesc serialVersionUID = 
>>>> -1393554805485899996, local class serialVersionUID = 
>>>> 8444624889687850885
>>>>
>>>> Now I did some homework here and I've tried the following without 
>>>> success:
>>>>
>>>> 1) I've compiled the java files on the server's themselves, so I am 
>>>> sure that the correct class versions are being used
>>>> 2) The object implements java.io.Serializable, and has a generated 
>>>> serial ID from Eclipse. Incidentally, this Long value matches the 
>>>> local class serialVersionUID, so I have no idea where the 'stream' 
>>>> serialVersionUID comes from.
>>>> 3) I have the same code running on both the Tomcat servers.
>>>>
>>>> What I would like to know is where I am supposed to look next for 
>>>> some answers to this problem. Is there any more information from my 
>>>> config that would be relevant to post here?
>>>>
>>>> Thanks in advance, my first 'tomcat-users' post :)
>>>>
>>>> Dan Garland
>>>> daniel.garland@NO-SPAMtitanemail.com
>>>>
>>>> -- Stack Trace --
>>>> 25-Sep-2007 16:35:11 
>>>> org.apache.catalina.cluster.session.DeltaManager messageReceived
>>>> SEVERE: Manager []: Unable to receive message through TCP channel
>>>> java.lang.ClassNotFoundException:
>>>> com.mycompany.someSerialiazbleObject
>>>>         at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
>>>>         at java.security.AccessController.doPrivileged(Native Method)
>>>>         at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
>>>>         at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
>>>>         at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
>>>>         at 
>>>> java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
>>>>         at java.lang.Class.forName0(Native Method)
>>>>         at java.lang.Class.forName(Class.java:242)
>>>>         at 
>>>> java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:574)
>>>>         at 
>>>> org.apache.catalina.cluster.session.ReplicationStream.resolveClass(ReplicationStream.java:84)

>>>>
>>>>         at 
>>>> java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1538) 
>>>>
>>>>         at 
>>>> java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1460)
>>>>         at 
>>>> java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1693)

>>>>
>>>>         at 
>>>> java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1299)
>>>>         at 
>>>> java.io.ObjectInputStream.readObject(ObjectInputStream.java:339)
>>>>         at 
>>>> org.apache.catalina.cluster.session.DeltaRequest$AttributeInfo.readExternal(DeltaRequest.java:334)

>>>>
>>>>         at 
>>>> org.apache.catalina.cluster.session.DeltaRequest.readExternal(DeltaRequest.java:246)

>>>>
>>>>         at 
>>>> org.apache.catalina.cluster.session.DeltaManager.loadDeltaRequest(DeltaManager.java:697)

>>>>
>>>>         at 
>>>> org.apache.catalina.cluster.session.DeltaManager.handleSESSION_DELTA(DeltaManager.java:1572)

>>>>
>>>>         at 
>>>> org.apache.catalina.cluster.session.DeltaManager.messageReceived(DeltaManager.java:1522)

>>>>
>>>>         at 
>>>> org.apache.catalina.cluster.session.DeltaManager.messageDataReceived(DeltaManager.java:1271)

>>>>
>>>>         at 
>>>> org.apache.catalina.cluster.session.ClusterSessionListener.messageReceived(ClusterSessionListener.java:85)

>>>>
>>>>         at 
>>>> org.apache.catalina.cluster.tcp.SimpleTcpCluster.receive(SimpleTcpCluster.java:1167)

>>>>
>>>>         at 
>>>> org.apache.catalina.cluster.tcp.ClusterReceiverBase.messageDataReceived(ClusterReceiverBase.java:426)

>>>>
>>>>         at 
>>>> org.apache.catalina.cluster.io.ObjectReader.execute(ObjectReader.java:107)

>>>>
>>>>         at 
>>>> org.apache.catalina.cluster.tcp.TcpReplicationThread.drainChannel(TcpReplicationThread.java:138)

>>>>
>>>>         at 
>>>> org.apache.catalina.cluster.tcp.TcpReplicationThread.run(TcpReplicationThread.java:69)

>>>>


---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org


Mime
View raw message