Author: fhanik
Date: Thu Feb 23 16:34:59 2006
New Revision: 380284

URL: http://svn.apache.org/viewcvs?rev=380284&view=rev
Log:
Implemented a heart beat through the channel

Added:
    
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/cluster/group/interceptors/
    
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/cluster/group/interceptors/FragmentationInterceptor.java
    
tomcat/container/tc5.5.x/modules/ha/src/share/org/apache/catalina/cluster/session/ClusterManagerBase.java
Removed:
    
tomcat/container/tc5.5.x/modules/ha/src/share/org/apache/catalina/cluster/session/ReplicationStream.java
Modified:
    
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/cluster/ChannelInterceptor.java
    
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/cluster/ClusterSender.java
    
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/cluster/group/ChannelCoordinator.java
    
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/cluster/group/ChannelInterceptorBase.java
    
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/cluster/group/GroupChannel.java
    
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/cluster/io/ReplicationStream.java
    
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/cluster/io/XByteBuffer.java
    
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/cluster/tcp/ReplicationTransmitter.java
    
tomcat/container/tc5.5.x/modules/ha/src/share/org/apache/catalina/cluster/CatalinaCluster.java
    
tomcat/container/tc5.5.x/modules/ha/src/share/org/apache/catalina/cluster/session/DeltaManager.java
    
tomcat/container/tc5.5.x/modules/ha/src/share/org/apache/catalina/cluster/session/SimpleTcpReplicationManager.java
    
tomcat/container/tc5.5.x/modules/ha/src/share/org/apache/catalina/cluster/tcp/SimpleTcpCluster.java

Modified: 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/cluster/ChannelInterceptor.java
URL: 
http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/cluster/ChannelInterceptor.java?rev=380284&r1=380283&r2=380284&view=diff
==============================================================================
--- 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/cluster/ChannelInterceptor.java
 (original)
+++ 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/cluster/ChannelInterceptor.java
 Thu Feb 23 16:34:59 2006
@@ -38,5 +38,6 @@
     public ChannelInterceptor getPrevious();
 
     public ClusterMessage[] sendMessage(Member[] destination, ClusterMessage 
msg, int options) throws IOException;
-
+    
+    public void heartbeat();
 }

Modified: 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/cluster/ClusterSender.java
URL: 
http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/cluster/ClusterSender.java?rev=380284&r1=380283&r2=380284&view=diff
==============================================================================
--- 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/cluster/ClusterSender.java
 (original)
+++ 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/cluster/ClusterSender.java
 Thu Feb 23 16:34:59 2006
@@ -33,7 +33,7 @@
 
     public void stop();
 
-    public void backgroundProcess() ;
+    public void heartbeat() ;
 
     public void sendMessage(ClusterMessage message, Member member) throws 
java.io.IOException;
 

Modified: 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/cluster/group/ChannelCoordinator.java
URL: 
http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/cluster/group/ChannelCoordinator.java?rev=380284&r1=380283&r2=380284&view=diff
==============================================================================
--- 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/cluster/group/ChannelCoordinator.java
 (original)
+++ 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/cluster/group/ChannelCoordinator.java
 Thu Feb 23 16:34:59 2006
@@ -160,5 +160,10 @@
         this.membershipService = membershipService;
         this.membershipService.setMembershipListener(this);
     }
+    
+    public void hearbeat() {
+        if ( clusterSender!=null ) clusterSender.heartbeat();
+        super.heartbeat();
+    }
    
 }

Modified: 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/cluster/group/ChannelInterceptorBase.java
URL: 
http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/cluster/group/ChannelInterceptorBase.java?rev=380284&r1=380283&r2=380284&view=diff
==============================================================================
--- 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/cluster/group/ChannelInterceptorBase.java
 (original)
+++ 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/cluster/group/ChannelInterceptorBase.java
 Thu Feb 23 16:34:59 2006
@@ -78,7 +78,9 @@
     
     
 
-    
+    public void heartbeat() {
+        if ( getNext() != null ) getNext().heartbeat();
+    }
     
 
     

