[jbosscache-commits] JBoss Cache SVN: r7172 - in core/branches/flat/src: main/java/org/jboss/starobrno/config and 4 other directories.

jbosscache-commits at lists.jboss.org jbosscache-commits at lists.jboss.org
Wed Nov 19 15:16:58 EST 2008


Author: manik.surtani at jboss.com
Date: 2008-11-19 15:16:57 -0500 (Wed, 19 Nov 2008)
New Revision: 7172

Added:
   core/branches/flat/src/main/java/org/jboss/starobrno/tree/NodeKey.java
   core/branches/flat/src/test/java/org/jboss/starobrno/tree/api/NodeLockSupport.java
Modified:
   core/branches/flat/src/main/java/org/jboss/starobrno/CacheDelegate.java
   core/branches/flat/src/main/java/org/jboss/starobrno/CacheSPI.java
   core/branches/flat/src/main/java/org/jboss/starobrno/config/Configuration.java
   core/branches/flat/src/main/java/org/jboss/starobrno/config/Option.java
   core/branches/flat/src/main/java/org/jboss/starobrno/config/XmlParsingConfigurationRegistry.java
   core/branches/flat/src/main/java/org/jboss/starobrno/context/InvocationContextImpl.java
   core/branches/flat/src/main/java/org/jboss/starobrno/manager/CacheManager.java
   core/branches/flat/src/main/java/org/jboss/starobrno/tree/NodeImpl.java
   core/branches/flat/src/main/java/org/jboss/starobrno/tree/TreeStructureSupport.java
Log:
Replicated tree unit tests

Modified: core/branches/flat/src/main/java/org/jboss/starobrno/CacheDelegate.java
===================================================================
--- core/branches/flat/src/main/java/org/jboss/starobrno/CacheDelegate.java	2008-11-19 19:01:18 UTC (rev 7171)
+++ core/branches/flat/src/main/java/org/jboss/starobrno/CacheDelegate.java	2008-11-19 20:16:57 UTC (rev 7172)
@@ -50,6 +50,7 @@
 import org.jboss.starobrno.interceptors.InterceptorChain;
 import org.jboss.starobrno.interceptors.base.CommandInterceptor;
 import org.jboss.starobrno.invocation.InvocationContextContainer;
+import org.jboss.starobrno.lock.LockManager;
 import org.jboss.starobrno.notifications.Notifier;
 import org.jboss.starobrno.statetransfer.StateTransferManager;
 import org.jboss.starobrno.transaction.GlobalTransaction;
@@ -81,6 +82,7 @@
    private String name;
    private EvictionManager evictionManager;
    private DataContainer dataContainer;
+   private LockManager lockManager;
 
 
    @Inject
@@ -93,7 +95,8 @@
                                    ComponentRegistry componentRegistry,
                                    TransactionManager transactionManager,
                                    BatchContainer batchContainer,
-                                   RPCManager rpcManager, DataContainer dataContainer)
+                                   RPCManager rpcManager, DataContainer dataContainer,
+                                   LockManager lockManager)
    {
       this.invocationContextContainer = invocationContextContainer;
       this.commandsFactory = commandsFactory;
@@ -106,6 +109,7 @@
       this.rpcManager = rpcManager;
       this.evictionManager = evictionManager;
       this.dataContainer = dataContainer;
+      this.lockManager = lockManager;
    }
 
    public V putIfAbsent(K key, V value)
@@ -384,6 +388,11 @@
       throw new UnsupportedOperationException("Not implemented");//todo please implement!
    }
 
+   public LockManager getLockManager()
+   {
+      return lockManager;
+   }
+
    public String getName()
    {
       return name;

Modified: core/branches/flat/src/main/java/org/jboss/starobrno/CacheSPI.java
===================================================================
--- core/branches/flat/src/main/java/org/jboss/starobrno/CacheSPI.java	2008-11-19 19:01:18 UTC (rev 7171)
+++ core/branches/flat/src/main/java/org/jboss/starobrno/CacheSPI.java	2008-11-19 20:16:57 UTC (rev 7172)
@@ -32,6 +32,7 @@
 import org.jboss.starobrno.factories.ComponentRegistry;
 import org.jboss.starobrno.interceptors.base.CommandInterceptor;
 import org.jboss.starobrno.loader.CacheLoader;
+import org.jboss.starobrno.lock.LockManager;
 import org.jboss.starobrno.notifications.Notifier;
 import org.jboss.starobrno.statetransfer.StateTransferManager;
 import org.jboss.starobrno.transaction.GlobalTransaction;
@@ -208,5 +209,7 @@
     */
    ComponentRegistry getComponentRegistry();
 
-   public Object getDirect(Object key);
+   Object getDirect(Object key);
+
+   LockManager getLockManager();
 }

