[infinispan-commits] Infinispan SVN: r253 - in trunk/core/src/main/java/org/infinispan: commands and 1 other directory.

infinispan-commits at lists.jboss.org infinispan-commits at lists.jboss.org
Tue May 12 04:42:40 EDT 2009


Author: vblagojevic at jboss.com
Date: 2009-05-12 04:42:40 -0400 (Tue, 12 May 2009)
New Revision: 253

Modified:
   trunk/core/src/main/java/org/infinispan/CacheDelegate.java
   trunk/core/src/main/java/org/infinispan/commands/LockControlCommand.java
Log:
[ISPN-48] -  Introduce lock() and unlock() API methods
work in progress

Modified: trunk/core/src/main/java/org/infinispan/CacheDelegate.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/CacheDelegate.java	2009-05-12 02:58:05 UTC (rev 252)
+++ trunk/core/src/main/java/org/infinispan/CacheDelegate.java	2009-05-12 08:42:40 UTC (rev 253)
@@ -26,6 +26,7 @@
 import org.infinispan.atomic.atomichashmap.AtomicHashMap;
 import org.infinispan.batch.BatchContainer;
 import org.infinispan.commands.CommandsFactory;
+import org.infinispan.commands.LockControlCommand;
 import org.infinispan.commands.read.GetKeyValueCommand;
 import org.infinispan.commands.read.SizeCommand;
 import org.infinispan.commands.write.ClearCommand;
@@ -60,6 +61,8 @@
 
 import javax.transaction.Transaction;
 import javax.transaction.TransactionManager;
+
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
@@ -237,21 +240,35 @@
    }
 
    public void lock(K key, boolean eager) {
-      // TODO: Customise this generated block
+      if (key == null)
+         throw new IllegalArgumentException("Cannot lock null key");
+      List<K> keys = new ArrayList<K>(1);
+      keys.add(key);
+      lock(keys, eager);
    }
 
    public void lock(Collection<? extends K> keys, boolean eager) {
-      // TODO: Customise this generated block
+      if (keys == null || keys.isEmpty())
+         throw new IllegalArgumentException("Cannot lock empty list of keys");
+      LockControlCommand command = commandsFactory.buildLockControlCommand(keys, true);
+      invoker.invoke(getInvocationContext(), command);
    }
 
    public void unlock(K key) {
-      // TODO: Customise this generated block
+      if (key == null)
+         throw new IllegalArgumentException("Cannot unlock null key");
+      List<K> keys = new ArrayList<K>(1);
+      keys.add(key);
+      unlock(keys);
    }
 
    public void unlock(Collection<? extends K> keys) {
-      // TODO: Customise this generated block
+      if (keys == null || keys.isEmpty())
+         throw new IllegalArgumentException("Cannot unlock empty list of keys");
+      LockControlCommand command = commandsFactory.buildLockControlCommand(keys, false);
+      invoker.invoke(getInvocationContext(), command);
    }
-
+   
    public void start() {
       componentRegistry.start();
       defaultLifespan = config.getExpirationLifespan();

Modified: trunk/core/src/main/java/org/infinispan/commands/LockControlCommand.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/commands/LockControlCommand.java	2009-05-12 02:58:05 UTC (rev 252)
+++ trunk/core/src/main/java/org/infinispan/commands/LockControlCommand.java	2009-05-12 08:42:40 UTC (rev 253)
@@ -23,51 +23,66 @@
 
 import java.util.Collection;
 
-import org.infinispan.commands.VisitableCommand;
-import org.infinispan.commands.Visitor;
+import org.infinispan.commands.tx.AbstractTransactionBoundaryCommand;
 import org.infinispan.context.InvocationContext;
 
 /**
  * 
- *
+ * 
  * @author Vladimir Blagojevic (<a href="mailto:vblagoje at redhat.com">vblagoje at redhat.com</a>)
- * @param 
+ * @param
  * @since 4.0
  */
-public class LockControlCommand implements VisitableCommand {
+public class LockControlCommand extends AbstractTransactionBoundaryCommand {
    private final Collection keys;
    private final boolean lock;
 
-   public LockControlCommand(Collection keys,boolean lock) {
-      this.keys=keys;
+   public LockControlCommand(Collection keys, boolean lock) {
+      this.keys = keys;
       this.lock = lock;
    }
 
+   public Collection getKeys() {
+      return keys;
+   }
+
+   public boolean isLock() {
+      return lock;
+   }
+
+   public boolean isUnlock() {
+      return !isLock();
+   }
+
    public Object acceptVisitor(InvocationContext ctx, Visitor visitor) throws Throwable {
       return visitor.visitLockControlCommand(ctx, this);
    }
 
-   public Boolean perform(InvocationContext ctx) throws Throwable {
-      return true;
-   }
-
    public byte getCommandId() {
-      return 0;  // no-op
+      return 0; // no-op
    }
 
-   public Object[] getParameters() {
-      return new Object[0];  // no-op
+   public boolean equals(Object o) {
+      if (this == o)
+         return true;
+      if (o == null || getClass() != o.getClass())
+         return false;
+
+      LockControlCommand that = (LockControlCommand) o;
+      if (!super.equals(that))
+         return false;
+      return keys.equals(that.getKeys());
    }
 
-   public void setParameters(int commandId, Object[] parameters) {
-      // no-op
+   public int hashCode() {
+      int result = super.hashCode();
+      result = 31 * result + (keys != null ? keys.hashCode() : 0);
+      result = 31 * result + (lock ? 1 : 0);
+      return result;
    }
 
    @Override
    public String toString() {
-      return "LockControlCommand{" +
-            "lock=" + lock +
-            "keys=" + keys +
-            '}';
+      return "LockControlCommand{" + "lock=" + lock + "keys=" + keys + '}';
    }
 }




More information about the infinispan-commits mailing list