/** * INTERNAL: * This method will release all acquired locks */ public void releaseAllAcquiredLocks(MergeManager mergeManager) { if (!MergeManager.LOCK_ON_MERGE) {//lockOnMerge is a backdoor and not public return; } Iterator locks = mergeManager.getAcquiredLocks().iterator(); while (locks.hasNext()) { CacheKey cacheKeyToRemove = (CacheKey)locks.next(); if (cacheKeyToRemove.getObject() == null && cacheKeyToRemove.getOwningMap() != null){ cacheKeyToRemove.getOwningMap().remove(cacheKeyToRemove); } cacheKeyToRemove.release(); locks.remove(); } }
/** * INTERNAL: * Called after transaction is completed (committed or rolled back) */ public void afterTransaction(boolean committed, boolean isExternalTransaction) { if (!committed && isExternalTransaction) { // In case jts transaction was internally started but rolled back // directly by TransactionManager this flag may still be true during afterCompletion getParent().setWasJTSTransactionInternallyStarted(false); //bug#4699614 -- added a new life cycle status so we know if the external transaction was rolledback and we don't try to rollback again later setLifecycle(AfterExternalTransactionRolledBack); } if ((getMergeManager() != null) && (getMergeManager().getAcquiredLocks() != null) && (!getMergeManager().getAcquiredLocks().isEmpty())) { //may have unreleased cache locks because of a rollback... getParent().getIdentityMapAccessorInstance().getWriteLockManager().releaseAllAcquiredLocks(getMergeManager()); this.setMergeManager(null); } getParent().afterTransaction(committed, isExternalTransaction); }
mergeManager.getAcquiredLocks().add(activeCacheKey); } else { mergeManager.getAcquiredLocks().add(activeCacheKey);
mergeManager.getAcquiredLocks().add(lockedCacheKey); return objectToLock;
setWasTransactionBegunPrematurely(false); if ((getMergeManager() != null) && (getMergeManager().getAcquiredLocks() != null) && (!getMergeManager().getAcquiredLocks().isEmpty())) {
if (!isNestedUnitOfWork() && !manager.getAcquiredLocks().isEmpty()) {