Modified: core/branches/flat/src/main/java/org/jboss/starobrno/config/Configuration.java
===================================================================
--- core/branches/flat/src/main/java/org/jboss/starobrno/config/Configuration.java	2008-11-19 19:01:18 UTC (rev 7171)
+++ core/branches/flat/src/main/java/org/jboss/starobrno/config/Configuration.java	2008-11-19 20:16:57 UTC (rev 7172)
@@ -957,28 +957,35 @@
    }
 
    @Override
-   public Configuration clone() throws CloneNotSupportedException
+   public Configuration clone()
    {
-      Configuration c = (Configuration) super.clone();
-      if (buddyReplicationConfig != null)
+      try
       {
-         c.setBuddyReplicationConfig(buddyReplicationConfig.clone());
+         Configuration c = (Configuration) super.clone();
+         if (buddyReplicationConfig != null)
+         {
+            c.setBuddyReplicationConfig(buddyReplicationConfig.clone());
+         }
+         if (evictionConfig != null)
+         {
+            c.setEvictionConfig(evictionConfig.clone());
+         }
+         if (cacheLoaderConfig != null)
+         {
+            c.setCacheLoaderConfig(cacheLoaderConfig.clone());
+         }
+         if (runtimeConfig != null)
+         {
+            c.setRuntimeConfig(runtimeConfig.clone());
+            // always make sure we reset the runtime when cloning.
+            c.getRuntimeConfig().reset();
+         }
+         return c;
       }
-      if (evictionConfig != null)
+      catch (CloneNotSupportedException e)
       {
-         c.setEvictionConfig(evictionConfig.clone());
+         throw new RuntimeException(e);
       }
-      if (cacheLoaderConfig != null)
-      {
-         c.setCacheLoaderConfig(cacheLoaderConfig.clone());
-      }
-      if (runtimeConfig != null)
-      {
-         c.setRuntimeConfig(runtimeConfig.clone());
-         // always make sure we reset the runtime when cloning.
-         c.getRuntimeConfig().reset();
-      }
-      return c;
    }
 
    public boolean isUsingCacheLoaders()

Modified: core/branches/flat/src/main/java/org/jboss/starobrno/config/Option.java
===================================================================
--- core/branches/flat/src/main/java/org/jboss/starobrno/config/Option.java	2008-11-19 19:01:18 UTC (rev 7171)
+++ core/branches/flat/src/main/java/org/jboss/starobrno/config/Option.java	2008-11-19 20:16:57 UTC (rev 7172)
@@ -269,7 +269,7 @@
       catch (CloneNotSupportedException e)
       {
          // should never happen
-         return null;
+         throw new RuntimeException(e);
       }
    }
 

Modified: core/branches/flat/src/main/java/org/jboss/starobrno/config/XmlParsingConfigurationRegistry.java
===================================================================
--- core/branches/flat/src/main/java/org/jboss/starobrno/config/XmlParsingConfigurationRegistry.java	2008-11-19 19:01:18 UTC (rev 7171)
+++ core/branches/flat/src/main/java/org/jboss/starobrno/config/XmlParsingConfigurationRegistry.java	2008-11-19 20:16:57 UTC (rev 7172)
@@ -112,14 +112,6 @@
          throw new IllegalArgumentException("unknown config " + configName);
 
       // Don't hand out a ref to our master copy
-      try
-      {
-         return config.clone();
-      }
-      catch (CloneNotSupportedException e)
-      {
-         // This should not happen, as we already cloned the config
-         throw new RuntimeException("Could not clone configuration " + configName, e);
-      }
+      return config.clone();
    }
 }

Modified: core/branches/flat/src/main/java/org/jboss/starobrno/context/InvocationContextImpl.java
===================================================================
--- core/branches/flat/src/main/java/org/jboss/starobrno/context/InvocationContextImpl.java	2008-11-19 19:01:18 UTC (rev 7171)
+++ core/branches/flat/src/main/java/org/jboss/starobrno/context/InvocationContextImpl.java	2008-11-19 20:16:57 UTC (rev 7172)
@@ -533,4 +533,58 @@
       copy.transaction = transaction;
       copy.transactionContext = transactionContext;
    }