Modified: 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/cluster/group/GroupChannel.java
URL: 
http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/cluster/group/GroupChannel.java?rev=380284&r1=380283&r2=380284&view=diff
==============================================================================
--- 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/cluster/group/GroupChannel.java
 (original)
+++ 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/cluster/group/GroupChannel.java
 Thu Feb 23 16:34:59 2006
@@ -63,7 +63,9 @@
         }
     }
     
-    
+    public void heartbeat() {
+        getFirstInterceptor().heartbeat();
+    }
     
     /**
      * Send a message to one or more members in the cluster
@@ -79,11 +81,15 @@
         msg.setTimestamp(System.currentTimeMillis());
         msg.setResend(msg.FLAG_FORBIDDEN);
         try {
-            if (interceptors != null)return 
interceptors.sendMessage(destination, msg, options);
-            else return this.coordinator.sendMessage(destination, msg, 
options);
+            return getFirstInterceptor().sendMessage(destination, msg, 
options);
         }catch ( Exception x ) {
             throw new ChannelException(x);
         }
+    }
+    
+    public ChannelInterceptor getFirstInterceptor() {
+        if (interceptors != null) return interceptors;
+        else return coordinator;
     }
     
     /**

Added: 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/cluster/group/interceptors/FragmentationInterceptor.java
URL: 
http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/cluster/group/interceptors/FragmentationInterceptor.java?rev=380284&view=auto
==============================================================================
--- 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/cluster/group/interceptors/FragmentationInterceptor.java
 (added)
+++ 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/cluster/group/interceptors/FragmentationInterceptor.java
 Thu Feb 23 16:34:59 2006
@@ -0,0 +1,33 @@
+/*
+ * Copyright 1999,2004 The Apache Software Foundation.
+ * 
+ * Licensed 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
+ */
+
+package org.apache.catalina.cluster.group.interceptors;
+
+import org.apache.catalina.cluster.group.ChannelInterceptorBase;
+
+/**
+ * <p>Title: </p>
+ *
+ * <p>Description: </p>
+ *
+ * <p>Copyright: Copyright (c) 2005</p>
+ *
+ * <p>Company: </p>
+ *
+ * @author Filip Hanik
+ * @version 1.0
+ */
+public class FragmentationInterceptor extends ChannelInterceptorBase {
+}
\ No newline at end of file

Modified: 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/cluster/io/ReplicationStream.java
URL: 
http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/cluster/io/ReplicationStream.java?rev=380284&r1=380283&r2=380284&view=diff
==============================================================================
--- 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/cluster/io/ReplicationStream.java
 (original)
+++ 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/cluster/io/ReplicationStream.java
 Thu Feb 23 16:34:59 2006
@@ -39,7 +39,7 @@
     /**
      * The class loader we will use to resolve classes.
      */
