[jboss-cvs] JBossCache/src/org/jboss/cache/interceptors ...

Galder Zamarreno galder.zamarreno at jboss.com
Wed Feb 28 05:58:41 EST 2007


  User: gzamarreno
  Date: 07/02/28 05:58:41

  Modified:    src/org/jboss/cache/interceptors  Tag:
                        Branch_JBossCache_1_4_0
                        OptimisticNodeInterceptor.java
  Log:
  [JBCACHE-927] Fix backported to the 1.4.x branch
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.21.2.8  +27 -9     JBossCache/src/org/jboss/cache/interceptors/OptimisticNodeInterceptor.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: OptimisticNodeInterceptor.java
  ===================================================================
  RCS file: /cvsroot/jboss/JBossCache/src/org/jboss/cache/interceptors/OptimisticNodeInterceptor.java,v
  retrieving revision 1.21.2.7
  retrieving revision 1.21.2.8
  diff -u -b -r1.21.2.7 -r1.21.2.8
  --- OptimisticNodeInterceptor.java	11 Dec 2006 17:29:44 -0000	1.21.2.7
  +++ OptimisticNodeInterceptor.java	28 Feb 2007 10:58:41 -0000	1.21.2.8
  @@ -20,6 +20,7 @@
   import org.jboss.cache.optimistic.DataVersion;
   import org.jboss.cache.optimistic.TransactionWorkspace;
   import org.jboss.cache.optimistic.WorkspaceNode;
  +import org.jboss.cache.optimistic.DefaultDataVersion;
   import org.jgroups.blocks.MethodCall;
   
   import javax.transaction.Transaction;
  @@ -33,6 +34,7 @@
    *
    * @author <a href="mailto:manik at jboss.org">Manik Surtani (manik at jboss.org)</a>
    * @author <a href="mailto:stevew at jofti.com">Steve Woodcock (stevew at jofti.com)</a>
  + * @author <a href="mailto:galder.zamarreno at jboss.com">Galder Zamarreno</a>
    */
   public class OptimisticNodeInterceptor extends OptimisticInterceptor
   {
  @@ -66,7 +68,7 @@
               throw new CacheException("Must be in a valid transaction " + m);
            }
   
  -         WorkspaceNode workspaceNode = getOrCreateWorkspaceNode(getFqn(args), workspace, cache);
  +         WorkspaceNode workspaceNode = getOrCreateWorkspaceNode(getFqn(args), workspace, true);
   
   
            if (workspaceNode != null)
  @@ -213,7 +215,7 @@
         Fqn parentFqn = temp.getFqn();
   
         // get a wrapped parent
  -      WorkspaceNode parentNode = getOrCreateWorkspaceNode(parentFqn, workspace, cache);
  +      WorkspaceNode parentNode = getOrCreateWorkspaceNode(parentFqn, workspace, false);
         if (parentNode == null)
            throw new CacheException("Unable to find parent node with Fqn " + parentFqn);
   
  @@ -232,7 +234,7 @@
            if (toDelete.getFqn().isChildOrEquals(nodeFqn))
            {
               if (debug) log.debug("marking node " + toDelete.getFqn() + " as deleted");
  -            toDelete.markAsDeleted();
  +            toDelete.markAsDeleted(true);
            }
            else
            {
  @@ -263,7 +265,7 @@
      {
         Fqn fqn = (Fqn) args[0];
         Object key = args[1];
  -      WorkspaceNode workspaceNode = getOrCreateWorkspaceNode(fqn, workspace, cache);
  +      WorkspaceNode workspaceNode = getOrCreateWorkspaceNode(fqn, workspace, false);
   
         if (workspaceNode == null)
         {
  @@ -283,7 +285,7 @@
      {
         Fqn fqn = (Fqn) args[0];
   
  -      WorkspaceNode workspaceNode = getOrCreateWorkspaceNode(fqn, workspace, cache);
  +      WorkspaceNode workspaceNode = getOrCreateWorkspaceNode(fqn, workspace, false);
   
         if (workspaceNode == null)
         {
  @@ -301,7 +303,7 @@
      {
         Fqn fqn = (Fqn) args[0];
   
  -      WorkspaceNode workspaceNode = getOrCreateWorkspaceNode(fqn, workspace, cache);
  +      WorkspaceNode workspaceNode = getOrCreateWorkspaceNode(fqn, workspace, false);
   
         if (workspaceNode == null)
         {
  @@ -320,7 +322,7 @@
      {
         Fqn fqn = (Fqn) args[0];
   
  -      WorkspaceNode workspaceNode = getOrCreateWorkspaceNode(fqn, workspace, cache);
  +      WorkspaceNode workspaceNode = getOrCreateWorkspaceNode(fqn, workspace, false);
   
         if (workspaceNode == null)
         {
  @@ -335,7 +337,7 @@
         }
      }
   
  -   private WorkspaceNode getOrCreateWorkspaceNode(Fqn fqn, TransactionWorkspace workspace, TreeCache cache)
  +   private WorkspaceNode getOrCreateWorkspaceNode(Fqn fqn, TransactionWorkspace workspace, boolean undeleteIfNecessary)
      {
         WorkspaceNode workspaceNode = workspace.getNode(fqn);
         // if we do not have the node then we need to add it to the workspace
  @@ -343,15 +345,31 @@
         {
            DataNode node = cache.peek(fqn);
            if (node == null)
  +         {
               return null; // seems to happen quite a bit
  +         }
            workspaceNode = NodeFactory.getInstance().createWorkspaceNode(node, workspace);
  +         workspace.addNode(workspaceNode);
         }
         // the node has been deleted dude!
         if (workspaceNode.isDeleted())
         {
            if (log.isDebugEnabled()) log.debug("Node " + fqn + " has been deleted in the workspace.");
  -         return null;
  +         if (undeleteIfNecessary)
  +         {
  +            workspaceNode.markAsDeleted(false);
  +            // re-add to parent
  +            WorkspaceNode parent = getOrCreateWorkspaceNode(fqn.getParent(), workspace, true);
  +            parent.addChild(workspaceNode);
         }
  +         else
  +         {
  +            workspaceNode = null;
  +         }
  +      }
  +
  +      if (workspaceNode != null && !(workspaceNode.getVersion() instanceof DefaultDataVersion))
  +         workspaceNode.setVersioningImplicit(false);      
         return workspaceNode;
      }
   }
  
  
  



More information about the jboss-cvs-commits mailing list