[infinispan-commits] Infinispan SVN: r268 - in trunk/core/src/main/java/org/infinispan: notifications/cachelistener and 1 other directories.

infinispan-commits at lists.jboss.org infinispan-commits at lists.jboss.org
Wed May 13 00:31:16 EDT 2009


Author: mircea.markus
Date: 2009-05-13 00:31:16 -0400 (Wed, 13 May 2009)
New Revision: 268

Modified:
   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/notifications/cachelistener/CacheNotifierImpl.java
   trunk/core/src/main/java/org/infinispan/transaction/xa/TransactionXaAdapter.java
Log:
more efficient InvocationContextontainerImpl

Modified: trunk/core/src/main/java/org/infinispan/context/InvocationContextContainer.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/context/InvocationContextContainer.java	2009-05-13 03:15:11 UTC (rev 267)
+++ trunk/core/src/main/java/org/infinispan/context/InvocationContextContainer.java	2009-05-13 04:31:16 UTC (rev 268)
@@ -18,7 +18,7 @@
 public interface InvocationContextContainer {
    InvocationContext getLocalInvocationContext();
 
-   LocalTxInvocationContext getInitiatorTxInvocationContext();
+   LocalTxInvocationContext getLocalTxInvocationContext();
 
    RemoteTxInvocationContext getRemoteTxInvocationContext();
 
@@ -26,7 +26,7 @@
 
    InvocationContext getThreadContext();
 
-   Object suspend();
+   InvocationContext suspend();
 
-   void resume(Object backup);
+   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 03:15:11 UTC (rev 267)
+++ trunk/core/src/main/java/org/infinispan/context/InvocationContextContainerImpl.java	2009-05-13 04:31:16 UTC (rev 268)
@@ -52,14 +52,8 @@
    private TransactionManager tm;
    private TransactionTable transactionTable;
 
+   ThreadLocal<InvocationContext> icTl = new ThreadLocal<InvocationContext>();
 
-   private ThreadLocal<PossibleContexts> contextsTl = new ThreadLocal<PossibleContexts>() {
-      @Override
-      protected PossibleContexts initialValue() {
-         return new PossibleContexts();
-      }
-   };
-
    private Map<GlobalTransaction, RemoteTxInvocationContext> remoteTxMap = new ConcurrentHashMap<GlobalTransaction, RemoteTxInvocationContext>(20);
 
    @Inject
@@ -69,98 +63,84 @@
    }
 
    public InvocationContext getLocalInvocationContext() {
-      PossibleContexts contexts = contextsTl.get();
       Transaction tx = getRunningTx();
+      InvocationContext existing = icTl.get();
       if (tx != null) {
-         contexts.initInitiatorInvicationContext();
-         LocalTxInvocationContext context = contexts.localTxInvocationContext;
+         LocalTxInvocationContext localContext;
+         if ((existing == null) || !(existing instanceof LocalTxInvocationContext)) {
+            localContext = new LocalTxInvocationContext();
+            icTl.set(localContext);
+         } else {
+            localContext = (LocalTxInvocationContext) existing;
+         }
          TransactionXaAdapter xaAdapter = transactionTable.getXaCacheAdapter(tx);
-         context.setXaCache(xaAdapter);
-         return contexts.updateThreadContextAndReturn(context);
+         localContext.setXaCache(xaAdapter);
+         return localContext;
       } else {
-         contexts.initNonTxInvocationContext();
-         contexts.nonTxInvocationContext.prepareForCall();
-         contexts.nonTxInvocationContext.setOriginLocal(true);
-         return contexts.updateThreadContextAndReturn(contexts.nonTxInvocationContext);
+         NonTxInvocationContext nonTxContext;
+         if ((existing == null) || !(existing instanceof NonTxInvocationContext)) {
+            nonTxContext = new NonTxInvocationContext();
+            icTl.set(nonTxContext);
+         } else {
+            nonTxContext = (NonTxInvocationContext) existing;
+         }
+         nonTxContext.prepareForCall();
+         nonTxContext.setOriginLocal(true);
+         return nonTxContext;
       }
    }
 
