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 T
Make a copy of the target that can be used inside a transaction to isolate changes from the original.protected void
Take 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
-