Author: fhanik
Date: Thu Aug  9 16:46:47 2007
New Revision: 564428

URL: http://svn.apache.org/viewvc?view=rev&rev=564428
Log:
backport from trunk, prevent premature session expiration

Modified:
    
tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/context/ReplicatedContext.java
    tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/session/BackupManager.java
    
tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/AbstractReplicatedMap.java
    
tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/LazyReplicatedMap.java
    
tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/ReplicatedMap.java

Modified: 
tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/context/ReplicatedContext.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/context/ReplicatedContext.java?view=diff&rev=564428&r1=564427&r2=564428
==============================================================================
--- 
tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/context/ReplicatedContext.java 
(original)
+++ 
tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/context/ReplicatedContext.java 
Thu Aug  9 16:46:47 2007
@@ -36,12 +36,14 @@
 import java.util.Enumeration;
 import java.util.concurrent.ConcurrentHashMap;
 import org.apache.catalina.util.Enumerator;
+import org.apache.catalina.tribes.tipis.AbstractReplicatedMap.MapOwner;
+import org.apache.catalina.ha.session.DeltaSession;
 
 /**
  * @author Filip Hanik
  * @version 1.0
  */
-public class ReplicatedContext extends StandardContext implements 
LifecycleListener {
+public class ReplicatedContext extends StandardContext implements 
LifecycleListener,MapOwner {
     private int mapSendOptions = Channel.SEND_OPTIONS_DEFAULT;
     public static org.apache.juli.logging.Log log = 
org.apache.juli.logging.LogFactory.getLog( ReplicatedContext.class );
     protected boolean startComplete = false;
@@ -193,5 +195,10 @@
 
         }
     }
+    
+    public void objectMadePrimay(Object key, Object value) {
+        //noop
+    }
+
 
 }