-   public LocalTxInvocationContext getInitiatorTxInvocationContext() {
-      PossibleContexts contexts = contextsTl.get();
-      contexts.initInitiatorInvicationContext();
-      contexts.updateThreadContextAndReturn(contexts.localTxInvocationContext);
-      return contexts.localTxInvocationContext;
+   public LocalTxInvocationContext getLocalTxInvocationContext() {
+      InvocationContext existing = icTl.get();
+      if (existing != null && existing instanceof LocalTxInvocationContext) {
+         return (LocalTxInvocationContext) existing;
+      }
+      LocalTxInvocationContext localTxContext = new LocalTxInvocationContext();
+      icTl.set(localTxContext);
+      return localTxContext;
    }
 
    public RemoteTxInvocationContext getRemoteTxInvocationContext() {
-      PossibleContexts contexts = contextsTl.get();
-      contexts.initRemoteTxInvocationContext();
-      contexts.updateThreadContextAndReturn(contexts.remoteTxContext);
-      return contexts.remoteTxContext;
+      InvocationContext existing = icTl.get();
+      if (existing != null && existing instanceof RemoteTxInvocationContext) {
+         return (RemoteTxInvocationContext) existing;
+      }
+      RemoteTxInvocationContext remoteTxContext = new RemoteTxInvocationContext();
+      icTl.set(remoteTxContext);
+      return remoteTxContext;
    }
 
-   public InvocationContext getRemoteNonTxInvocationContext() {
-      PossibleContexts contexts = contextsTl.get();
-      contexts.initRemoteNonTxInvocationContext();
-      contexts.remoteNonTxContext.prepareForCall();
-      return contexts.updateThreadContextAndReturn(contexts.remoteNonTxContext);
+   public NonTxInvocationContext getRemoteNonTxInvocationContext() {
+      InvocationContext existing = icTl.get();
+      if (existing != null && existing instanceof NonTxInvocationContext) {
+         NonTxInvocationContext context = (NonTxInvocationContext) existing;
+         context.prepareForCall();
+         context.setOriginLocal(false);
+         return context;
+      }
+      NonTxInvocationContext remoteNonTxContext = new NonTxInvocationContext();
+      remoteNonTxContext.setOriginLocal(false);
+      icTl.set(remoteNonTxContext);
+      return remoteNonTxContext;
    }
 
    public InvocationContext getThreadContext() {
-      InvocationContext invocationContext = contextsTl.get().threadInvocationContex;
+      InvocationContext invocationContext = icTl.get();
       if (invocationContext == null)
          throw new IllegalStateException("This method can only be called after associating the current thread with a context");
       return invocationContext;
    }
 
-
-   public Object suspend() {
-      PossibleContexts result = contextsTl.get();
-      contextsTl.remove();
-      return result;
+   public InvocationContext suspend() {
+      InvocationContext invocationContext = icTl.get();
+      icTl.remove();
+      return invocationContext;
    }
 
-   public void resume(Object backup) {
-      contextsTl.set((PossibleContexts) backup);
+   public void resume(InvocationContext ctxt) {
+      if (ctxt != null) icTl.set(ctxt);
    }
 
-   public static class PossibleContexts {
-      private NonTxInvocationContext nonTxInvocationContext;
-      private LocalTxInvocationContext localTxInvocationContext;
-      private NonTxInvocationContext remoteNonTxContext;
-      private RemoteTxInvocationContext remoteTxContext;
-      private InvocationContext threadInvocationContex;
-
-      public void initInitiatorInvicationContext() {
-         if (localTxInvocationContext == null) {
-            localTxInvocationContext = new LocalTxInvocationContext();
-         }
-      }
-
-      public void initNonTxInvocationContext() {
-         if (nonTxInvocationContext == null) {
-            nonTxInvocationContext = new NonTxInvocationContext();
-         }
-      }
-
-      public void initRemoteNonTxInvocationContext() {
-         if (remoteNonTxContext == null) {
-            remoteNonTxContext = new NonTxInvocationContext();
-         }
-      }
-
-      public void initRemoteTxInvocationContext() {
-         if (remoteTxContext == null) {
-            remoteTxContext = new RemoteTxInvocationContext();
-         }
-      }
-
-      public InvocationContext updateThreadContextAndReturn(InvocationContext ic) {
-         threadInvocationContex = ic;
-         return ic;
-      }
-   }
-
    private Transaction getRunningTx() {
       try {
          return tm == null ? null : tm.getTransaction();

Modified: trunk/core/src/main/java/org/infinispan/notifications/cachelistener/CacheNotifierImpl.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/notifications/cachelistener/CacheNotifierImpl.java	2009-05-13 03:15:11 UTC (rev 267)
+++ trunk/core/src/main/java/org/infinispan/notifications/cachelistener/CacheNotifierImpl.java	2009-05-13 04:31:16 UTC (rev 268)
@@ -114,7 +114,7 @@
    public void notifyCacheEntryCreated(Object key, boolean pre, InvocationContext ctx) {
       if (!cacheEntryCreatedListeners.isEmpty()) {
          boolean originLocal = ctx.isOriginLocal();
-         Object contexts = icc.suspend();
+         InvocationContext contexts = icc.suspend();
          EventImpl e = new EventImpl();
          e.setCache(cache);
          e.setOriginLocal(originLocal);
@@ -130,7 +130,7 @@
    public void notifyCacheEntryModified(Object key, Object value, boolean pre, InvocationContext ctx) {
       if (!cacheEntryModifiedListeners.isEmpty()) {
          boolean originLocal = ctx.isOriginLocal();
-         Object contexts = icc.suspend();
+         InvocationContext contexts = icc.suspend();
          EventImpl e = new EventImpl();
          e.setCache(cache);
          e.setOriginLocal(originLocal);
@@ -147,7 +147,7 @@
    public void notifyCacheEntryRemoved(Object key, Object value, boolean pre, InvocationContext ctx) {
       if (!cacheEntryRemovedListeners.isEmpty()) {
          boolean originLocal = ctx.isOriginLocal();
-         Object contexts = icc.suspend();
+         InvocationContext contexts = icc.suspend();
          EventImpl e = new EventImpl();
          e.setCache(cache);
          e.setOriginLocal(originLocal);
@@ -163,7 +163,7 @@
 
    public void notifyCacheEntryVisited(Object key, boolean pre, InvocationContext ctx) {
       if (!cacheEntryVisitedListeners.isEmpty()) {
-         Object contexts = icc.suspend();
+         InvocationContext contexts = icc.suspend();
          EventImpl e = new EventImpl();
          e.setCache(cache);
          e.setPre(pre);
@@ -178,7 +178,7 @@
    public void notifyCacheEntryEvicted(final Object key, final boolean pre, InvocationContext ctx) {
       if (!cacheEntryEvictedListeners.isEmpty()) {
          final boolean originLocal = ctx.isOriginLocal();
-         Object contexts = icc.suspend();
+         InvocationContext contexts = icc.suspend();
          EventImpl e = new EventImpl();
          e.setCache(cache);
          e.setOriginLocal(originLocal);
@@ -194,7 +194,7 @@
    public void notifyCacheEntryInvalidated(final Object key, final boolean pre, InvocationContext ctx) {
       if (!cacheEntryInvalidatedListeners.isEmpty()) {
          final boolean originLocal = ctx.isOriginLocal();
-         Object contexts = icc.suspend();
+         InvocationContext contexts = icc.suspend();
          EventImpl e = new EventImpl();
          e.setCache(cache);
          e.setOriginLocal(originLocal);
@@ -210,7 +210,7 @@
    public void notifyCacheEntryLoaded(Object key, boolean pre, InvocationContext ctx) {
       if (!cacheEntryLoadedListeners.isEmpty()) {
          boolean originLocal = ctx.isOriginLocal();
-         Object contexts = icc.suspend();
+         InvocationContext contexts = icc.suspend();
          EventImpl e = new EventImpl();
          e.setCache(cache);
          e.setOriginLocal(originLocal);
@@ -226,7 +226,7 @@
    public void notifyCacheEntryActivated(Object key, boolean pre, InvocationContext ctx) {
       if (!cacheEntryActivatedListeners.isEmpty()) {
          boolean originLocal = ctx.isOriginLocal();
-         Object contexts = icc.suspend();
+         InvocationContext contexts = icc.suspend();
          EventImpl e = new EventImpl();
          e.setCache(cache);
          e.setOriginLocal(originLocal);
@@ -248,7 +248,7 @@
 
    public void notifyCacheEntryPassivated(Object key, boolean pre, InvocationContext ctx) {
       if (!cacheEntryPassivatedListeners.isEmpty()) {
-         Object contexts = icc.suspend();
+         InvocationContext contexts = icc.suspend();
          EventImpl e = new EventImpl();
          e.setCache(cache);
          e.setPre(pre);
@@ -263,7 +263,7 @@
    public void notifyTransactionCompleted(GlobalTransaction transaction, boolean successful, InvocationContext ctx) {
       if (!transactionCompletedListeners.isEmpty()) {
          boolean isOriginLocal = ctx.isOriginLocal();
-         Object contexts = icc.suspend();
+         InvocationContext contexts = icc.suspend();
          EventImpl e = new EventImpl();
          e.setCache(cache);
          e.setOriginLocal(isOriginLocal);
@@ -278,7 +278,7 @@
    public void notifyTransactionRegistered(GlobalTransaction globalTransaction, InvocationContext ctx) {
       if (!transactionRegisteredListeners.isEmpty()) {
          boolean isOriginLocal = ctx.isOriginLocal();
-         Object contexts = icc.suspend();
+         InvocationContext contexts = icc.suspend();
          EventImpl e = new EventImpl();
          e.setCache(cache);
          e.setOriginLocal(isOriginLocal);

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 03:15:11 UTC (rev 267)
+++ trunk/core/src/main/java/org/infinispan/transaction/xa/TransactionXaAdapter.java	2009-05-13 04:31:16 UTC (rev 268)
@@ -78,7 +78,7 @@
       PrepareCommand prepareCommand = commandsFactory.buildPrepareCommand(globalTx, modifications, configuration.isOnePhaseCommit());
       if (log.isTraceEnabled()) log.trace("Sending prepare command through the chain: " + prepareCommand);
 
-      LocalTxInvocationContext ctx = icc.getInitiatorTxInvocationContext();
+      LocalTxInvocationContext ctx = icc.getLocalTxInvocationContext();
       ctx.setXaCache(this);
       try {
          invoker.invoke(ctx, prepareCommand);
@@ -92,7 +92,7 @@
    public void commit(Xid xid, boolean b) throws XAException {
       if (log.isTraceEnabled()) log.trace("commiting TransactionXaAdapter: " + globalTx);
       try {
-         LocalTxInvocationContext ctx = icc.getInitiatorTxInvocationContext();
+         LocalTxInvocationContext ctx = icc.getLocalTxInvocationContext();
          ctx.setXaCache(this);
          if (configuration.isOnePhaseCommit()) {
             if (log.isTraceEnabled()) log.trace("Doing an 1PC prepare call on the interceptor chain");
@@ -120,7 +120,7 @@
 
    public void rollback(Xid xid) throws XAException {
       RollbackCommand rollbackCommand = commandsFactory.buildRollbackCommand(globalTx);
-      LocalTxInvocationContext ctx = icc.getInitiatorTxInvocationContext();
+      LocalTxInvocationContext ctx = icc.getLocalTxInvocationContext();
       ctx.setXaCache(this);
       try {
          invoker.invoke(ctx, rollbackCommand);




More information about the infinispan-commits mailing list