[Jboss-cvs] JBossAS SVN: r56305 - branches/Branch_4_0/tomcat/src/main/org/jboss/web/tomcat/tc5/session

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Sat Aug 26 17:23:31 EDT 2006


Author: bstansberry at jboss.com
Date: 2006-08-26 17:23:31 -0400 (Sat, 26 Aug 2006)
New Revision: 56305

Modified:
   branches/Branch_4_0/tomcat/src/main/org/jboss/web/tomcat/tc5/session/CacheListener.java
Log:
Optimizations

Modified: branches/Branch_4_0/tomcat/src/main/org/jboss/web/tomcat/tc5/session/CacheListener.java
===================================================================
--- branches/Branch_4_0/tomcat/src/main/org/jboss/web/tomcat/tc5/session/CacheListener.java	2006-08-26 20:40:10 UTC (rev 56304)
+++ branches/Branch_4_0/tomcat/src/main/org/jboss/web/tomcat/tc5/session/CacheListener.java	2006-08-26 21:23:31 UTC (rev 56305)
@@ -24,6 +24,7 @@
 import org.jboss.cache.Fqn;
 import org.jboss.cache.TreeCache;
 import org.jboss.cache.TreeCacheListener;
+import org.jboss.cache.buddyreplication.BuddyManager;
 import org.jboss.logging.Logger;
 import org.jboss.metadata.WebMetaData;
 import org.jgroups.View;
@@ -41,8 +42,12 @@
    private static final int POJO_KEY_FQN_INDEX = POJO_ATTRIBUTE_FQN_INDEX + 1;
    // Size of an Fqn that points to the root of a session
    private static final int POJO_KEY_FQN_SIZE = POJO_KEY_FQN_INDEX + 1;
-   // The root of the buddy backup subtree
-   private static final String BUDDY_BACKUP = "_BUDDY_BACKUP_";
+   // The index of the root of a buddy backup subtree
+   private static final int BUDDY_BACKUP_ROOT_OWNER_INDEX = BuddyManager.BUDDY_BACKUP_SUBTREE_FQN.size();
+   // The size of the root of a buddy backup subtree (including owner)
+   private static final int BUDDY_BACKUP_ROOT_OWNER_SIZE = BUDDY_BACKUP_ROOT_OWNER_INDEX + 1;
+   // Size of an Fqn that points to the root of a session in the buddy backup region
+   private static final int BUDDY_SESSION_FQN_SIZE = BUDDY_BACKUP_ROOT_OWNER_SIZE + SESSION_FQN_SIZE;
    
    protected static Logger log_ = Logger.getLogger(CacheListener.class);
    protected JBossCacheWrapper cacheWrapper_;
@@ -66,7 +71,7 @@
     */
    protected boolean needToHandle(Fqn fqn)
    {
-      return (LocalSessionActivity.isLocallyActive(getIdFromFqn(fqn)) == false 
+      return (SessionReplicationContext.isLocallyActive(getIdFromFqn(fqn)) == false 
               && fqn.isChildOf(subtreeRoot_));
    }
 
@@ -81,22 +86,16 @@
    {
       ParsedBuddyFqn pfqn = new ParsedBuddyFqn(fqn);
       fqn = pfqn.noBuddy;
-      if (fqn == null)
-         return;
       
-      if (fqn.size() == POJO_KEY_FQN_SIZE)
+      // Potential removal of a Pojo where we need to unregister
+      // as an Observer.
+      if (fieldBased_ 
+            && fqn.size() == POJO_KEY_FQN_SIZE
+            && needToHandle(fqn))
       {
-         // Potential removal of a Pojo where we need to unregister
-         // as an Observer.
-         if (fieldBased_
-               && needToHandle(fqn)
-               && JBossCacheService.ATTRIBUTE.equals(fqn.get(POJO_ATTRIBUTE_FQN_INDEX))
-               && fqn.size() > POJO_KEY_FQN_INDEX)
-         {
-            String sessId = getIdFromFqn(fqn);
-            String attrKey = (String) fqn.get(POJO_KEY_FQN_INDEX);
-            manager_.processRemoteAttributeRemoval(sessId, attrKey);
-         }
+         String sessId = getIdFromFqn(fqn);
+         String attrKey = (String) fqn.get(POJO_KEY_FQN_INDEX);
+         manager_.processRemoteAttributeRemoval(sessId, attrKey);
       }
       else if(fqn.size() == SESSION_FQN_SIZE && needToHandle(fqn))
       {
@@ -122,6 +121,9 @@
 
    protected void nodeDirty(Fqn fqn)
    {
+      if (fqn.size() != SESSION_FQN_SIZE && fqn.size() != BUDDY_SESSION_FQN_SIZE)
+         return;
+      
       // Parse the Fqn so we if it has a buddy backup region in it
       // we can just deal with the part below that
       ParsedBuddyFqn pfqn = new ParsedBuddyFqn(fqn);
@@ -131,7 +133,7 @@
       // my webapp, then I should skip it.
       // We only deal with events for the root node of a session,
       // so skip all others
-      if(noBuddy == null || noBuddy.size() != SESSION_FQN_SIZE || !needToHandle(noBuddy)) return;
+      if(noBuddy.size() != SESSION_FQN_SIZE || !needToHandle(noBuddy)) return;
 
       // Query if we have version value. Use the full Fqn, not just the
       // "no buddy" part.
@@ -198,7 +200,8 @@
    protected String getIdFromFqn(Fqn fqn)
    {
       return (String)fqn.get(SESSION_ID_FQN_INDEX);
-}
+   }
+   
    private class ParsedBuddyFqn
    {
       Fqn raw;
@@ -208,23 +211,18 @@
       ParsedBuddyFqn(Fqn raw)
       {
          this.raw = raw;
-         if (raw != null)
+         if (raw.size() > BUDDY_BACKUP_ROOT_OWNER_SIZE 
+               && raw.isChildOf(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN))
          {
-            if (BUDDY_BACKUP.equals(raw.get(0)))
-            {
-               if (raw.size() > 2)
-               {
-                  owner = (String) raw.get(1);
-                  noBuddy = raw.getFqnChild(2, raw.size());
-                  if (log_.isTraceEnabled())
-                     log_.trace(raw + " parsed to " + noBuddy + " with owner " + owner);
-               }
-            }
-            else
-            {
-               noBuddy = raw;
-            }
+            owner = (String) raw.get(BUDDY_BACKUP_ROOT_OWNER_INDEX);
+            noBuddy = raw.getFqnChild(BUDDY_BACKUP_ROOT_OWNER_SIZE, raw.size());
+            if (log_.isTraceEnabled())
+               log_.trace(raw + " parsed to " + noBuddy + " with owner " + owner);
          }
+         else
+         {
+            noBuddy = raw;
+         }
       }
    }
 }




More information about the jboss-cvs-commits mailing list