Class TransactionAwareProxyFactory<T>
Factory for transaction aware objects (like lists, sets, maps). If a transaction is active when a method is called on an instance created by the factory, it makes a copy of the target object and carries out all operations on the copy. Only when the transaction commits is the target re-initialised with the copy.
Works well with collections and maps for testing transactional behaviour without
needing a database. The base implementation handles lists, sets and maps. Subclasses
can implement begin(Object) and commit(Object, Object) to provide
support for other resources.
Generally not intended for multi-threaded use, but the
append only version of collections gives
isolation between threads operating on different keys in a map, provided they only
append to the map. (Threads are limited to removing entries that were created in the
same transaction.)
- Author:
- Dave Syer
-
Method Summary
Modifier and TypeMethodDescriptionprotected final TMake a copy of the target that can be used inside a transaction to isolate changes from the original.protected voidTake the working copy state and commit it back to the original target.static <T> List<T>static <K,V> ConcurrentMap<K, V> static <T> Set<T>static <T> List<T>static <T> List<T>createTransactionalList(List<T> list) static <K,V> Map<K, V> static <K,V> Map<K, V> createTransactionalMap(Map<K, V> map) static <T> Set<T>static <T> Set<T>createTransactionalSet(Set<T> set)
-
Method Details
-
begin
Make a copy of the target that can be used inside a transaction to isolate changes from the original. Also called from the factory constructor to isolate the target from the original value passed in.- Parameters:
target- the target object (List, Set or Map)- Returns:
- an independent copy
-
commit
Take the working copy state and commit it back to the original target. The target then reflects all the changes applied to the copy during a transaction.- Parameters:
copy- the working copy.target- the original target of the factory.
-
createTransactionalMap
-
createTransactionalMap
-
createAppendOnlyTransactionalMap
-
createAppendOnlyTransactionalSet
-
createTransactionalSet
-
createTransactionalSet
-
createAppendOnlyTransactionalList
-
createTransactionalList
-
createTransactionalList
-