[jboss-cvs] JBossAS SVN: r70796 - in projects/ejb3/branches/cluster-dev/ejb3-cache/src: main/java/org/jboss/ejb3/cache/impl/factory and 4 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Wed Mar 12 23:17:57 EDT 2008
Author: bstansberry at jboss.com
Date: 2008-03-12 23:17:56 -0400 (Wed, 12 Mar 2008)
New Revision: 70796
Added:
projects/ejb3/branches/cluster-dev/ejb3-cache/src/main/java/org/jboss/ejb3/cache/spi/SynchronizationCoordinator.java
projects/ejb3/branches/cluster-dev/ejb3-cache/src/main/java/org/jboss/ejb3/cache/spi/impl/SynchronizationCoordinatorImpl.java
Modified:
projects/ejb3/branches/cluster-dev/ejb3-cache/src/main/java/org/jboss/ejb3/cache/impl/GroupAwareTransactionalCache.java
projects/ejb3/branches/cluster-dev/ejb3-cache/src/main/java/org/jboss/ejb3/cache/impl/TransactionalCache.java
projects/ejb3/branches/cluster-dev/ejb3-cache/src/main/java/org/jboss/ejb3/cache/impl/factory/GroupAwareCacheFactory.java
projects/ejb3/branches/cluster-dev/ejb3-cache/src/main/java/org/jboss/ejb3/cache/impl/factory/NonClusteredIntegratedObjectStoreSource.java
projects/ejb3/branches/cluster-dev/ejb3-cache/src/main/java/org/jboss/ejb3/cache/impl/factory/NonPassivatingCacheFactory.java
projects/ejb3/branches/cluster-dev/ejb3-cache/src/main/java/org/jboss/ejb3/cache/spi/IntegratedObjectStoreSource.java
projects/ejb3/branches/cluster-dev/ejb3-cache/src/main/java/org/jboss/ejb3/cache/spi/impl/AbstractStatefulCacheFactory.java
projects/ejb3/branches/cluster-dev/ejb3-cache/src/test/java/org/jboss/ejb3/test/cache/distributed/MockIntegratedObjectStoreSource.java
projects/ejb3/branches/cluster-dev/ejb3-cache/src/test/java/org/jboss/ejb3/test/cache/mock/MockEjb3System.java
Log:
[EJBTHREE-1026] Add the SynchronizationCoordinator concept
Modified: projects/ejb3/branches/cluster-dev/ejb3-cache/src/main/java/org/jboss/ejb3/cache/impl/GroupAwareTransactionalCache.java
===================================================================
--- projects/ejb3/branches/cluster-dev/ejb3-cache/src/main/java/org/jboss/ejb3/cache/impl/GroupAwareTransactionalCache.java 2008-03-13 02:30:11 UTC (rev 70795)
+++ projects/ejb3/branches/cluster-dev/ejb3-cache/src/main/java/org/jboss/ejb3/cache/impl/GroupAwareTransactionalCache.java 2008-03-13 03:17:56 UTC (rev 70796)
@@ -32,6 +32,7 @@
import org.jboss.ejb3.cache.SerializationGroup;
import org.jboss.ejb3.cache.spi.BackingCacheEntry;
import org.jboss.ejb3.cache.spi.GroupAwareBackingCache;
+import org.jboss.ejb3.cache.spi.SynchronizationCoordinator;
import org.jboss.ejb3.cache.spi.impl.GroupCreationContext;
import org.jboss.ejb3.cache.spi.impl.ItemCachePair;
@@ -55,9 +56,10 @@
* @param tm the transaction manager
*/
public GroupAwareTransactionalCache(GroupAwareBackingCache<C, T> delegate,
- TransactionManager tm)
+ TransactionManager tm,
+ SynchronizationCoordinator syncCoordinator)
{
- super(delegate, tm);
+ super(delegate, tm, syncCoordinator);
this.groupedCache = delegate;
}
Modified: projects/ejb3/branches/cluster-dev/ejb3-cache/src/main/java/org/jboss/ejb3/cache/impl/TransactionalCache.java
===================================================================
--- projects/ejb3/branches/cluster-dev/ejb3-cache/src/main/java/org/jboss/ejb3/cache/impl/TransactionalCache.java 2008-03-13 02:30:11 UTC (rev 70795)
+++ projects/ejb3/branches/cluster-dev/ejb3-cache/src/main/java/org/jboss/ejb3/cache/impl/TransactionalCache.java 2008-03-13 03:17:56 UTC (rev 70796)
@@ -38,6 +38,7 @@
import org.jboss.ejb3.cache.spi.BackingCache;
import org.jboss.ejb3.cache.spi.BackingCacheEntry;
import org.jboss.ejb3.cache.spi.IntegratedObjectStore;
+import org.jboss.ejb3.cache.spi.SynchronizationCoordinator;
/**
* {@link Cache#isGroupAware() Non-group-aware} <code>Cache</code> implementation
@@ -68,6 +69,11 @@
private final ConcurrentMap<Object, CacheReleaseSynchronization<C, T>> synchronizations;
/** Our transaction manager */
private final TransactionManager tm;
+ /**
+ * Helper to allow coordination Transaction Synchronization execution
+ * between ourself and other elements of the caching subsystem.
+ */
+ private final SynchronizationCoordinator synchronizationCoordinator;
private class Entry
{
@@ -119,13 +125,17 @@
}
}
- public TransactionalCache(BackingCache<C, T> delegate, TransactionManager tm)
+ public TransactionalCache(BackingCache<C, T> delegate,
+ TransactionManager tm,
+ SynchronizationCoordinator syncCoordinator)
{
assert delegate != null : "delegate is null";
assert tm != null : "tm is null";
+ assert syncCoordinator != null : "syncCoordinator is null";
this.delegate = delegate;
this.tm = tm;
+ this.synchronizationCoordinator = syncCoordinator;
this.inUseCache = new ConcurrentHashMap<Object, Entry>();
this.synchronizations = new ConcurrentHashMap<Object, CacheReleaseSynchronization<C, T>>();
@@ -311,7 +321,7 @@
CacheReleaseSynchronization<C, T> sync = new CacheReleaseSynchronization<C, T>(this, cacheItem, tx);
try
{
- tx.registerSynchronization(sync);
+ synchronizationCoordinator.addSynchronizationFirst(tx, sync);
}
catch (RollbackException e)
{
Modified: projects/ejb3/branches/cluster-dev/ejb3-cache/src/main/java/org/jboss/ejb3/cache/impl/factory/GroupAwareCacheFactory.java
===================================================================
--- projects/ejb3/branches/cluster-dev/ejb3-cache/src/main/java/org/jboss/ejb3/cache/impl/factory/GroupAwareCacheFactory.java 2008-03-13 02:30:11 UTC (rev 70795)
+++ projects/ejb3/branches/cluster-dev/ejb3-cache/src/main/java/org/jboss/ejb3/cache/impl/factory/GroupAwareCacheFactory.java 2008-03-13 03:17:56 UTC (rev 70796)
@@ -87,7 +87,7 @@
}
PassivatingIntegratedObjectStore<T, SerializationGroupMember<T>> store =
- storeSource.createIntegratedObjectStore(containerName, configName, cacheConfig, getTransactionManager());
+ storeSource.createIntegratedObjectStore(containerName, configName, cacheConfig, getTransactionManager(), getSynchronizationCoordinator());
// Make sure passivation/expiration occurs periodically
if (store.getInterval() < 1)
@@ -111,7 +111,7 @@
GroupAwareBackingCache<T, SerializationGroupMember<T>> backingCache =
new GroupAwareBackingCacheImpl<T>(memberContainer, groupCache);
- return new GroupAwareTransactionalCache<T, SerializationGroupMember<T>>(backingCache, getTransactionManager());
+ return new GroupAwareTransactionalCache<T, SerializationGroupMember<T>>(backingCache, getTransactionManager(), getSynchronizationCoordinator());
}
private PassivatingBackingCache<T, SerializationGroupImpl<T>> createGroupCache(String name, String configName, CacheConfig cacheConfig)
@@ -120,7 +120,7 @@
StatefulObjectFactory<SerializationGroupImpl<T>> factory = container;
PassivationManager<SerializationGroupImpl<T>> passivationManager = container;
PassivatingIntegratedObjectStore<T, SerializationGroupImpl<T>> store =
- storeSource.createGroupIntegratedObjectStore(name, configName, cacheConfig, getTransactionManager());
+ storeSource.createGroupIntegratedObjectStore(name, configName, cacheConfig, getTransactionManager(), getSynchronizationCoordinator());
// The group cache store should not passivate/expire -- that's a
// function of the caches for the members
Modified: projects/ejb3/branches/cluster-dev/ejb3-cache/src/main/java/org/jboss/ejb3/cache/impl/factory/NonClusteredIntegratedObjectStoreSource.java
===================================================================
--- projects/ejb3/branches/cluster-dev/ejb3-cache/src/main/java/org/jboss/ejb3/cache/impl/factory/NonClusteredIntegratedObjectStoreSource.java 2008-03-13 02:30:11 UTC (rev 70795)
+++ projects/ejb3/branches/cluster-dev/ejb3-cache/src/main/java/org/jboss/ejb3/cache/impl/factory/NonClusteredIntegratedObjectStoreSource.java 2008-03-13 03:17:56 UTC (rev 70796)
@@ -31,6 +31,7 @@
import org.jboss.ejb3.cache.impl.backing.SimplePassivatingIntegratedObjectStore;
import org.jboss.ejb3.cache.spi.IntegratedObjectStoreSource;
import org.jboss.ejb3.cache.spi.PassivatingIntegratedObjectStore;
+import org.jboss.ejb3.cache.spi.SynchronizationCoordinator;
import org.jboss.ejb3.cache.spi.impl.FileObjectStore;
import org.jboss.ejb3.cache.spi.impl.SerializationGroupImpl;
import org.jboss.ejb3.cache.spi.impl.SerializationGroupMember;
@@ -62,7 +63,7 @@
private int subdirectoryCount = DEFAULT_SUBDIRECTORY_COUNT;
public PassivatingIntegratedObjectStore<T, SerializationGroupImpl<T>> createGroupIntegratedObjectStore(String containerName, String cacheConfigName,
- CacheConfig cacheConfig, TransactionManager transactionManager)
+ CacheConfig cacheConfig, TransactionManager transactionManager, SynchronizationCoordinator synchronizationCoordinator)
{
FileObjectStore<SerializationGroupImpl<T>> objectStore = new FileObjectStore<SerializationGroupImpl<T>>();
objectStore.setStorageDirectory(getFullGroupDirectoryName(containerName));
@@ -77,7 +78,7 @@
}
public PassivatingIntegratedObjectStore<T, SerializationGroupMember<T>> createIntegratedObjectStore(String containerName, String cacheConfigName,
- CacheConfig cacheConfig, TransactionManager transactionManager)
+ CacheConfig cacheConfig, TransactionManager transactionManager, SynchronizationCoordinator synchronizationCoordinator)
{
FileObjectStore<SerializationGroupMember<T>> objectStore = new FileObjectStore<SerializationGroupMember<T>>();
objectStore.setStorageDirectory(getFullSessionDirectoryName(containerName));
Modified: projects/ejb3/branches/cluster-dev/ejb3-cache/src/main/java/org/jboss/ejb3/cache/impl/factory/NonPassivatingCacheFactory.java
===================================================================
--- projects/ejb3/branches/cluster-dev/ejb3-cache/src/main/java/org/jboss/ejb3/cache/impl/factory/NonPassivatingCacheFactory.java 2008-03-13 02:30:11 UTC (rev 70795)
+++ projects/ejb3/branches/cluster-dev/ejb3-cache/src/main/java/org/jboss/ejb3/cache/impl/factory/NonPassivatingCacheFactory.java 2008-03-13 03:17:56 UTC (rev 70796)
@@ -64,7 +64,7 @@
backingCache.setInterval(getDefaultPassivationExpirationInterval());
}
- return new TransactionalCache<T, NonPassivatingBackingCacheEntry<T>>(backingCache, getTransactionManager());
+ return new TransactionalCache<T, NonPassivatingBackingCacheEntry<T>>(backingCache, getTransactionManager(), getSynchronizationCoordinator());
}
}
Modified: projects/ejb3/branches/cluster-dev/ejb3-cache/src/main/java/org/jboss/ejb3/cache/spi/IntegratedObjectStoreSource.java
===================================================================
--- projects/ejb3/branches/cluster-dev/ejb3-cache/src/main/java/org/jboss/ejb3/cache/spi/IntegratedObjectStoreSource.java 2008-03-13 02:30:11 UTC (rev 70795)
+++ projects/ejb3/branches/cluster-dev/ejb3-cache/src/main/java/org/jboss/ejb3/cache/spi/IntegratedObjectStoreSource.java 2008-03-13 03:17:56 UTC (rev 70796)
@@ -50,13 +50,17 @@
* @param config configuration details of the cache
* @param transactionManager TransactionManager the store should use if
* it needs to monitor transactions
+ * @param synchronizationCoordinator SynchronizationCoordinator the store
+ * should use if it needs to add
+ * tranaction synchronizations
* @return the store
*/
PassivatingIntegratedObjectStore<T, SerializationGroupImpl<T>>
createGroupIntegratedObjectStore(String containerName,
String cacheConfigName,
CacheConfig config,
- TransactionManager transactionManager);
+ TransactionManager transactionManager,
+ SynchronizationCoordinator synchronizationCoordinator);
/**
* Provide a {@link PassivatingIntegratedObjectStore} for storage
@@ -66,11 +70,16 @@
* @param cacheConfigName TODO
* @param transactionManager TransactionManager the store should use if
* it needs to monitor transactions
+ * @param synchronizationCoordinator SynchronizationCoordinator the store
+ * should use if it needs to add
+ * tranaction synchronizations
* @param config configuration details of the cache
* @return the store
*/
PassivatingIntegratedObjectStore<T, SerializationGroupMember<T>>
createIntegratedObjectStore(String containerName,
String cacheConfigName,
- CacheConfig cacheConfig, TransactionManager transactionManager);
+ CacheConfig cacheConfig,
+ TransactionManager transactionManager,
+ SynchronizationCoordinator synchronizationCoordinator);
}
Added: projects/ejb3/branches/cluster-dev/ejb3-cache/src/main/java/org/jboss/ejb3/cache/spi/SynchronizationCoordinator.java
===================================================================
--- projects/ejb3/branches/cluster-dev/ejb3-cache/src/main/java/org/jboss/ejb3/cache/spi/SynchronizationCoordinator.java (rev 0)
+++ projects/ejb3/branches/cluster-dev/ejb3-cache/src/main/java/org/jboss/ejb3/cache/spi/SynchronizationCoordinator.java 2008-03-13 03:17:56 UTC (rev 70796)
@@ -0,0 +1,74 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.ejb3.cache.spi;
+
+import javax.transaction.RollbackException;
+import javax.transaction.Synchronization;
+import javax.transaction.SystemException;
+import javax.transaction.Transaction;
+
+/**
+ * Coordinates order of transaction {@link Synchronization} execution, allowing
+ * different elements of the caching system to ensure their synchronization
+ * executes either relatively early or relatively late in the transaction
+ * commit process.
+ * <p>
+ * Note that a <code>SynchronizationCoordinator</code> has no effect on the
+ * order of execution of synchronizations it doesn't know about (e.g. those
+ * registered by code external to the caching subsystem.)
+ * </p>
+ *
+ * @author Brian Stansberry
+ */
+public interface SynchronizationCoordinator
+{
+ /**
+ * Register the given Synchronization with the given Transaction,
+ * ensuring that during transaction commit the synchronization executes
+ * before any other synchronizations <strong>previously</strong> added to
+ * this coordinator.
+ *
+ * @param tx the transaction
+ * @param sync the synchronization
+ *
+ * @throws RollbackException
+ * @throws SystemException
+ */
+ void addSynchronizationFirst(Transaction tx, Synchronization sync)
+ throws RollbackException, SystemException;
+
+ /**
+ * Register the given Synchronization with the given Transaction,
+ * ensuring that during transaction commit the synchronization executes
+ * after any other synchronizations <strong>previously</strong> added to
+ * this coordinator.
+ *
+ * @param tx the transaction
+ * @param sync the synchronization
+ *
+ * @throws RollbackException
+ * @throws SystemException
+ */
+ void addSynchronizationLast(Transaction tx, Synchronization sync)
+ throws RollbackException, SystemException;
+}
Modified: projects/ejb3/branches/cluster-dev/ejb3-cache/src/main/java/org/jboss/ejb3/cache/spi/impl/AbstractStatefulCacheFactory.java
===================================================================
--- projects/ejb3/branches/cluster-dev/ejb3-cache/src/main/java/org/jboss/ejb3/cache/spi/impl/AbstractStatefulCacheFactory.java 2008-03-13 02:30:11 UTC (rev 70795)
+++ projects/ejb3/branches/cluster-dev/ejb3-cache/src/main/java/org/jboss/ejb3/cache/spi/impl/AbstractStatefulCacheFactory.java 2008-03-13 03:17:56 UTC (rev 70796)
@@ -30,6 +30,7 @@
import org.jboss.ejb3.cache.CacheItem;
import org.jboss.ejb3.cache.StatefulCacheFactory;
import org.jboss.ejb3.cache.spi.PassivationExpirationCoordinator;
+import org.jboss.ejb3.cache.spi.SynchronizationCoordinator;
/**
* Abstract superclass of {@link StatefulCacheFactory} implementations.
@@ -42,6 +43,7 @@
public static final int DEFAULT_PASSIVATION_EXPIRATION_INTERVAL = 10;
private TransactionManager transactionManager;
+ private SynchronizationCoordinator synchronizationCoordinator;
private PassivationExpirationCoordinator passivationExpirationCoordinator;
private int defaultPassivationExpirationInterval = DEFAULT_PASSIVATION_EXPIRATION_INTERVAL;
private String defaultCacheConfigName;
@@ -67,6 +69,22 @@
}
/**
+ * Gets the {@link SynchronizationCoordinator} used by this factory.
+ */
+ public SynchronizationCoordinator getSynchronizationCoordinator()
+ {
+ return synchronizationCoordinator;
+ }
+
+ /**
+ * Sets the {@link SynchronizationCoordinator} used by this factory.
+ */
+ public void setSynchronizationCoordinator(SynchronizationCoordinator synchronizationCoordinator)
+ {
+ this.synchronizationCoordinator = synchronizationCoordinator;
+ }
+
+ /**
* Gets the coordinator of passivation/expiration processes. If
* <code>null</code>, each cache will manager passivation/expiration
* with their own thread.
@@ -167,5 +185,16 @@
return substitute == null ? name : substitute;
}
+
+ public void start()
+ {
+ if (getSynchronizationCoordinator() == null)
+ setSynchronizationCoordinator(new SynchronizationCoordinatorImpl());
+ }
+
+ public void stop()
+ {
+ // no-op
+ }
}
Added: projects/ejb3/branches/cluster-dev/ejb3-cache/src/main/java/org/jboss/ejb3/cache/spi/impl/SynchronizationCoordinatorImpl.java
===================================================================
--- projects/ejb3/branches/cluster-dev/ejb3-cache/src/main/java/org/jboss/ejb3/cache/spi/impl/SynchronizationCoordinatorImpl.java (rev 0)
+++ projects/ejb3/branches/cluster-dev/ejb3-cache/src/main/java/org/jboss/ejb3/cache/spi/impl/SynchronizationCoordinatorImpl.java 2008-03-13 03:17:56 UTC (rev 70796)
@@ -0,0 +1,172 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.ejb3.cache.spi.impl;
+
+import java.util.LinkedList;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+import javax.transaction.RollbackException;
+import javax.transaction.Synchronization;
+import javax.transaction.SystemException;
+import javax.transaction.Transaction;
+
+import org.jboss.ejb3.cache.spi.SynchronizationCoordinator;
+import org.jboss.logging.Logger;
+
+/**
+ * @author Brian Stansberry
+ *
+ */
+public class SynchronizationCoordinatorImpl implements SynchronizationCoordinator
+{
+ private static final Logger log = Logger.getLogger(SynchronizationCoordinatorImpl.class);
+
+ private ConcurrentMap<Transaction, OrderedSynchronizationHandler> handlers =
+ new ConcurrentHashMap<Transaction, OrderedSynchronizationHandler>();
+
+ public void addSynchronizationFirst(Transaction tx, Synchronization sync)
+ throws RollbackException, SystemException
+ {
+ getHandler(tx).registerAtHead(sync);
+ }
+
+ public void addSynchronizationLast(Transaction tx, Synchronization sync)
+ throws RollbackException, SystemException
+ {
+ getHandler(tx).registerAtTail(sync);
+ }
+
+ private OrderedSynchronizationHandler getHandler(Transaction tx) throws RollbackException, SystemException
+ {
+ OrderedSynchronizationHandler handler = handlers.get(tx);
+ if (handler == null)
+ {
+ handler = new OrderedSynchronizationHandler(tx, this);
+ OrderedSynchronizationHandler old = handlers.putIfAbsent(tx, handler);
+ if (old != null)
+ {
+ handler = old;
+ }
+ else
+ {
+ tx.registerSynchronization(handler);
+ }
+ }
+
+ return handler;
+ }
+
+ private void removeHandler(Transaction tx)
+ {
+ handlers.remove(tx);
+ }
+
+ private static class OrderedSynchronizationHandler implements Synchronization
+ {
+ private Transaction tx = null;
+ private SynchronizationCoordinatorImpl coordinator;
+ private final LinkedList<Synchronization> synchronizations = new LinkedList<Synchronization>();
+
+
+ private OrderedSynchronizationHandler(Transaction tx, SynchronizationCoordinatorImpl coordinator)
+ {
+ assert tx != null : "tx is null";
+ assert coordinator != null : "coordinator is null";
+
+ this.tx = tx;
+ this.coordinator = coordinator;
+ }
+
+
+ public void registerAtHead(Synchronization handler)
+ {
+ register(handler, true);
+ }
+
+ public void registerAtTail(Synchronization handler)
+ {
+ register(handler, false);
+ }
+
+ void register(Synchronization handler, boolean head)
+ {
+ if (handler != null && !synchronizations.contains(handler))
+ {
+ if (head)
+ synchronizations.addFirst(handler);
+ else
+ synchronizations.addLast(handler);
+ }
+ }
+
+ public void beforeCompletion()
+ {
+ for (Synchronization sync : synchronizations)
+ {
+ sync.beforeCompletion();
+ }
+ }
+
+ public void afterCompletion(int status)
+ {
+ RuntimeException exceptionInAfterCompletion = null;
+ for (Synchronization sync : synchronizations)
+ {
+ try
+ {
+ sync.afterCompletion(status);
+ }
+ catch (Throwable t)
+ {
+ log.error("failed calling afterCompletion() on " + sync, t);
+ exceptionInAfterCompletion = (RuntimeException) t;
+ }
+ }
+
+ // finally unregister us from the hashmap
+ coordinator.removeHandler(tx);
+ tx = null;
+
+ // throw the exception so the TM can deal with it.
+ if (exceptionInAfterCompletion != null) throw exceptionInAfterCompletion;
+ }
+
+ public String toString()
+ {
+ StringBuffer sb = new StringBuffer();
+ sb.append("tx=" + getTxAsString() + ", handlers=" + synchronizations);
+ return sb.toString();
+ }
+
+ private String getTxAsString()
+ {
+ // Don't call toString() on tx or it can lead to stack overflow
+ if (tx == null)
+ return null;
+
+ return tx.getClass().getName() + "@" + System.identityHashCode(tx);
+ }
+
+ }
+}
Modified: projects/ejb3/branches/cluster-dev/ejb3-cache/src/test/java/org/jboss/ejb3/test/cache/distributed/MockIntegratedObjectStoreSource.java
===================================================================
--- projects/ejb3/branches/cluster-dev/ejb3-cache/src/test/java/org/jboss/ejb3/test/cache/distributed/MockIntegratedObjectStoreSource.java 2008-03-13 02:30:11 UTC (rev 70795)
+++ projects/ejb3/branches/cluster-dev/ejb3-cache/src/test/java/org/jboss/ejb3/test/cache/distributed/MockIntegratedObjectStoreSource.java 2008-03-13 03:17:56 UTC (rev 70796)
@@ -28,6 +28,7 @@
import org.jboss.ejb3.cache.CacheItem;
import org.jboss.ejb3.cache.spi.IntegratedObjectStoreSource;
import org.jboss.ejb3.cache.spi.PassivatingIntegratedObjectStore;
+import org.jboss.ejb3.cache.spi.SynchronizationCoordinator;
import org.jboss.ejb3.cache.spi.impl.SerializationGroupImpl;
import org.jboss.ejb3.cache.spi.impl.SerializationGroupMember;
@@ -48,14 +49,14 @@
}
public PassivatingIntegratedObjectStore<T, SerializationGroupImpl<T>> createGroupIntegratedObjectStore(String containerName,
- String cacheConfigName, CacheConfig cacheConfig, TransactionManager transactionManager)
+ String cacheConfigName, CacheConfig cacheConfig, TransactionManager transactionManager, SynchronizationCoordinator synchronizationCoordinator)
{
String keyBase = "GroupCache-" + containerName;
return new MockJBCIntegratedObjectStore<T, SerializationGroupImpl<T>>(localMap, remoteMap, cacheConfig, keyBase, keyBase);
}
public PassivatingIntegratedObjectStore<T, SerializationGroupMember<T>> createIntegratedObjectStore(String containerName, String cacheConfigName,
- CacheConfig cacheConfig, TransactionManager transactionManager)
+ CacheConfig cacheConfig, TransactionManager transactionManager, SynchronizationCoordinator synchronizationCoordinator)
{
return new MockJBCIntegratedObjectStore<T, SerializationGroupMember<T>>(localMap, remoteMap, cacheConfig, containerName, containerName);
}
Modified: projects/ejb3/branches/cluster-dev/ejb3-cache/src/test/java/org/jboss/ejb3/test/cache/mock/MockEjb3System.java
===================================================================
--- projects/ejb3/branches/cluster-dev/ejb3-cache/src/test/java/org/jboss/ejb3/test/cache/mock/MockEjb3System.java 2008-03-13 02:30:11 UTC (rev 70795)
+++ projects/ejb3/branches/cluster-dev/ejb3-cache/src/test/java/org/jboss/ejb3/test/cache/mock/MockEjb3System.java 2008-03-13 03:17:56 UTC (rev 70796)
@@ -158,6 +158,7 @@
factory.setPassivationExpirationCoordinator(coordinator);
// Process passivation/expiration as quickly as possible so tests run fast
factory.setDefaultPassivationExpirationInterval(1);
+ factory.start();
return factory;
}
More information about the jboss-cvs-commits
mailing list