[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