+
+   @Override
+   public boolean equals(Object o)
+   {
+      if (this == o) return true;
+      if (o == null || getClass() != o.getClass()) return false;
+
+      InvocationContextImpl that = (InvocationContextImpl) o;
+
+      if (localRollbackOnly != that.localRollbackOnly) return false;
+      if (originLocal != that.originLocal) return false;
+      if (globalTransaction != null ? !globalTransaction.equals(that.globalTransaction) : that.globalTransaction != null)
+         return false;
+      if (invocationLocks != null ? !invocationLocks.equals(that.invocationLocks) : that.invocationLocks != null)
+         return false;
+      if (lookedUpEntries != null ? !lookedUpEntries.equals(that.lookedUpEntries) : that.lookedUpEntries != null)
+         return false;
+      if (optionOverrides != null ? !optionOverrides.equals(that.optionOverrides) : that.optionOverrides != null)
+         return false;
+      if (transaction != null ? !transaction.equals(that.transaction) : that.transaction != null) return false;
+      if (transactionContext != null ? !transactionContext.equals(that.transactionContext) : that.transactionContext != null)
+         return false;
+
+      return true;
+   }
+
+   @Override
+   public int hashCode()
+   {
+      int result = transaction != null ? transaction.hashCode() : 0;
+      result = 31 * result + (globalTransaction != null ? globalTransaction.hashCode() : 0);
+      result = 31 * result + (transactionContext != null ? transactionContext.hashCode() : 0);
+      result = 31 * result + (optionOverrides != null ? optionOverrides.hashCode() : 0);
+      result = 31 * result + (originLocal ? 1 : 0);
+      result = 31 * result + (localRollbackOnly ? 1 : 0);
+      result = 31 * result + (invocationLocks != null ? invocationLocks.hashCode() : 0);
+      result = 31 * result + (lookedUpEntries != null ? lookedUpEntries.hashCode() : 0);
+      return result;
+   }
+
+   @Override
+   public String toString()
+   {
+      return "InvocationContextImpl{" +
+            "transaction=" + transaction +
+            ", globalTransaction=" + globalTransaction +
+            ", transactionContext=" + transactionContext +
+            ", optionOverrides=" + optionOverrides +
+            ", originLocal=" + originLocal +
+            ", localRollbackOnly=" + localRollbackOnly +
+            ", invocationLocks=" + invocationLocks +
+            ", lookedUpEntries=" + lookedUpEntries +
+            '}';
+   }
 }

Modified: core/branches/flat/src/main/java/org/jboss/starobrno/manager/CacheManager.java
===================================================================
--- core/branches/flat/src/main/java/org/jboss/starobrno/manager/CacheManager.java	2008-11-19 19:01:18 UTC (rev 7171)
+++ core/branches/flat/src/main/java/org/jboss/starobrno/manager/CacheManager.java	2008-11-19 20:16:57 UTC (rev 7172)
@@ -45,16 +45,9 @@
 
    public CacheManager(Configuration c)
    {
-      try
-      {
-         //if a config is shared between multiple managers, then each registers it's
-         // own chnnel in runtime
-         this.c = c.clone();
-      }
-      catch (CloneNotSupportedException e)
-      {
-         throw new RuntimeException(e);
-      }
+      //if a config is shared between multiple managers, then each registers it's
+      // own chnnel in runtime
+      this.c = c.clone();
    }
 
    public void start()
