Hello all, I've been debugging this for a while:
It happen when trying to deserialize: org.jboss.seam.CONVERSATION#48$entityManager : It seems the seam framework put a JPA entityManager in session... I while post that to seam forums also.. The EntityManager implementation is serializable so it should work? THX 2009/2/20 Stephane DUCAS <sduc...@gmail.com> > 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 >> >> >