[infinispan-commits] Infinispan SVN: r275 - in trunk/core/src/main/java/org/infinispan: context/impl and 4 other directories.
infinispan-commits at lists.jboss.org
infinispan-commits at lists.jboss.org
Wed May 13 04:12:39 EDT 2009
Author: mircea.markus
Date: 2009-05-13 04:12:39 -0400 (Wed, 13 May 2009)
New Revision: 275
Modified:
trunk/core/src/main/java/org/infinispan/context/InvocationContext.java
trunk/core/src/main/java/org/infinispan/context/InvocationContextContainer.java
trunk/core/src/main/java/org/infinispan/context/InvocationContextContainerImpl.java
trunk/core/src/main/java/org/infinispan/context/impl/AbstractTxInvocationContext.java
trunk/core/src/main/java/org/infinispan/context/impl/LocalTxInvocationContext.java
trunk/core/src/main/java/org/infinispan/context/impl/NonTxInvocationContext.java
trunk/core/src/main/java/org/infinispan/context/impl/RemoteTxInvocationContext.java
trunk/core/src/main/java/org/infinispan/context/impl/TxInvocationContext.java
trunk/core/src/main/java/org/infinispan/interceptors/TxInterceptor.java
trunk/core/src/main/java/org/infinispan/remoting/rpc/CacheRpcManager.java
trunk/core/src/main/java/org/infinispan/transaction/tm/DummyXid.java
trunk/core/src/main/java/org/infinispan/transaction/xa/CacheTransaction.java
trunk/core/src/main/java/org/infinispan/transaction/xa/RemoteTransaction.java
trunk/core/src/main/java/org/infinispan/transaction/xa/TransactionTable.java
trunk/core/src/main/java/org/infinispan/transaction/xa/TransactionXaAdapter.java
Log:
updated javadocs
Modified: trunk/core/src/main/java/org/infinispan/context/InvocationContext.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/context/InvocationContext.java 2009-05-13 06:57:55 UTC (rev 274)
+++ trunk/core/src/main/java/org/infinispan/context/InvocationContext.java 2009-05-13 08:12:39 UTC (rev 275)
@@ -31,18 +31,30 @@
*/
public interface InvocationContext extends EntryLookup, FlagContainer, Cloneable {
+ /**
+ * Returns true if the call was originated locally, false if it is the result of a remote rpc.
+ */
boolean isOriginLocal();
+ /**
+ * Returns true if this call is performed in the context of an transaction, false otherwise.
+ */
boolean isInTxScope();
+ /**
+ * Returns the in behalf of which locks will be aquired.
+ */
Object getLockOwner();
- public InvocationContext clone();
-
+ /**
+ * Returns true if the context has any locked entries associated with it.
+ */
boolean hasLockedEntries();
boolean isUseFutureReturnType();
void setUseFutureReturnType(boolean useFutureReturnType);
+ public InvocationContext clone();
+
}
Modified: trunk/core/src/main/java/org/infinispan/context/InvocationContextContainer.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/context/InvocationContextContainer.java 2009-05-13 06:57:55 UTC (rev 274)
+++ trunk/core/src/main/java/org/infinispan/context/InvocationContextContainer.java 2009-05-13 08:12:39 UTC (rev 275)
@@ -7,7 +7,8 @@
import org.infinispan.factories.scopes.Scopes;
/**
- * // TODO: Mircea: Document this!
+ * Manages the association between an {@link org.infinispan.context.InvocationContext} and the calling thread. Also acts
+ * as a factory for creating various types of {@link org.infinispan.context.InvocationContext}s.
*
* @author Manik Surtani (<a href="mailto:manik at jboss.org">manik at jboss.org</a>)
* @author Mircea.Markus at jboss.com
@@ -16,17 +17,50 @@
@NonVolatile
@Scope(Scopes.NAMED_CACHE)
public interface InvocationContextContainer {
+
+ /**
+ * If we are in a tx scope this will return an {@link org.infinispan.context.impl.TxInvocationContext}. Otherwise it
+ * will return an {@link org.infinispan.context.impl.NonTxInvocationContext}. Either way, both context will be marked
+ * as local, i.e. {@link InvocationContext#isOriginLocal()} will be true. The context is also associated with the
+ * current thread, so further calls to {@link #getThreadContext()} will return same instace.
+ */
InvocationContext getLocalInvocationContext();
+ /**
+ * Returns a {@link org.infinispan.context.impl.LocalTxInvocationContext}. The context is also associated with the
+ * current thread, so further calls to {@link #getThreadContext()} will return same instace.
+ */
LocalTxInvocationContext getLocalTxInvocationContext();
+ /**
+ * Returns an {@link org.infinispan.context.impl.RemoteTxInvocationContext}. The context is also associated with the
+ * current thread, so further calls to {@link #getThreadContext()} will return same instace.
+ */
RemoteTxInvocationContext getRemoteTxInvocationContext();
+ /**
+ * Returns an {@link org.infinispan.context.impl.NonTxInvocationContext} whose {@link
+ * org.infinispan.context.impl.NonTxInvocationContext#isOriginLocal()} flag will be true. The context is also
+ * associated with the current thread, so further calls to {@link #getThreadContext()} will return same instace.
+ */
InvocationContext getRemoteNonTxInvocationContext();
+ /**
+ * Returns the {@link InvocationContext} that is currently associated with the calling thread. Important:
+ * implementations of this metrhod is most likely expensive (ThreadLocal.get), it is recommanded to cache the result
+ * of this method rather than repeting the call.
+ *
+ * @throws IllegalStateException if there is no context associated with the current thread.
+ */
InvocationContext getThreadContext();
+ /**
+ * Dissasociates thread's invocation context and returns the existing value.
+ */
InvocationContext suspend();
+ /**
+ * Associates the supplied {@link InvocationContext} with the calling thread.
+ */
void resume(InvocationContext ic);
}
Modified: trunk/core/src/main/java/org/infinispan/context/InvocationContextContainerImpl.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/context/InvocationContextContainerImpl.java 2009-05-13 06:57:55 UTC (rev 274)
+++ trunk/core/src/main/java/org/infinispan/context/InvocationContextContainerImpl.java 2009-05-13 08:12:39 UTC (rev 275)
@@ -38,9 +38,10 @@
/**
- * Container and factory for thread locals
+ * Default implementation for {@link org.infinispan.context.InvocationContextContainer}.
*
* @author Manik Surtani (<a href="mailto:manik at jboss.org">manik at jboss.org</a>)
+ * @author Mircea.Markus at jboss.com
* @since 4.0
*/
public class InvocationContextContainerImpl implements InvocationContextContainer {
Modified: trunk/core/src/main/java/org/infinispan/context/impl/AbstractTxInvocationContext.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/context/impl/AbstractTxInvocationContext.java 2009-05-13 06:57:55 UTC (rev 274)
+++ trunk/core/src/main/java/org/infinispan/context/impl/AbstractTxInvocationContext.java 2009-05-13 08:12:39 UTC (rev 275)
@@ -12,7 +12,7 @@
import java.util.Set;
/**
- * // TODO: Mircea: Document this!
+ * Support class for {@link org.infinispan.context.impl.TxInvocationContext}.
*
* @author Mircea.Markus at jboss.com
* @since 4.0
Modified: trunk/core/src/main/java/org/infinispan/context/impl/LocalTxInvocationContext.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/context/impl/LocalTxInvocationContext.java 2009-05-13 06:57:55 UTC (rev 274)
+++ trunk/core/src/main/java/org/infinispan/context/impl/LocalTxInvocationContext.java 2009-05-13 08:12:39 UTC (rev 275)
@@ -11,7 +11,7 @@
import java.util.Map;
/**
- * // TODO: Mircea: Document this!
+ * Invocation context to be used for locally originated transactions.
*
* @author Mircea.Markus at jboss.com
* @since 4.0
Modified: trunk/core/src/main/java/org/infinispan/context/impl/NonTxInvocationContext.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/context/impl/NonTxInvocationContext.java 2009-05-13 06:57:55 UTC (rev 274)
+++ trunk/core/src/main/java/org/infinispan/context/impl/NonTxInvocationContext.java 2009-05-13 08:12:39 UTC (rev 275)
@@ -8,7 +8,7 @@
import java.util.Map;
/**
- * // TODO: Mircea: Document this!
+ * Context to be used for non transactional calls, both remote and local.
*
* @author Mircea.Markus at jboss.com
* @since 4.0
Modified: trunk/core/src/main/java/org/infinispan/context/impl/RemoteTxInvocationContext.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/context/impl/RemoteTxInvocationContext.java 2009-05-13 06:57:55 UTC (rev 274)
+++ trunk/core/src/main/java/org/infinispan/context/impl/RemoteTxInvocationContext.java 2009-05-13 08:12:39 UTC (rev 275)
@@ -11,7 +11,7 @@
import java.util.Map;
/**
- * // TODO: Mircea: Document this!
+ * Context to be used for transaction that originated remotelly.
*
* @author Mircea.Markus at jboss.com
* @since 4.0
Modified: trunk/core/src/main/java/org/infinispan/context/impl/TxInvocationContext.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/context/impl/TxInvocationContext.java 2009-05-13 06:57:55 UTC (rev 274)
+++ trunk/core/src/main/java/org/infinispan/context/impl/TxInvocationContext.java 2009-05-13 08:12:39 UTC (rev 275)
@@ -10,24 +10,49 @@
import java.util.Set;
/**
- * // TODO: Mircea: Document this!
+ * Interface defining additional functionality for invocation contexts that propagate within a transaction's scope.
*
* @author Mircea.Markus at jboss.com
* @since 4.0
*/
public interface TxInvocationContext extends InvocationContext {
+ /**
+ * Were there any modifications performed within the tx's scope?
+ */
public boolean hasModifications();
+ /**
+ * Returns the set of cluster participants (identified through {@link org.infinispan.remoting.transport.Address}
+ * objects) that participate within the transaction. Null indicates all cluster members.
+ */
Set<Address> getTransactionParticipants();
+ /**
+ * Returns the id of the transaction assoctiated with the current call.
+ */
GlobalTransaction getGlobalTransaction();
+ /**
+ * Returns all the modifications performed in the scope of the current transaction.
+ */
List<WriteCommand> getModifications();
+ /**
+ * Returns the tx associated with the current thread. This method MUST be guarded with a call to {@link
+ * #isOriginLocal()}, as {@link javax.transaction.Transaction} are not propagated from the node where tx was
+ * started.
+ * @throws IllegalStateException if the call is performed from a {@link #isOriginLocal()}==false context.
+ */
Transaction getRunningTransaction();
+ /**
+ * Returns true if the current tx is either ACTIVE or PREPARING, false otherwise.
+ */
boolean isValidRunningTx();
+ /**
+ * Registers a new participant with the transaction.
+ */
void addTransactionParticipants(List<Address> addresses);
}
Modified: trunk/core/src/main/java/org/infinispan/interceptors/TxInterceptor.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/interceptors/TxInterceptor.java 2009-05-13 06:57:55 UTC (rev 274)
+++ trunk/core/src/main/java/org/infinispan/interceptors/TxInterceptor.java 2009-05-13 08:12:39 UTC (rev 275)
@@ -36,11 +36,13 @@
import java.util.concurrent.atomic.AtomicLong;
/**
- * // TODO: Mircea: Document this!
+ * Interceptor in charge with handling transaction related operations, e.g enlisting cache as an transaction participant,
+ * propagating remotely initiated changes.
*
* @author <a href="mailto:manik at jboss.org">Manik Surtani (manik at jboss.org)</a>
* @author Mircea.Markus at jboss.com
* @since 4.0
+ * @see org.infinispan.transaction.xa.TransactionXaAdapter
*/
public class TxInterceptor extends CommandInterceptor {
Modified: trunk/core/src/main/java/org/infinispan/remoting/rpc/CacheRpcManager.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/remoting/rpc/CacheRpcManager.java 2009-05-13 06:57:55 UTC (rev 274)
+++ trunk/core/src/main/java/org/infinispan/remoting/rpc/CacheRpcManager.java 2009-05-13 08:12:39 UTC (rev 275)
@@ -17,7 +17,7 @@
import java.util.List;
/**
- * // TODO: Mircea: Document this!
+ * Class that encapsulates the logic for replicating commands through cluster participants.
*
* @author Mircea.Markus at jboss.com
* @since 4.0
@@ -87,10 +87,10 @@
if (trace) log.trace("responses=" + rsps);
if (sync) checkResponses(rsps);
} catch (CacheException e) {
- log.error("Replication exception",e);
+ log.error("Replication exception", e);
throw e;
} catch (Exception ex) {
- log.error("Unexpected exception",ex);
+ log.error("Unexpected exception", ex);
throw new ReplicationException("Unexpected exception while replicating", ex);
}
}
Modified: trunk/core/src/main/java/org/infinispan/transaction/tm/DummyXid.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/transaction/tm/DummyXid.java 2009-05-13 06:57:55 UTC (rev 274)
+++ trunk/core/src/main/java/org/infinispan/transaction/tm/DummyXid.java 2009-05-13 08:12:39 UTC (rev 275)
@@ -4,9 +4,10 @@
import java.util.concurrent.atomic.AtomicInteger;
/**
- * // TODO: Mircea: Document this!
+ * Implementation of Xid.
*
- * @author
+ * @author Mircea.Markus at jboss.com
+ * @since 4.0
*/
public class DummyXid implements Xid {
Modified: trunk/core/src/main/java/org/infinispan/transaction/xa/CacheTransaction.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/transaction/xa/CacheTransaction.java 2009-05-13 06:57:55 UTC (rev 274)
+++ trunk/core/src/main/java/org/infinispan/transaction/xa/CacheTransaction.java 2009-05-13 08:12:39 UTC (rev 275)
@@ -8,16 +8,24 @@
import java.util.Map;
/**
- * // TODO: Mircea: Document this!
+ * Defines the state a infinispan transaction should have.
*
- * @author
+ * @author Mircea.Markus at jboss.com
+ * @since 4.0
*/
public interface CacheTransaction {
+ /**
+ * Returns the transaction identifier.
+ */
public GlobalTransaction getGlobalTransaction();
+ /**
+ * Returns the modifications visible within the current transaction.
+ */
public List<WriteCommand> getModifications();
+
public CacheEntry lookupEntry(Object key);
public BidirectionalMap<Object, CacheEntry> getLookedUpEntries();
Modified: trunk/core/src/main/java/org/infinispan/transaction/xa/RemoteTransaction.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/transaction/xa/RemoteTransaction.java 2009-05-13 06:57:55 UTC (rev 274)
+++ trunk/core/src/main/java/org/infinispan/transaction/xa/RemoteTransaction.java 2009-05-13 08:12:39 UTC (rev 275)
@@ -11,9 +11,10 @@
import java.util.Map;
/**
- * // TODO: Mircea: Document this!
+ * Defines the state of a remotelly originated transaction.
*
- * @author
+ * @author Mircea.Markus at jboss.com
+ * @since 4.0
*/
public class RemoteTransaction implements CacheTransaction, Cloneable {
Modified: trunk/core/src/main/java/org/infinispan/transaction/xa/TransactionTable.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/transaction/xa/TransactionTable.java 2009-05-13 06:57:55 UTC (rev 274)
+++ trunk/core/src/main/java/org/infinispan/transaction/xa/TransactionTable.java 2009-05-13 08:12:39 UTC (rev 275)
@@ -19,13 +19,16 @@
import java.util.Map;
/**
- * // TODO: Mircea: Document this!
+ * Repository for {@link org.infinispan.transaction.xa.RemoteTransaction} and {@link
+ * org.infinispan.transaction.xa.TransactionXaAdapter}s (locally originated trasactions).
*
- * @author
+ * @author Mircea.Markus at jboss.com
+ * @since 4.0
*/
public class TransactionTable {
private static Log log = LogFactory.getLog(TransactionTable.class);
+ private static boolean trace = log.isTraceEnabled();
private Map<Transaction, TransactionXaAdapter> localTransactions = new HashMap<Transaction, TransactionXaAdapter>();
@@ -48,13 +51,23 @@
this.icc = icc;
this.invoker = invoker;
this.notifier = notifier;
- }
+ }
+ /**
+ * Returns the {@link org.infinispan.transaction.xa.RemoteTransaction} associated with the supplied transaction id.
+ * Returns null if no such association exists.
+ */
public RemoteTransaction getRemoteTransaction(GlobalTransaction txId) {
return remoteTransactions.get(txId);
}
+ /**
+ * Creates and register a {@link org.infinispan.transaction.xa.RemoteTransaction} based on the supplied params.
+ * Returns the created transaction.
+ * @throws IllegalStateException if an attempt to create a {@link org.infinispan.transaction.xa.RemoteTransaction}
+ * for an already registered id is made.
+ */
public RemoteTransaction createRemoteTransaction(GlobalTransaction globalTx, WriteCommand[] modifications) {
RemoteTransaction remoteTransaction = new RemoteTransaction(modifications, globalTx);
RemoteTransaction transaction = remoteTransactions.put(globalTx, remoteTransaction);
@@ -63,12 +76,16 @@
log.error(message);
throw new IllegalStateException(message);
}
- if (log.isTraceEnabled()) {
+ if (trace) {
log.trace("Created and regostered tremote transaction " + remoteTransaction);
}
return remoteTransaction;
}
+ /**
+ * Returns the {@link org.infinispan.transaction.xa.TransactionXaAdapter} corresponding to the supplied transaction.
+ * If none exists, will be created first.
+ */
public TransactionXaAdapter getOrCreateXaAdapter(Transaction transaction, InvocationContext ctx) {
TransactionXaAdapter current = localTransactions.get(transaction);
if (current == null) {
@@ -87,10 +104,18 @@
return current;
}
+ /**
+ * Removes the {@link org.infinispan.transaction.xa.TransactionXaAdapter} coresponding to the given tx. Returns true
+ * if such an tx exists.
+ */
public boolean removeLocalTransaction(Transaction tx) {
return localTransactions.remove(tx) != null;
}
+ /**
+ * Removes the {@link org.infinispan.transaction.xa.RemoteTransaction} coresponding to the given tx. Returns true
+ * if such an tx exists.
+ */
public boolean removeRemoteTransaction(GlobalTransaction txId) {
return remoteTransactions.remove(txId) != null;
}
Modified: trunk/core/src/main/java/org/infinispan/transaction/xa/TransactionXaAdapter.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/transaction/xa/TransactionXaAdapter.java 2009-05-13 06:57:55 UTC (rev 274)
+++ trunk/core/src/main/java/org/infinispan/transaction/xa/TransactionXaAdapter.java 2009-05-13 08:12:39 UTC (rev 275)
@@ -25,7 +25,8 @@
import java.util.Map;
/**
- * // TODO: Mircea: Document this!
+ * This acts both as an local {@link org.infinispan.transaction.xa.CacheTransaction} and implementor of an
+ * {@link javax.transaction.xa.XAResource} that will be called by tx manager on various tx stages.
*
* @author Mircea.Markus at jboss.com
* @since 4.0
More information about the infinispan-commits
mailing list