@@ -94,14 +87,8 @@
    protected TreeCache createTreeCache()
    {
       Configuration cfg = null;
-      try
-      {
-         cfg = c.clone();
-      }
-      catch (CloneNotSupportedException e)
-      {
+      cfg = c.clone();
 
-      }
       cfg.setInvocationBatchingEnabled(true); // needed for the TreeCache
       DefaultCacheFactory dcf = new DefaultCacheFactory();
       return new TreeCacheImpl(dcf.createCache(cfg));

Modified: core/branches/flat/src/main/java/org/jboss/starobrno/tree/NodeImpl.java
===================================================================
--- core/branches/flat/src/main/java/org/jboss/starobrno/tree/NodeImpl.java	2008-11-19 19:01:18 UTC (rev 7171)
+++ core/branches/flat/src/main/java/org/jboss/starobrno/tree/NodeImpl.java	2008-11-19 20:16:57 UTC (rev 7172)
@@ -37,14 +37,14 @@
 public class NodeImpl<K, V> extends TreeStructureSupport implements Node<K, V>
 {
    Fqn fqn;
-   Key dataKey, structureKey;
+   NodeKey dataKey, structureKey;
 
    public NodeImpl(Fqn fqn, Cache cache)
    {
       super(cache);
       this.fqn = fqn;
-      dataKey = new Key(fqn, Type.DATA);
-      structureKey = new Key(fqn, Type.STRUCTURE);
+      dataKey = new NodeKey(fqn, NodeKey.Type.DATA);
+      structureKey = new NodeKey(fqn, NodeKey.Type.STRUCTURE);
    }
 
    public Node<K, V> getParent()
@@ -59,7 +59,7 @@
       try
       {
          Set set = new HashSet();
-         for (Fqn f : getStructure().children.values())
+         for (Fqn f : getStructure().values())
          {
             NodeImpl n = new NodeImpl(f, cache);
             set.add(n);
@@ -74,7 +74,7 @@
 
    public Set<Object> getChildrenNames()
    {
-      return Immutables.immutableSetCopy(getStructure().children.keySet());
+      return Immutables.immutableSetCopy(getStructure().keySet());
    }
 
    public Map<K, V> getData()
@@ -107,8 +107,8 @@
       {
          Fqn absoluteChildFqn = Fqn.fromRelativeFqn(fqn, f);
          NodeImpl child = new NodeImpl(absoluteChildFqn, cache);
-         Structure s = getStructure();
-         s.children.put(f.getLastElement(), absoluteChildFqn);
+         Map<Object, Fqn> s = getStructure();
+         s.put(f.getLastElement(), absoluteChildFqn);
          updateStructure(s);
          createNodeInCache(absoluteChildFqn);
          return child;
@@ -129,14 +129,14 @@
       startAtomic();
       try
       {
-         Structure s = (Structure) cache.get(structureKey);
-         Fqn childFqn = s.children.remove(childName);
+         Map<Object, Fqn> s = getStructure();
+         Fqn childFqn = s.remove(childName);
          if (childFqn != null)
          {
             Node child = new NodeImpl(childFqn, cache);
             child.removeChildren();
-            cache.remove(new Key(childFqn, Type.DATA));
-            cache.remove(new Key(childFqn, Type.STRUCTURE));
+            cache.remove(new NodeKey(childFqn, NodeKey.Type.DATA));
+            cache.remove(new NodeKey(childFqn, NodeKey.Type.STRUCTURE));
             updateStructure(s);
             return true;
          }
@@ -326,7 +326,7 @@
 
    public boolean hasChild(Object o)
    {
-      return getStructure().children.containsKey(o);
+      return getStructure().containsKey(o);
    }
 
    public boolean isValid()
@@ -339,8 +339,8 @@
       startAtomic();
       try
       {
-         Structure s = getStructure();
-         for (Object o : Immutables.immutableSetCopy(s.children.keySet())) removeChild(o);
+         Map<Object, Fqn> s = getStructure();
+         for (Object o : Immutables.immutableSetCopy(s.keySet())) removeChild(o);
       }
       finally
       {
@@ -367,14 +367,14 @@
       return (Map<K, V>) atomicMapCache.getAtomicMap(dataKey);
    }
 
-   void updateStructure(Structure s)
+   void updateStructure(Map<Object, Fqn> s)
    {
       cache.put(structureKey, s);
    }
 
-   Structure getStructure()
+   Map<Object, Fqn> getStructure()
    {
-      return (Structure) cache.get(structureKey);
+      return (Map<Object, Fqn>) cache.get(structureKey);
    }
 
    public boolean equals(Object o)

Added: core/branches/flat/src/main/java/org/jboss/starobrno/tree/NodeKey.java
===================================================================
--- core/branches/flat/src/main/java/org/jboss/starobrno/tree/NodeKey.java	                        (rev 0)
+++ core/branches/flat/src/main/java/org/jboss/starobrno/tree/NodeKey.java	2008-11-19 20:16:57 UTC (rev 7172)
@@ -0,0 +1,78 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ *
+ */
+
+package org.jboss.starobrno.tree;
+
+import org.jboss.starobrno.util.Util;
+
+import java.io.Serializable;
+
+/**
+ * A class that represents the key to a node
+ *
+ * @author Manik Surtani
+ */
+public class NodeKey implements Serializable
+{
+   Fqn fqn;
+   Type contents;
+
+   enum Type
+   {
+      DATA, STRUCTURE
+   }
+
+   public NodeKey(Fqn fqn, Type contents)
+   {
+      this.contents = contents;
+      this.fqn = fqn;
+   }
+
+   public boolean equals(Object o)
+   {
+      if (this == o) return true;
+      if (o == null || getClass() != o.getClass()) return false;
+
+      NodeKey key = (NodeKey) o;
+
+      if (contents != key.contents) return false;
+      if (!Util.safeEquals(fqn, key.fqn)) return false;
+
+      return true;
+   }
+
+   public int hashCode()
+   {
+      int hc = (contents != null ? contents.hashCode() : 1);
+      hc = 31 * hc + fqn.hashCode();
+      return hc;
+   }
+
+   public String toString()
+   {
+      return "NodeKey{" +
+            "contents=" + contents +
+            ", fqn=" + fqn +
+            '}';
+   }
+}

Modified: core/branches/flat/src/main/java/org/jboss/starobrno/tree/TreeStructureSupport.java
===================================================================
--- core/branches/flat/src/main/java/org/jboss/starobrno/tree/TreeStructureSupport.java	2008-11-19 19:01:18 UTC (rev 7171)
+++ core/branches/flat/src/main/java/org/jboss/starobrno/tree/TreeStructureSupport.java	2008-11-19 20:16:57 UTC (rev 7172)
@@ -22,9 +22,9 @@
 package org.jboss.starobrno.tree;
 
 import org.jboss.starobrno.Cache;
+import org.jboss.starobrno.CacheSPI;
 import org.jboss.starobrno.atomic.AtomicMapCache;
 import org.jboss.starobrno.batch.AutoBatchSupport;
-import org.jboss.starobrno.util.Util;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -44,7 +44,7 @@
       startAtomic();
       try
       {
-         return cache.containsKey(new Key(f, Type.DATA)) && cache.containsKey(new Key(f, Type.STRUCTURE));
+         return cache.containsKey(new NodeKey(f, NodeKey.Type.DATA)) && cache.containsKey(new NodeKey(f, NodeKey.Type.STRUCTURE));
       }
       finally
       {
@@ -61,17 +61,16 @@
          if (!fqn.isRoot())
          {
             if (!exists(parent)) createNodeInCache(parent);
-            Structure parentStructure = getStructure(parent);
-            parentStructure.children.put(fqn.getLastElement(), fqn);
+            Map<Object, Fqn> parentStructure = getStructure(parent);
+            parentStructure.put(fqn.getLastElement(), fqn);
             updateStructure(parent, parentStructure);
          }
-         Key dataKey = new Key(fqn, Type.DATA);
-         Key structureKey = new Key(fqn, Type.STRUCTURE);
+         NodeKey dataKey = new NodeKey(fqn, NodeKey.Type.DATA);
+         NodeKey structureKey = new NodeKey(fqn, NodeKey.Type.STRUCTURE);
          if (cache.containsKey(dataKey) && cache.containsKey(structureKey)) return;
-         Structure s = new Structure();
-         s.parent = fqn.getParent();
+         Map<Object, Fqn> structure = new HashMap<Object, Fqn>();
+         cache.put(structureKey, structure);
          atomicMapCache.getAtomicMap(dataKey);
-         cache.put(structureKey, s);
       }
       finally
       {
@@ -79,64 +78,20 @@
       }
    }
 
-   enum Type
+   Map<Object, Fqn> getStructure(Fqn fqn)
    {
-      DATA, STRUCTURE
+      return (Map<Object, Fqn>) cache.get(new NodeKey(fqn, NodeKey.Type.STRUCTURE));
    }
 
-   static class Key
+   void updateStructure(Fqn fqn, Map<Object, Fqn> structure)
    {
-      Type contents;
-      Fqn fqn;
-
-      Key(Fqn fqn, Type contents)
-      {
-         this.contents = contents;
-         this.fqn = fqn;
-      }
-
-      public boolean equals(Object o)
-      {
-         if (this == o) return true;
-         if (o == null || getClass() != o.getClass()) return false;
-
-         Key key = (Key) o;
-
-         if (contents != key.contents) return false;
-         if (!Util.safeEquals(fqn, key.fqn)) return false;
-
-         return true;
-      }
-
-      public int hashCode()
-      {
-         int hc = (contents != null ? contents.hashCode() : 1);
-         hc = 31 * hc + fqn.hashCode();
-         return hc;
-      }
-
-      public String toString()
-      {
-         return "Key{" +
-               "contents=" + contents +
-               ", fqn=" + fqn +
-               '}';
-      }
+      cache.put(new NodeKey(fqn, NodeKey.Type.STRUCTURE), structure);
    }
 
-   static class Structure
+   public static boolean isLocked(Cache c, Fqn fqn)
    {
-      Map<Object, Fqn> children = new HashMap<Object, Fqn>();
-      Fqn parent;
+      org.jboss.starobrno.lock.LockManager lockManager = ((CacheSPI) c).getLockManager();
+      return lockManager.isLocked(new NodeKey(fqn, NodeKey.Type.STRUCTURE)) &&
+            lockManager.isLocked(new NodeKey(fqn, NodeKey.Type.DATA));
    }
-
-   Structure getStructure(Fqn fqn)
-   {
-      return (Structure) cache.get(new Key(fqn, Type.STRUCTURE));
-   }
-
-   void updateStructure(Fqn fqn, Structure s)
-   {
-      cache.put(new Key(fqn, Type.STRUCTURE), s);
-   }
 }

Added: core/branches/flat/src/test/java/org/jboss/starobrno/tree/api/NodeLockSupport.java
===================================================================
--- core/branches/flat/src/test/java/org/jboss/starobrno/tree/api/NodeLockSupport.java	                        (rev 0)
+++ core/branches/flat/src/test/java/org/jboss/starobrno/tree/api/NodeLockSupport.java	2008-11-19 20:16:57 UTC (rev 7172)
@@ -0,0 +1,83 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ *
+ */
+
+package org.jboss.starobrno.tree.api;
+
+import org.jboss.starobrno.Cache;
+import org.jboss.starobrno.CacheSPI;
+import org.jboss.starobrno.lock.LockManager;
+import org.jboss.starobrno.tree.Fqn;
+import org.jboss.starobrno.tree.TreeCache;
+import org.jboss.starobrno.tree.TreeStructureSupport;
+
+import javax.transaction.TransactionManager;
+
+public abstract class NodeLockSupport
+{
+   static final Fqn A = Fqn.fromString("/a"), B = Fqn.fromString("/b"), C = Fqn.fromString("/c"), D = Fqn.fromString("/d"), E = Fqn.fromString("/e");
+   static final Object k = "key", vA = "valueA", vB = "valueB", vC = "valueC", vD = "valueD", vE = "valueE";
+   static final Fqn A_B = Fqn.fromRelativeFqn(A, B);
+   static final Fqn A_B_C = Fqn.fromRelativeFqn(A_B, C);
+   static final Fqn A_B_C_E = Fqn.fromRelativeFqn(A_B_C, E);
+   static final Fqn A_B_D = Fqn.fromRelativeFqn(A_B, D);
+   static final Fqn C_E = Fqn.fromRelativeFqn(C, E);
+   static final Fqn D_B = Fqn.fromRelativeFqn(D, B);
+   static final Fqn D_B_C = Fqn.fromRelativeFqn(D_B, C);
+
+   protected ThreadLocal<Cache<Object, Object>> cacheTL = new ThreadLocal<Cache<Object, Object>>();
+   protected ThreadLocal<TransactionManager> tmTL = new ThreadLocal<TransactionManager>();
+   protected ThreadLocal<TreeCache> treeCacheTL = new ThreadLocal<TreeCache>();
+
+   protected void checkLocks()
+   {
+      Cache<Object, Object> cache = cacheTL.get();
+
+      assert !TreeStructureSupport.isLocked(cache, A);
+      assert !TreeStructureSupport.isLocked(cache, Fqn.ROOT);
+      assert TreeStructureSupport.isLocked(cache, C);
+      assert TreeStructureSupport.isLocked(cache, A_B);
+      assert TreeStructureSupport.isLocked(cache, A_B_C);
+   }
+
+   protected void checkLocksDeep()
+   {
+      Cache<Object, Object> cache = cacheTL.get();
+
+      assert !TreeStructureSupport.isLocked(cache, A);
+      assert !TreeStructureSupport.isLocked(cache, Fqn.ROOT);
+      assert !TreeStructureSupport.isLocked(cache, A_B_D);
+
+      assert TreeStructureSupport.isLocked(cache, C);
+      assert TreeStructureSupport.isLocked(cache, C_E);
+      assert TreeStructureSupport.isLocked(cache, A_B);
+      assert TreeStructureSupport.isLocked(cache, A_B_C);
+      assert TreeStructureSupport.isLocked(cache, A_B_C_E);
+   }
+
+   protected void assertNoLocks()
+   {
+      Cache<Object, Object> cache = cacheTL.get();
+      LockManager lm = ((CacheSPI) cache).getLockManager();
+      for (Object key : cache.keySet()) assert !lm.isLocked(key);
+   }
+}




More information about the jbosscache-commits mailing list