[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