Jakarta Commons Transaction Release 1.1 final --------------------------------------------- RELEASE NUMBER: 1.1 RELEASE TAG / BRANCH: TRANSACTION_1_1_FINAL_RELEASE / none yet DESCRIPTION ----------- Commons Transaction aims at providing utility classes commonly used in transactional Java programming. There are implementations for: - multi level (e.g. read/write) locks, - transactional maps, and - transactional file access, plus - some helper classes GENERAL RELEASE NOTES --------------------- This is the final version of the Commons Transaction 1.1 feature release. It mainly cleanes up some minor issues that come up while beta testing. Commons Transaction 1.1 aims at polishing (interface) oddities, improving locking and making the file store more flexible. Locking now is much more flexible, extensible and allows for rudimentary transaction management. There is a new lock manager that hides locks from the user and keeps track of all of them allowing for deadlock detection and more convenient management. ENHANCEMENTS FROM 1.0 --------------------- Locking: - Extended and less excentric lock manager interface LockManager2 - Extended multi level lock interface MultiLevelLock2 - GenericLock and GenericLockManager now implement new interfaces as well - GenericLock and GenericLockManager offer much better inspection with toString - GenericLock offers (protected) means for waiter management and opens possibility for fair strategies to subclasses File: - Confiburable resource id to path mapping NEW FEATURES FROM 1.0 --------------------- Locking: - new ReadWriteLockManager for most intuitive read/write lock usage - new read/write/upgrade locking mechanism (ReadWriteUpgradeLock, ReadWriteUpgradeLockManager) - Deadlock detection for all lock managers, file store, and pessimistic map - Flexible preference locking mechanism - Global transaction timeouts that actively revoke granted rights from transactions MINOR INCOMPATIBILITIES TO 1.0 ------------------------------ - PessimisticMapWrapper now throws the more general LockException from locking package - Both MultiLevelLock#release and LockManager2#release now return a boolean that indicates if the lock really has been released BUGFIXES FROM 1.0 beta1 ----------------------- - Fixed deadlock hazard in deadlock detection caused by interleaving access to locks set of an owner - Fixed timeout that in certain scenarios did not work - GenericLock test method released all locks held by the testing owner - fixed - OptimisticMapWrapper now uses a read/write lock to guarantee no other operations are being executed while commiting; before it was possible that conflicts that arose during the process of committing remained undetected ENHANCEMENTS FROM 1.0 beta1 ----------------------- - Many extensions for information about locks ENHANCEMENTS FROM 1.0 beta2 ----------------------- - Made GenericLockManager#checkLock, GenericLockManager#hasLock, GenericLockManager#release only check on existing locks as creating a new lock was silly in that scenario - Split GenericLockManager#lock(Object ownerId, Object resourceId, int targetLockLevel, int compatibility, boolean preferred, long timeoutMSecs) into two parts to make subclassing easier KNOWN ISSUES ------------ - Deadlock detection sometimes determines more than one thread as a deadlock victim