[infinispan-commits] Infinispan SVN: r330 - in trunk/core/src/main/java/org/infinispan: commands and 2 other directories.
infinispan-commits at lists.jboss.org
infinispan-commits at lists.jboss.org
Wed May 20 17:01:53 EDT 2009
Author: vblagojevic at jboss.com
Date: 2009-05-20 17:01:52 -0400 (Wed, 20 May 2009)
New Revision: 330
Modified:
trunk/core/src/main/java/org/infinispan/AdvancedCache.java
trunk/core/src/main/java/org/infinispan/commands/AbstractVisitor.java
trunk/core/src/main/java/org/infinispan/commands/LockControlCommand.java
trunk/core/src/main/java/org/infinispan/commands/Visitor.java
trunk/core/src/main/java/org/infinispan/interceptors/CallInterceptor.java
trunk/core/src/main/java/org/infinispan/interceptors/DistributionInterceptor.java
trunk/core/src/main/java/org/infinispan/interceptors/LockingInterceptor.java
trunk/core/src/main/java/org/infinispan/interceptors/ReplicationInterceptor.java
trunk/core/src/main/java/org/infinispan/interceptors/TxInterceptor.java
trunk/core/src/main/java/org/infinispan/interceptors/base/BaseRpcInterceptor.java
Log:
[ISPN-48] - Introduce lock() and unlock() API methods
cleanup
javadoc
Modified: trunk/core/src/main/java/org/infinispan/AdvancedCache.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/AdvancedCache.java 2009-05-20 15:39:16 UTC (rev 329)
+++ trunk/core/src/main/java/org/infinispan/AdvancedCache.java 2009-05-20 21:01:52 UTC (rev 330)
@@ -83,8 +83,23 @@
ComponentRegistry getComponentRegistry();
+ /**
+ * Locks a given key eagerly across cache nodes in a cluster.
+ * <p>
+ * A key can be locked eagerly in the context of a transaction only
+ *
+ * @param key the key to lock
+ */
void lock(K key);
+ /**
+ * Locks collections of keys eagerly across cache nodes in a cluster.
+ * <p>
+ * Collections of keys can be locked eagerly in the context of a transaction only
+ *
+ *
+ * @param key the key to lock
+ */
void lock(Collection<? extends K> keys);
RpcManager getRpcManager();
Modified: trunk/core/src/main/java/org/infinispan/commands/AbstractVisitor.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/commands/AbstractVisitor.java 2009-05-20 15:39:16 UTC (rev 329)
+++ trunk/core/src/main/java/org/infinispan/commands/AbstractVisitor.java 2009-05-20 21:01:52 UTC (rev 330)
@@ -126,7 +126,7 @@
}
}
- public Object visitLockControlCommand(InvocationContext ctx, LockControlCommand command) throws Throwable{
+ public Object visitLockControlCommand(TxInvocationContext ctx, LockControlCommand command) throws Throwable{
return handleDefault(ctx, command);
}
}
\ No newline at end of file
Modified: trunk/core/src/main/java/org/infinispan/commands/LockControlCommand.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/commands/LockControlCommand.java 2009-05-20 15:39:16 UTC (rev 329)
+++ trunk/core/src/main/java/org/infinispan/commands/LockControlCommand.java 2009-05-20 21:01:52 UTC (rev 330)
@@ -25,6 +25,7 @@
import org.infinispan.commands.write.WriteCommand;
import org.infinispan.context.InvocationContext;
import org.infinispan.context.impl.RemoteTxInvocationContext;
+import org.infinispan.context.impl.TxInvocationContext;
import org.infinispan.transaction.xa.GlobalTransaction;
import org.infinispan.transaction.xa.RemoteTransaction;
@@ -54,6 +55,10 @@
public Collection getKeys() {
return keys;
}
+
+ public Object acceptVisitor(InvocationContext ctx, Visitor visitor) throws Throwable {
+ return visitor.visitLockControlCommand((TxInvocationContext) ctx, this);
+ }
@Override
public Object perform(InvocationContext ignored) throws Throwable {
@@ -72,10 +77,6 @@
return invoker.invoke(ctxt, this);
}
- public Object acceptVisitor(InvocationContext ctx, Visitor visitor) throws Throwable {
- return visitor.visitLockControlCommand(ctx, this);
- }
-
public byte getCommandId() {
return COMMAND_ID;
}
Modified: trunk/core/src/main/java/org/infinispan/commands/Visitor.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/commands/Visitor.java 2009-05-20 15:39:16 UTC (rev 329)
+++ trunk/core/src/main/java/org/infinispan/commands/Visitor.java 2009-05-20 21:01:52 UTC (rev 330)
@@ -73,5 +73,5 @@
Object visitInvalidateCommand(InvocationContext ctx, InvalidateCommand invalidateCommand) throws Throwable;
// locking commands
- Object visitLockControlCommand(InvocationContext ctx, LockControlCommand command) throws Throwable;
+ Object visitLockControlCommand(TxInvocationContext ctx, LockControlCommand command) throws Throwable;
}
\ No newline at end of file
Modified: trunk/core/src/main/java/org/infinispan/interceptors/CallInterceptor.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/interceptors/CallInterceptor.java 2009-05-20 15:39:16 UTC (rev 329)
+++ trunk/core/src/main/java/org/infinispan/interceptors/CallInterceptor.java 2009-05-20 21:01:52 UTC (rev 330)
@@ -59,7 +59,7 @@
}
@Override
- public Object visitLockControlCommand(InvocationContext ctx, LockControlCommand c) throws Throwable {
+ public Object visitLockControlCommand(TxInvocationContext ctx, LockControlCommand c) throws Throwable {
if (trace) log.trace("Suppressing invocation of method handleLockControlCommand.");
return null;
}
Modified: trunk/core/src/main/java/org/infinispan/interceptors/DistributionInterceptor.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/interceptors/DistributionInterceptor.java 2009-05-20 15:39:16 UTC (rev 329)
+++ trunk/core/src/main/java/org/infinispan/interceptors/DistributionInterceptor.java 2009-05-20 21:01:52 UTC (rev 330)
@@ -1,6 +1,7 @@
package org.infinispan.interceptors;
import org.infinispan.commands.CommandsFactory;
+import org.infinispan.commands.LockControlCommand;
import org.infinispan.commands.read.GetKeyValueCommand;
import org.infinispan.commands.tx.CommitCommand;
import org.infinispan.commands.tx.PrepareCommand;
@@ -165,6 +166,14 @@
return handleWriteCommand(ctx, command,
new SingleKeyRecipientGenerator(command.getKey()));
}
+
+ public Object visitLockControlCommand(TxInvocationContext ctx, LockControlCommand command) throws Throwable {
+ if (ctx.isOriginLocal()) {
+ List<Address> recipients = new ArrayList<Address>(ctx.getTransactionParticipants());
+ rpcManager.anycastRpcCommand(recipients, command, true, true);
+ }
+ return invokeNextInterceptor(ctx, command);
+ }
// ---- TX boundard commands
@Override
Modified: trunk/core/src/main/java/org/infinispan/interceptors/LockingInterceptor.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/interceptors/LockingInterceptor.java 2009-05-20 15:39:16 UTC (rev 329)
+++ trunk/core/src/main/java/org/infinispan/interceptors/LockingInterceptor.java 2009-05-20 21:01:52 UTC (rev 330)
@@ -137,7 +137,8 @@
}
@Override
- public Object visitLockControlCommand(InvocationContext ctx, LockControlCommand c) throws Throwable {
+ public Object visitLockControlCommand(TxInvocationContext ctx, LockControlCommand c)
+ throws Throwable {
try {
if (ctx.isOriginLocal() && ctx.isInTxScope()) {
c.attachGlobalTransaction((GlobalTransaction) ctx.getLockOwner());
@@ -147,7 +148,11 @@
}
return invokeNextInterceptor(ctx, c);
} finally {
- doAfterCall(ctx);
+ if (ctx.isInTxScope()) {
+ doAfterCall(ctx);
+ } else {
+ throw new IllegalStateException( "Attempting to lock but there is no transactional context in scope. " + ctx);
+ }
}
}
Modified: trunk/core/src/main/java/org/infinispan/interceptors/ReplicationInterceptor.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/interceptors/ReplicationInterceptor.java 2009-05-20 15:39:16 UTC (rev 329)
+++ trunk/core/src/main/java/org/infinispan/interceptors/ReplicationInterceptor.java 2009-05-20 21:01:52 UTC (rev 330)
@@ -66,16 +66,6 @@
}
@Override
- public Object visitLockControlCommand(InvocationContext ctx, LockControlCommand command) throws Throwable {
- Object retVal = invokeNextInterceptor(ctx, command);
- if (ctx.isOriginLocal()) {
- rpcManager.broadcastRpcCommand(command, true, false);
- }
- return retVal;
- }
-
-
- @Override
public Object visitRollbackCommand(TxInvocationContext ctx, RollbackCommand command) throws Throwable {
if (ctx.isOriginLocal() && !configuration.isOnePhaseCommit()) {
rpcManager.broadcastRpcCommand(command, configuration.isSyncRollbackPhase(), true);
Modified: trunk/core/src/main/java/org/infinispan/interceptors/TxInterceptor.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/interceptors/TxInterceptor.java 2009-05-20 15:39:16 UTC (rev 329)
+++ trunk/core/src/main/java/org/infinispan/interceptors/TxInterceptor.java 2009-05-20 21:01:52 UTC (rev 330)
@@ -111,7 +111,7 @@
}
@Override
- public Object visitLockControlCommand(InvocationContext ctx, LockControlCommand command) throws Throwable {
+ public Object visitLockControlCommand(TxInvocationContext ctx, LockControlCommand command) throws Throwable {
return enlistReadAndInvokeNext(ctx, command);
}
Modified: trunk/core/src/main/java/org/infinispan/interceptors/base/BaseRpcInterceptor.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/interceptors/base/BaseRpcInterceptor.java 2009-05-20 15:39:16 UTC (rev 329)
+++ trunk/core/src/main/java/org/infinispan/interceptors/base/BaseRpcInterceptor.java 2009-05-20 21:01:52 UTC (rev 330)
@@ -21,8 +21,10 @@
*/
package org.infinispan.interceptors.base;
+import org.infinispan.commands.LockControlCommand;
import org.infinispan.context.Flag;
import org.infinispan.context.InvocationContext;
+import org.infinispan.context.impl.TxInvocationContext;
import org.infinispan.factories.annotations.Inject;
import org.infinispan.factories.annotations.Start;
import org.infinispan.remoting.rpc.RpcManager;
@@ -49,7 +51,17 @@
public void init() {
defaultSynchronous = configuration.getCacheMode().isSynchronous();
}
+
+ @Override
+ public Object visitLockControlCommand(TxInvocationContext ctx, LockControlCommand command) throws Throwable {
+ Object retVal = invokeNextInterceptor(ctx, command);
+ if (ctx.isOriginLocal()) {
+ rpcManager.broadcastRpcCommand(command, true, false);
+ }
+ return retVal;
+ }
+
protected final boolean isSynchronous(InvocationContext ctx) {
if (ctx.hasFlag(Flag.FORCE_SYNCHRONOUS))
return true;
More information about the infinispan-commits
mailing list