tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Stephane DUCAS <sduc...@gmail.com>
Subject Re: Clustering probleme
Date Fri, 20 Feb 2009 14:01:34 GMT
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 <sducas1@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 <devlists@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-unsubscribe@tomcat.apache.org
>> For additional commands, e-mail: users-help@tomcat.apache.org
>>
>>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message