Hello Fillip No that's impossible because the same war file is deployed on the two instances.
2009/2/20 Filip Hanik - Dev Lists <devli...@hanik.com> > It's a serialization error. One of the attributes in your session that was > serialized on serverA, failed to deserialize on serverB > Are you possible running different versions of the same class on the two > servers? > > Filip > > > Stephane DUCAS wrote: > >> Hello I've tryed vertical clustered tomcat installation (two instances) >> but >> I have an issue when configuraiong it with: >> >> <ClusterListener >> className="org.apache.catalina.ha.session.ClusterSessionListener"/> >> >> When I comment out this line I have no problem but session is not >> recovered >> when one node crash >> >> When I put this line, loadbalancing don't work (only one node is really >> hitted) I have this exception in log files of the unhitted node: >> >> java.lang.IllegalStateException: unread block data >> at >> >> java.io.ObjectInputStream$BlockDataInputStream.setBlockDataMode(ObjectInputStream.java:2377) >> at >> java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1361) >> at >> java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947) >> at >> java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) >> at >> java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) >> at >> java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) >> at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) >> at >> >> org.apache.catalina.ha.session.DeltaRequest$AttributeInfo.readExternal(DeltaRequest.java:361) >> at >> >> org.apache.catalina.ha.session.DeltaRequest.readExternal(DeltaRequest.java:255) >> at >> >> org.apache.catalina.ha.session.DeltaManager.deserializeDeltaRequest(DeltaManager.java:621) >> at >> >> org.apache.catalina.ha.session.DeltaManager.handleSESSION_DELTA(DeltaManager.java:1379) >> at >> >> org.apache.catalina.ha.session.DeltaManager.messageReceived(DeltaManager.java:1334) >> at >> >> org.apache.catalina.ha.session.DeltaManager.messageDataReceived(DeltaManager.java:1093) >> at >> >> org.apache.catalina.ha.session.ClusterSessionListener.messageReceived(ClusterSessionListener.java:87) >> at >> >> org.apache.catalina.ha.tcp.SimpleTcpCluster.messageReceived(SimpleTcpCluster.java:899) >> at >> >> org.apache.catalina.ha.tcp.SimpleTcpCluster.messageReceived(SimpleTcpCluster.java:880) >> at >> >> org.apache.catalina.tribes.group.GroupChannel.messageReceived(GroupChannel.java:269) >> at >> >> org.apache.catalina.tribes.group.ChannelInterceptorBase.messageReceived(ChannelInterceptorBase.java:79) >> at >> >> org.apache.catalina.tribes.group.interceptors.TcpFailureDetector.messageReceived(TcpFailureDetector.java:110) >> at >> >> org.apache.catalina.tribes.group.ChannelInterceptorBase.messageReceived(ChannelInterceptorBase.java:79) >> at >> >> org.apache.catalina.tribes.group.ChannelInterceptorBase.messageReceived(ChannelInterceptorBase.java:79) >> at >> >> org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor.messageReceived(ThroughputInterceptor.java:86) >> at >> >> org.apache.catalina.tribes.group.ChannelInterceptorBase.messageReceived(ChannelInterceptorBase.java:79) >> at >> >> org.apache.catalina.tribes.group.ChannelCoordinator.messageReceived(ChannelCoordinator.java:241) >> at >> >> org.apache.catalina.tribes.transport.ReceiverBase.messageDataReceived(ReceiverBase.java:225) >> at >> >> org.apache.catalina.tribes.transport.nio.NioReplicationTask.drainChannel(NioReplicationTask.java:188) >> at >> >> org.apache.catalina.tribes.transport.nio.NioReplicationTask.run(NioReplicationTask.java:91) >> at >> >> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885) >> at >> >> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907) >> at java.lang.Thread.run(Thread.java:619) >> >> >> I've tryed with sun jdk's 1.5, 1.6 and open jdk (both 64bit and 32bit) but >> I >> have always the same.. >> >> I running with mod_jk and sticky_session=true.. >> >> Here are my conf files: >> >> Server.xml (node1 and node2 are the same except jvMRoute and some ports): >> >> <?xml version='1.0' encoding='utf-8'?> >> <!-- >> Licensed to the Apache Software Foundation (ASF) under one or more >> contributor license agreements. See the NOTICE file distributed with >> this work for additional information regarding copyright ownership. >> The ASF licenses this file to You under the Apache License, Version 2.0 >> (the "License"); you may not use this file except in compliance with >> the License. You may obtain a copy of the License at >> >> http://www.apache.org/licenses/LICENSE-2.0 >> >> Unless required by applicable law or agreed to in writing, software >> distributed under the License is distributed on an "AS IS" BASIS, >> WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. >> See the License for the specific language governing permissions and >> limitations under the License. >> --> >> <!-- Note: A "Server" is not itself a "Container", so you may not >> define subcomponents such as "Valves" at this level. >> Documentation at /docs/config/server.html >> --> >> <Server port="10005" shutdown="SHUTDOWN"> >> >> <!--APR library loader. Documentation at /docs/apr.html --> >> <Listener className="org.apache.catalina.core.AprLifecycleListener" >> SSLEngine="on" /> >> <!--Initialize Jasper prior to webapps are loaded. Documentation at >> /docs/jasper-howto.html --> >> <Listener className="org.apache.catalina.core.JasperListener" /> >> <!-- JMX Support for the Tomcat server. Documentation at >> /docs/non-existent.html --> >> <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" >> /> >> <Listener >> className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> >> >> <!-- Global JNDI resources >> Documentation at /docs/jndi-resources-howto.html >> --> >> <GlobalNamingResources> >> <!-- Editable user database that can also be used by >> UserDatabaseRealm to authenticate users >> --> >> <Resource name="UserDatabase" auth="Container" >> type="org.apache.catalina.UserDatabase" >> description="User database that can be updated and saved" >> factory="org.apache.catalina.users.MemoryUserDatabaseFactory" >> pathname="conf/tomcat-users.xml" /> >> </GlobalNamingResources> >> >> <!-- A "Service" is a collection of one or more "Connectors" that share >> a single "Container" Note: A "Service" is not itself a "Container", >> so you may not define subcomponents such as "Valves" at this level. >> Documentation at /docs/config/service.html >> --> >> <Service name="Catalina"> >> >> <!--The connectors can use a shared executor, you can define one or >> more >> named thread pools--> >> <!-- >> <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" >> maxThreads="150" minSpareThreads="4"/> >> --> >> <!-- A "Connector" represents an endpoint by which requests are >> received >> and responses are returned. Documentation at : >> Java HTTP Connector: /docs/config/http.html (blocking & >> non-blocking) >> Java AJP Connector: /docs/config/ajp.html >> APR (HTTP/AJP) Connector: /docs/apr.html >> Define a non-SSL HTTP/1.1 Connector on port 8080 >> --> >> <Connector port="10080" protocol="HTTP/1.1" >> connectionTimeout="20000" >> redirectPort="10443" /> >> <!-- A "Connector" using the shared thread pool--> >> <!-- >> <Connector executor="tomcatThreadPool" >> port="8080" protocol="HTTP/1.1" >> connectionTimeout="20000" >> redirectPort="8443" /> >> --> >> <!-- Define a SSL HTTP/1.1 Connector on port 8443 >> This connector uses the JSSE configuration, when using APR, the >> connector should be using the OpenSSL style configuration >> described in the APR documentation --> >> <!-- >> <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" >> maxThreads="150" scheme="https" secure="true" >> clientAuth="false" sslProtocol="TLS" /> >> --> >> >> <!-- Define an AJP 1.3 Connector on port 8009 --> >> <Connector port="10009" protocol="AJP/1.3" redirectPort="10443" /> >> >> >> <!-- An Engine represents the entry point (within Catalina) that >> processes >> every request. The Engine implementation for Tomcat stand alone >> analyzes the HTTP headers included with the request, and passes >> them >> on to the appropriate Host (virtual host). >> Documentation at /docs/config/engine.html --> >> >> <!-- You should set jvmRoute to support load-balancing via AJP ie : >> <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1"> >> --> >> <Engine name="Catalina" defaultHost="localhost" jvmRoute="node2"> >> >> <!--For clustering, please take a look at documentation at: >> /docs/cluster-howto.html (simple how to) >> /docs/config/cluster.html (reference documentation) --> >> <!----> >> <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" >> channelSendOptions="6"> >> >> <Manager className="org.apache.catalina.ha.session.BackupManager" >> expireSessionsOnShutdown="false" >> notifyListenersOnReplication="true" >> mapSendOptions="6"/> >> >> >> >> <Manager className="org.apache.catalina.ha.session.DeltaManager" >> expireSessionsOnShutdown="false" >> >> notifyListenersOnReplication="true" mapSendOptions="6"/> >> <Channel >> className="org.apache.catalina.tribes.group.GroupChannel"> >> <Membership >> className="org.apache.catalina.tribes.membership.McastService" >> address="228.0.0.4" >> port="45564" >> frequency="500" >> dropTime="3000"/> >> <Receiver >> className="org.apache.catalina.tribes.transport.nio.NioReceiver" >> address="auto" >> port="4002" >> 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"/> >> <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"/> >> >> <Deployer >> className="org.apache.catalina.ha.deploy.FarmWarDeployer" >> tempDir="/tmp/war-temp/" >> deployDir="/tmp/war-deploy/" >> watchDir="/tmp/war-listen/" >> watchEnabled="false"/> >> >> <ClusterListener >> >> className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/> >> <!-- <ClusterListener >> className="org.apache.catalina.ha.session.ClusterSessionListener"/> --> >> >> </Cluster> >> >> <!-- The request dumper valve dumps useful debugging information >> about >> the request and response data received and sent by Tomcat. >> Documentation at: /docs/config/valve.html --> >> <!-- --> >> <Valve className="org.apache.catalina.valves.RequestDumperValve"/> >> >> >> <!-- This Realm uses the UserDatabase configured in the global JNDI >> resources under the key "UserDatabase". Any edits >> that are performed against this UserDatabase are immediately >> available for use by the Realm. --> >> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" >> resourceName="UserDatabase"/> >> >> <!-- Define the default virtual host >> Note: XML Schema validation will not work with Xerces 2.2. >> --> >> <Host name="localhost" appBase="webapps" >> unpackWARs="true" autoDeploy="true" >> xmlValidation="false" xmlNamespaceAware="false"> >> >> >> <!-- SingleSignOn valve, share authentication between web >> applications >> Documentation at: /docs/config/valve.html --> >> <!-- >> <Valve className="org.apache.catalina.authenticator.SingleSignOn" >> /> >> --> >> >> <!-- Access log processes all example. >> Documentation at: /docs/config/valve.html --> >> <!-- >> <Valve className="org.apache.catalina.valves.AccessLogValve" >> directory="logs" >> prefix="localhost_access_log." suffix=".txt" >> pattern="common" >> resolveHosts="false"/> >> --> >> >> </Host> >> </Engine> >> </Service> >> </Server> >> >> >> AND >> >> worker.properties: >> >> #La liste des tomcat qui rentre dans notre load-balancer, plus l'alias sur >> le load-balancer >> worker.list=loadbalancer,node1,node2 >> >> #La config du load-balencer >> worker.loadbalancer.type=lb >> worker.loadbalancer.balanced_workers=node1,node2 >> worker.loadbalancer.sticky_session=1 >> >> #Le premier tomcat >> worker.node1.type=ajp13 >> worker.node1.host=127.0.0.1 >> worker.node1.port=9009 >> worker.node1.lbfactor=10 >> >> #Le second Tomcat, attention soit l'hôte soit le port doivent différés >> worker.node2.type=ajp13 >> worker.node2.host=127.0.0.1 >> worker.node2.port=10009 >> worker.node2.lbfactor=10 >> >> >> I really need to set up this vertical cluster, THX in advance! >> >> >> > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org > For additional commands, e-mail: users-h...@tomcat.apache.org > >