Modified: 
tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/session/BackupManager.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/session/BackupManager.java?view=diff&rev=564428&r1=564427&r2=564428
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/session/BackupManager.java 
(original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/session/BackupManager.java 
Thu Aug  9 16:46:47 2007
@@ -28,12 +28,14 @@
 import org.apache.catalina.tribes.Channel;
 import org.apache.catalina.tribes.io.ReplicationStream;
 import org.apache.catalina.tribes.tipis.LazyReplicatedMap;
+import org.apache.catalina.tribes.tipis.AbstractReplicatedMap.MapOwner;
+import org.apache.catalina.tribes.tipis.AbstractReplicatedMap;
 
 /**
  [EMAIL PROTECTED] Filip Hanik
  [EMAIL PROTECTED] 1.0
  */
-public class BackupManager extends StandardManager implements ClusterManager
+public class BackupManager extends StandardManager implements ClusterManager, 
MapOwner
 {
     public static org.apache.juli.logging.Log log = 
org.apache.juli.logging.LogFactory.getLog( BackupManager.class );
 
@@ -133,6 +135,15 @@
 //=========================================================================
 // OVERRIDE THESE METHODS TO IMPLEMENT THE REPLICATION
 //=========================================================================
+    public void objectMadePrimay(Object key, Object value) {
+        if (value!=null && value instanceof DeltaSession) {
+            DeltaSession session = (DeltaSession)value;
+            synchronized (session) {
+                session.access();
+                session.endAccess();
+            }
+        }
+    }
 
     public Session createEmptySession() {
         return new DeltaSession(this);

Modified: 
tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/AbstractReplicatedMap.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/AbstractReplicatedMap.java?view=diff&rev=564428&r1=564427&r2=564428
==============================================================================
--- 
tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/AbstractReplicatedMap.java
 (original)
+++ 
tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/AbstractReplicatedMap.java
 Thu Aug  9 16:46:47 2007
@@ -113,7 +113,7 @@
     /**
      * The owner of this map, ala a SessionManager for example
      */
-    protected transient Object mapOwner;
+    protected transient MapOwner mapOwner;
     /**
      * External class loaders if serialization and deserialization is to be 
performed successfully.
      */
@@ -137,7 +137,14 @@
      * Readable string of the mapContextName value
      */
     protected transient String mapname = "";
+
+//------------------------------------------------------------------------------
+//              map owner interface
+//------------------------------------------------------------------------------
     
+    public static interface MapOwner {
+        public void objectMadePrimay(Object key, Object value);
+    }
 
 
//------------------------------------------------------------------------------
 //              CONSTRUCTORS
@@ -152,7 +159,7 @@
      * @param loadFactor float - load factor, see HashMap
      * @param cls - a list of classloaders to be used for deserialization of 
objects.
      */
-    public AbstractReplicatedMap(Object owner,
+    public AbstractReplicatedMap(MapOwner owner,
                                  Channel channel, 
                                  long timeout, 
                                  String mapContextName, 
@@ -185,7 +192,7 @@
      * @param channelSendOptions int
      * @param cls ClassLoader[]
      */
-    protected void init(Object owner, Channel channel, String mapContextName, 
long timeout, int channelSendOptions,ClassLoader[] cls) {
+    protected void init(MapOwner owner, Channel channel, String 
mapContextName, long timeout, int channelSendOptions,ClassLoader[] cls) {
         log.info("Initializing AbstractReplicatedMap with context 
name:"+mapContextName);
         this.mapOwner = owner;
         this.externalLoaders = cls;
@@ -741,6 +748,8 @@
                     entry.setProxy(false);
                     Member[] backup = publishEntryInfo(entry.getKey(), 
entry.getValue());
                     entry.setBackupNodes(backup);
+                    mapOwner.objectMadePrimay(entry.getKey(),entry.getValue());
+                    
                 } catch (ChannelException x) {
                     log.error("Unable to relocate[" + entry.getKey() + "] to a 
new backup node", x);
                 }
@@ -1420,7 +1429,7 @@
         return stateTransferred;
     }
 
-    public Object getMapOwner() {
+    public MapOwner getMapOwner() {
         return mapOwner;
     }
 
@@ -1436,7 +1445,7 @@
         return accessTimeout;
     }
 
-    public void setMapOwner(Object mapOwner) {
+    public void setMapOwner(MapOwner mapOwner) {
         this.mapOwner = mapOwner;
     }
 

Modified: 
tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/LazyReplicatedMap.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/LazyReplicatedMap.java?view=diff&rev=564428&r1=564427&r2=564428
==============================================================================
--- 
tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/LazyReplicatedMap.java
 (original)
+++ 
tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/LazyReplicatedMap.java
 Thu Aug  9 16:46:47 2007
@@ -26,6 +26,7 @@
 import org.apache.catalina.tribes.group.RpcCallback;
 import org.apache.catalina.tribes.util.Arrays;
 import org.apache.catalina.tribes.UniqueId;
+import org.apache.catalina.tribes.tipis.AbstractReplicatedMap.MapOwner;
 
 /**
  * A smart implementation of a stateful replicated map. uses primary/secondary 
backup strategy. 
@@ -68,7 +69,7 @@
     implements RpcCallback, ChannelListener, MembershipListener {
     protected static org.apache.juli.logging.Log log = 
org.apache.juli.logging.LogFactory.getLog(LazyReplicatedMap.class);
     
-    
+
     
 
//------------------------------------------------------------------------------
    
 //              CONSTRUCTORS / DESTRUCTORS
@@ -81,7 +82,7 @@
          * @param initialCapacity int - the size of this map, see HashMap
          * @param loadFactor float - load factor, see HashMap
          */
-        public LazyReplicatedMap(Object owner, Channel channel, long timeout, 
String mapContextName, int initialCapacity, float loadFactor, ClassLoader[] 
cls) {
+        public LazyReplicatedMap(MapOwner owner, Channel channel, long 
timeout, String mapContextName, int initialCapacity, float loadFactor, 
ClassLoader[] cls) {
             
super(owner,channel,timeout,mapContextName,initialCapacity,loadFactor, 
Channel.SEND_OPTIONS_DEFAULT,cls);
         }
 
@@ -92,7 +93,7 @@
          * @param mapContextName String - unique name for this map, to allow 
multiple maps per channel
          * @param initialCapacity int - the size of this map, see HashMap
          */
-        public LazyReplicatedMap(Object owner, Channel channel, long timeout, 
String mapContextName, int initialCapacity, ClassLoader[] cls) {
+        public LazyReplicatedMap(MapOwner owner, Channel channel, long 
timeout, String mapContextName, int initialCapacity, ClassLoader[] cls) {
             super(owner, channel,timeout,mapContextName,initialCapacity, 
LazyReplicatedMap.DEFAULT_LOAD_FACTOR, Channel.SEND_OPTIONS_DEFAULT, cls);
         }
 
@@ -102,7 +103,7 @@
          * @param timeout long - timeout for RPC messags
          * @param mapContextName String - unique name for this map, to allow 
multiple maps per channel
          */
-        public LazyReplicatedMap(Object owner, Channel channel, long timeout, 
String mapContextName, ClassLoader[] cls) {
+        public LazyReplicatedMap(MapOwner owner, Channel channel, long 
timeout, String mapContextName, ClassLoader[] cls) {
             super(owner, channel,timeout,mapContextName, 
LazyReplicatedMap.DEFAULT_INITIAL_CAPACITY,LazyReplicatedMap.DEFAULT_LOAD_FACTOR,Channel.SEND_OPTIONS_DEFAULT,
 cls);
         }
 

Modified: 
tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/ReplicatedMap.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/ReplicatedMap.java?view=diff&rev=564428&r1=564427&r2=564428
==============================================================================
--- 
tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/ReplicatedMap.java 
(original)
+++ 
tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/ReplicatedMap.java 
Thu Aug  9 16:46:47 2007
@@ -24,6 +24,7 @@
 import org.apache.catalina.tribes.Member;
 import org.apache.catalina.tribes.MembershipListener;
 import org.apache.catalina.tribes.group.RpcCallback;
+import org.apache.catalina.tribes.tipis.AbstractReplicatedMap.MapOwner;
 
 /**
  * All-to-all replication for a hash map implementation. Each node in the 
cluster will carry an identical 
@@ -64,7 +65,7 @@
      * @param initialCapacity int - the size of this map, see HashMap
      * @param loadFactor float - load factor, see HashMap
      */
-    public ReplicatedMap(Object owner, Channel channel, long timeout, String 
mapContextName, int initialCapacity,float loadFactor, ClassLoader[] cls) {
+    public ReplicatedMap(MapOwner owner, Channel channel, long timeout, String 
mapContextName, int initialCapacity,float loadFactor, ClassLoader[] cls) {
         super(owner,channel, timeout, mapContextName, initialCapacity, 
loadFactor, Channel.SEND_OPTIONS_DEFAULT, cls);
     }
 
@@ -75,7 +76,7 @@
      * @param mapContextName String - unique name for this map, to allow 
multiple maps per channel
      * @param initialCapacity int - the size of this map, see HashMap
      */
-    public ReplicatedMap(Object owner, Channel channel, long timeout, String 
mapContextName, int initialCapacity, ClassLoader[] cls) {
+    public ReplicatedMap(MapOwner owner, Channel channel, long timeout, String 
mapContextName, int initialCapacity, ClassLoader[] cls) {
         super(owner,channel, timeout, mapContextName, initialCapacity, 
AbstractReplicatedMap.DEFAULT_LOAD_FACTOR,Channel.SEND_OPTIONS_DEFAULT, cls);
     }
 
@@ -85,7 +86,7 @@
      * @param timeout long - timeout for RPC messags
      * @param mapContextName String - unique name for this map, to allow 
multiple maps per channel
      */
-    public ReplicatedMap(Object owner, Channel channel, long timeout, String 
mapContextName, ClassLoader[] cls) {
+    public ReplicatedMap(MapOwner owner, Channel channel, long timeout, String 
mapContextName, ClassLoader[] cls) {
         super(owner, channel, timeout, 
mapContextName,AbstractReplicatedMap.DEFAULT_INITIAL_CAPACITY, 
AbstractReplicatedMap.DEFAULT_LOAD_FACTOR, Channel.SEND_OPTIONS_DEFAULT, cls);
     }
 



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

Reply via email to