-    private ClassLoader classLoader = null;
+    private ClassLoader[] classLoaders = null;
 
     /**
      * Construct a new instance of CustomObjectInputStream
@@ -50,11 +50,11 @@
      * @exception IOException if an input/output error occurs
      */
     public ReplicationStream(InputStream stream,
-                             ClassLoader classLoader)
+                             ClassLoader[] classLoaders)
         throws IOException {
 
         super(stream);
-        this.classLoader = classLoader;
+        this.classLoaders = classLoaders;
     }
 
     /**
@@ -92,8 +92,18 @@
     }
 
     public Class findExternalClass(String name)
-        throws ClassNotFoundException, IOException {
-        return Class.forName(name, false, classLoader);
+        throws ClassNotFoundException  {
+
+        ClassNotFoundException cnfe = null;
+        for (int i=0; i<classLoaders.length; i++ ) {
+            try {
+                return Class.forName(name, false, classLoaders[i]);
+            } catch ( ClassNotFoundException x ) {
+                cnfe = x;
+            } 
+        }
+        if ( cnfe != null ) throw cnfe;
+        else throw new ClassNotFoundException(name);
     }
 
 

Modified: 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/cluster/io/XByteBuffer.java
URL: 
http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/cluster/io/XByteBuffer.java?rev=380284&r1=380283&r2=380284&view=diff
==============================================================================
--- 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/cluster/io/XByteBuffer.java
 (original)
+++ 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/cluster/io/XByteBuffer.java
 Thu Feb 23 16:34:59 2006
@@ -374,7 +374,7 @@
             } else {
                 instream = new ByteArrayInputStream(data.getMessage());
             }
-            ReplicationStream stream = new 
ReplicationStream(instream,XByteBuffer.class.getClassLoader());
+            ReplicationStream stream = new ReplicationStream(instream,new 
ClassLoader[] {XByteBuffer.class.getClassLoader()});
             message = stream.readObject();
             instream.close();
         }

Modified: 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/cluster/tcp/ReplicationTransmitter.java
URL: 
http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/cluster/tcp/ReplicationTransmitter.java?rev=380284&r1=380283&r2=380284&view=diff
==============================================================================
--- 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/cluster/tcp/ReplicationTransmitter.java
 (original)
+++ 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/cluster/tcp/ReplicationTransmitter.java
 Thu Feb 23 16:34:59 2006
@@ -495,7 +495,7 @@
      * 
      * @see SimpleTcpCluster#backgroundProcess()
      */
-    public void backgroundProcess() {
+    public void heartbeat() {
         count = (count + 1) % processSenderFrequency;
         if (count == 0) {
             checkKeepAlive();

Modified: 
tomcat/container/tc5.5.x/modules/ha/src/share/org/apache/catalina/cluster/CatalinaCluster.java
URL: 
http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/ha/src/share/org/apache/catalina/cluster/CatalinaCluster.java?rev=380284&r1=380283&r2=380284&view=diff
==============================================================================
--- 
tomcat/container/tc5.5.x/modules/ha/src/share/org/apache/catalina/cluster/CatalinaCluster.java
 (original)
+++ 
tomcat/container/tc5.5.x/modules/ha/src/share/org/apache/catalina/cluster/CatalinaCluster.java
 Thu Feb 23 16:34:59 2006
@@ -23,6 +23,8 @@
 import org.apache.catalina.Manager;
 import org.apache.catalina.Valve;
 import org.apache.commons.logging.Log;
+import org.apache.catalina.cluster.io.ReplicationStream;
+import java.io.IOException;
 
 
 

Added: 
tomcat/container/tc5.5.x/modules/ha/src/share/org/apache/catalina/cluster/session/ClusterManagerBase.java
URL: 
http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/ha/src/share/org/apache/catalina/cluster/session/ClusterManagerBase.java?rev=380284&view=auto
==============================================================================
--- 
tomcat/container/tc5.5.x/modules/ha/src/share/org/apache/catalina/cluster/session/ClusterManagerBase.java
 (added)
+++ 
tomcat/container/tc5.5.x/modules/ha/src/share/org/apache/catalina/cluster/session/ClusterManagerBase.java
 Thu Feb 23 16:34:59 2006
@@ -0,0 +1,67 @@
+/*
+ * Copyright 1999,2004-2005 The Apache Software Foundation.
+ * 
+ * Licensed 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.
+ */
+
+package org.apache.catalina.cluster.session;
+
+import org.apache.catalina.cluster.ClusterManager;
+import java.beans.PropertyChangeListener;
+import org.apache.catalina.Lifecycle;
+import org.apache.catalina.session.ManagerBase;
+import org.apache.catalina.Loader;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import org.apache.catalina.cluster.io.ReplicationStream;
+
+/**
+ * 
+ * @author Filip Hanik
+ * @version $Revision: 380100 $ $Date: 2006-02-23 06:08:14 -0600 (Thu, 23 Feb 
2006) $
+ */
+
+public abstract class ClusterManagerBase extends ManagerBase implements 
Lifecycle, PropertyChangeListener, ClusterManager{
+    /**
+     * Open Stream and use correct ClassLoader (Container) Switch
+     * ThreadClassLoader
+     * 
+     * @param data
+     * @return The object input stream
+     * @throws IOException
+     */
+    public ReplicationStream getReplicationStream(byte[] data) throws 
IOException {
+        ByteArrayInputStream fis =null;
+        ReplicationStream ois = null;
+        Loader loader = null;
+        ClassLoader classLoader = null;
+        //fix to be able to run the DeltaManager
+        //stand alone without a container.
+        //use the Threads context class loader
+        if (container != null)
+            loader = container.getLoader();
+        if (loader != null)
+            classLoader = loader.getClassLoader();
+        else
+            classLoader = Thread.currentThread().getContextClassLoader();
+        //end fix
+        fis = new ByteArrayInputStream(data);
+        if ( classLoader == Thread.currentThread().getContextClassLoader() ) {
+            ois = new ReplicationStream(fis, new ClassLoader[] {classLoader});
+        } else {
+            ois = new ReplicationStream(fis, new ClassLoader[] 
{classLoader,Thread.currentThread().getContextClassLoader()});
+        }
+        return ois;
+    }    
+
+}
\ No newline at end of file

Modified: 
tomcat/container/tc5.5.x/modules/ha/src/share/org/apache/catalina/cluster/session/DeltaManager.java
URL: 
http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/ha/src/share/org/apache/catalina/cluster/session/DeltaManager.java?rev=380284&r1=380283&r2=380284&view=diff
==============================================================================
--- 
tomcat/container/tc5.5.x/modules/ha/src/share/org/apache/catalina/cluster/session/DeltaManager.java
 (original)
+++ 
tomcat/container/tc5.5.x/modules/ha/src/share/org/apache/catalina/cluster/session/DeltaManager.java
 Thu Feb 23 16:34:59 2006
@@ -50,6 +50,7 @@
 import org.apache.catalina.util.LifecycleSupport;
 import org.apache.catalina.util.StringManager;
 import org.apache.catalina.core.StandardContext;
+import org.apache.catalina.cluster.io.ReplicationStream;
 
 /**
  * The DeltaManager manages replicated sessions by only replicating the deltas
@@ -70,8 +71,7 @@
  * @version $Revision: 380100 $ $Date: 2006-02-23 06:08:14 -0600 (Thu, 23 Feb 
2006) $
  */
 
-public class DeltaManager extends ManagerBase implements Lifecycle,
-        PropertyChangeListener, ClusterManager {
+public class DeltaManager extends ClusterManagerBase{
 
     // ---------------------------------------------------- Security Classes
 
@@ -676,22 +676,7 @@
      */
     protected DeltaRequest loadDeltaRequest(DeltaSession session, byte[] data)
             throws ClassNotFoundException, IOException {
-        ByteArrayInputStream fis = null;
-        ReplicationStream ois = null;
-        Loader loader = null;
-        ClassLoader classLoader = null;
-        //fix to be able to run the DeltaManager
-        //stand alone without a container.
-        //use the Threads context class loader
-        if (container != null)
-            loader = container.getLoader();
-        if (loader != null)
-            classLoader = loader.getClassLoader();
-        else
-            classLoader = Thread.currentThread().getContextClassLoader();
-        //end fix
-        fis = new ByteArrayInputStream(data);
-        ois = new ReplicationStream(fis, classLoader);
+        ReplicationStream ois = getReplicationStream(data);
         session.getDeltaRequest().readExternal(ois);
         ois.close();
         return session.getDeltaRequest();
@@ -730,12 +715,11 @@
         // Initialize our internal data structures
         //sessions.clear(); //should not do this
         // Open an input stream to the specified pathname, if any
-        ClassLoader originalLoader = Thread.currentThread()
-                .getContextClassLoader();
+        ClassLoader originalLoader = 
Thread.currentThread().getContextClassLoader();
         ObjectInputStream ois = null;
         // Load the previously unloaded active sessions
         try {
-            ois = openDeserializeObjectStream(data);
+            ois = getReplicationStream(data);
             Integer count = (Integer) ois.readObject();
             int n = count.intValue();
             for (int i = 0; i < n; i++) {
@@ -788,54 +772,7 @@
 
     }
 
-    /**
-     * Open Stream and use correct ClassLoader (Container) Switch
-     * ThreadClassLoader
-     * 
-     * @param data
-     * @return The object input stream
-     * @throws IOException
-     */
-    protected ObjectInputStream openDeserializeObjectStream(byte[] data) 
throws IOException {
-        ObjectInputStream ois = null;
-        ByteArrayInputStream fis = null;
-        try {
-            Loader loader = null;
-            ClassLoader classLoader = null;
-            fis = new ByteArrayInputStream(data);
-            BufferedInputStream bis = new BufferedInputStream(fis);
-            if (container != null)
-                loader = container.getLoader();
-            if (loader != null)
-                classLoader = loader.getClassLoader();
-            if (classLoader != null) {
-                if (log.isTraceEnabled())
-                    log.trace(sm.getString(
-                            "deltaManager.loading.withContextClassLoader",
-                            getName()));
-                ois = new CustomObjectInputStream(bis, classLoader);
-                Thread.currentThread().setContextClassLoader(classLoader);
-            } else {
-                if (log.isTraceEnabled())
-                    log.trace(sm.getString(
-                            "deltaManager.loading.withoutClassLoader",
-                            getName()));
-                ois = new ObjectInputStream(bis);
-            }
-        } catch (IOException e) {
-            log.error(sm.getString("deltaManager.loading.ioe", e), e);
-            if (ois != null) {
-                try {
-                    ois.close();
-                } catch (IOException f) {
-                    ;
-                }
-                ois = null;
-            }
-            throw e;
-        }
-        return ois;
-    }
+    
 
     /**
      * Save any currently active sessions in the appropriate persistence

Modified: 
tomcat/container/tc5.5.x/modules/ha/src/share/org/apache/catalina/cluster/session/SimpleTcpReplicationManager.java
URL: 
http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/ha/src/share/org/apache/catalina/cluster/session/SimpleTcpReplicationManager.java?rev=380284&r1=380283&r2=380284&view=diff
==============================================================================
--- 
tomcat/container/tc5.5.x/modules/ha/src/share/org/apache/catalina/cluster/session/SimpleTcpReplicationManager.java
 (original)
+++ 
tomcat/container/tc5.5.x/modules/ha/src/share/org/apache/catalina/cluster/session/SimpleTcpReplicationManager.java
 Thu Feb 23 16:34:59 2006
@@ -25,6 +25,9 @@
 import org.apache.catalina.cluster.Member;
 import org.apache.catalina.realm.GenericPrincipal;
 import org.apache.catalina.session.StandardManager;
+import org.apache.catalina.cluster.io.ReplicationStream;
+import java.io.ByteArrayInputStream;
+import org.apache.catalina.Loader;
 
 /**
  * Title:        Tomcat Session Replication for Tomcat 4.0 <BR>
@@ -359,6 +362,41 @@
         }
         return null;
     }
+    
+    /**
+     * Open Stream and use correct ClassLoader (Container) Switch
+     * ThreadClassLoader
+     * 
+     * @param data
+     * @return The object input stream
+     * @throws IOException
+     */
+    public ReplicationStream getReplicationStream(byte[] data) throws 
IOException {
+        ByteArrayInputStream fis =null;
+        ReplicationStream ois = null;
+        Loader loader = null;
+        ClassLoader classLoader = null;
+        //fix to be able to run the DeltaManager
+        //stand alone without a container.
+        //use the Threads context class loader
+        if (container != null)
+            loader = container.getLoader();
+        if (loader != null)
+            classLoader = loader.getClassLoader();
+        else
+            classLoader = Thread.currentThread().getContextClassLoader();
+        //end fix
+        fis = new ByteArrayInputStream(data);
+        if ( classLoader == Thread.currentThread().getContextClassLoader() ) {
+            ois = new ReplicationStream(fis, new ClassLoader[] {classLoader});
+        } else {
+            ois = new ReplicationStream(fis, new ClassLoader[] 
{classLoader,Thread.currentThread().getContextClassLoader()});
+        }
+        return ois;
+    }    
+
+
+    
 
     /**
      * Reinstantiates a serialized session from the data passed in.
@@ -373,8 +411,7 @@
     {
         try
         {
-            java.io.ByteArrayInputStream session_data = new 
java.io.ByteArrayInputStream(data);
-            ReplicationStream session_in = new 
ReplicationStream(session_data,container.getLoader().getClassLoader());
+            ReplicationStream session_in = getReplicationStream(data);
 
             Session session = sessionId!=null?this.findSession(sessionId):null;
             boolean isNew = (session==null);

Modified: 
tomcat/container/tc5.5.x/modules/ha/src/share/org/apache/catalina/cluster/tcp/SimpleTcpCluster.java
URL: 
http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/ha/src/share/org/apache/catalina/cluster/tcp/SimpleTcpCluster.java?rev=380284&r1=380283&r2=380284&view=diff
==============================================================================
--- 
tomcat/container/tc5.5.x/modules/ha/src/share/org/apache/catalina/cluster/tcp/SimpleTcpCluster.java
 (original)
+++ 
tomcat/container/tc5.5.x/modules/ha/src/share/org/apache/catalina/cluster/tcp/SimpleTcpCluster.java
 Thu Feb 23 16:34:59 2006
@@ -54,6 +54,9 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.tomcat.util.IntrospectionUtils;
+import org.apache.catalina.cluster.io.ReplicationStream;
+import java.io.ByteArrayInputStream;
+import org.apache.catalina.Loader;
 
 /**
  * A <b>Cluster </b> implementation using simple multicast. Responsible for
@@ -489,8 +492,7 @@
                     + " using class " + getManagerClassName());
         Manager manager = null;
         try {
-            manager = (Manager) getClass().getClassLoader().loadClass(
-                    getManagerClassName()).newInstance();
+            manager = (Manager) 
getClass().getClassLoader().loadClass(getManagerClassName()).newInstance();
         } catch (Exception x) {
             log.error("Unable to load class for replication manager", x);
             manager = new org.apache.catalina.cluster.session.DeltaManager();
@@ -584,8 +586,7 @@
     public Manager getManager(String name) {
         return (Manager) managers.get(name);
     }
-
- 
+    
     // ------------------------------------------------------ Lifecycle Methods
 
     /**
@@ -596,10 +597,9 @@
      * @see ReplicationTransmitter#backgroundProcess()
      */
     public void backgroundProcess() {
-        if (clusterDeployer != null)
-            clusterDeployer.backgroundProcess();
-//        if (this.channel.getClusterSender() != null)
-//            this.channel.getClusterSender().backgroundProcess();
+        if (clusterDeployer != null) clusterDeployer.backgroundProcess();
+        //send a heartbeat through the channel
+        heartbeat();
     }
 
     /**
@@ -668,9 +668,12 @@
         // Notify our interested LifecycleListeners
         lifecycle.fireLifecycleEvent(BEFORE_START_EVENT, this);
         try {
+            if ( clusterDeployer != null ) clusterDeployer.setCluster(this);
             this.registerClusterValve();
             channel.addInterceptor(this);
             channel.start(channel.DEFAULT);
+            if (clusterDeployer != null) clusterDeployer.start();
+
             this.started = true;
             // Notify our interested LifecycleListeners
             lifecycle.fireLifecycleEvent(AFTER_START_EVENT, this);
@@ -742,11 +745,10 @@
         // Notify our interested LifecycleListeners
         lifecycle.fireLifecycleEvent(BEFORE_STOP_EVENT, this);
 
-        if (clusterDeployer != null) {
-            clusterDeployer.stop();
-        }
+        if (clusterDeployer != null) clusterDeployer.stop();
         this.managers.clear();
         try {
+            if ( clusterDeployer != null ) clusterDeployer.setCluster(null);
             channel.stop(ClusterChannel.DEFAULT);
             this.unregisterClusterValve();
         } catch (Exception x) {



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to