public class RepeatableWriteUnitOfWork extends UnitOfWorkImpl
| Modifier and Type | Field and Description |
|---|---|
protected UnitOfWorkChangeSet |
cumulativeUOWChangeSet
Used to store the final UnitOfWorkChangeSet for merge into the shared cache
|
protected boolean |
shouldClearForCloseInsteadOfResume
Used to determine if UnitOfWork.synchronizeAndResume method should
resume (the normal behaviour); or alternatively clear the UnitOfWork.
|
protected boolean |
shouldTerminateTransaction
Used to determine if UnitOfWork should commit and rollback transactions
This is used when an EntityTransaction is controlling the transaction
|
protected IdentityHashtable |
unregisteredDeletedObjectsCloneToBackupAndOriginal
Used to store objects already deleted from the db and unregistered
|
AfterExternalTransactionRolledBack, allClones, Birth, cloneDepth, cloneMapping, cloneToOriginals, CommitPending, CommitTransactionPending, Death, deferredModifyAllQueries, deletedObjects, DO_NOT_THROW_CONFORM_EXCEPTIONS, Full, isSynchronized, lastUsedMergeManager, lifecycle, LOCK_QUERIES_PROPERTY, MergePending, modifyAllQueries, newAggregates, newObjectsCloneToOriginal, newObjectsOriginalToClone, None, objectsDeletedDuringCommit, objectsLockedForClone, optimisticReadLockObjects, parent, Partial, pessimisticLockedObjects, readOnlyClasses, removedObjects, resumeOnTransactionCompletion, shouldCascadeCloneToJoinedRelationship, shouldCheckWriteLock, shouldNewObjectsBeCached, shouldPerformDeletesFirst, shouldThrowConformExceptions, SmartMerge, THROW_ALL_CONFORM_EXCEPTIONS, transaction, unitOfWorkChangeSet, unregisteredExistingObjects, unregisteredNewObjects, validationLevel, wasNonObjectLevelModifyQueryExecuted, wasTransactionBegunPrematurely, WriteChangesFailedaccessor, broker, commitManager, ejbqlPlaceHolderQueries, eventManager, exceptionHandler, externalTransactionController, identityMapAccessor, integrityChecker, isInProfile, lastDescriptorAccessed, logSessionString, name, numberOfActiveUnitsOfWork, platform, profiler, project, properties, queries, sessionLog, transactionMutex, wasJTSTransactionInternallyStarted| Constructor and Description |
|---|
RepeatableWriteUnitOfWork(AbstractSession parentSession) |
| Modifier and Type | Method and Description |
|---|---|
void |
clearForClose(boolean shouldClearCache)
INTERNAL:
Call this method if the uow will no longer used for comitting transactions:
all the changes sets will be dereferenced, and (optionally) the cache cleared.
|
void |
commitRootUnitOfWork()
INTERNAL:
Commit the changes to any objects to the parent.
|
protected void |
commitToDatabase(boolean commitTransaction)
INTERNAL:
Wraps the oracle.toplink.essentials.exceptions.OptimisticLockException in a
javax.persistence.OptimisticLockException.
|
void |
commitTransaction()
INTERNAL:
This is internal to the uow, transactions should not be used explictly in a uow.
|
void |
discoverUnregisteredNewObjects(java.lang.Object clone,
IdentityHashtable knownNewObjects,
IdentityHashtable unregisteredExistingObjects,
IdentityHashtable visitedObjects)
INTERNAL:
Traverse the object to find references to objects not registered in this unit of work.
|
java.lang.Object |
getUnregisteredDeletedCloneForOriginal(java.lang.Object original)
INTERNAL:
Called only by UnitOfWorkIdentityMapAccessor.getAndCloneCacheKeyFromParent method.
|
boolean |
isAfterWriteChangesButBeforeCommit()
INTERNAL:
Has writeChanges() been attempted on this UnitOfWork? It may have
either suceeded or failed but either way the UnitOfWork is in a highly
restricted state.
|
boolean |
isObjectDeleted(java.lang.Object object)
INTERNAL:
Return if the object has been deleted in this unit of work.
|
void |
issueSQLbeforeCompletion()
INTERNAL:
For synchronized units of work, dump SQL to database
|
java.lang.Object |
mergeCloneWithReferences(java.lang.Object rmiClone,
int cascadePolicy,
boolean forceCascade)
INTERNAL:
Merge the attributes of the clone into the unit of work copy.
|
protected void |
registerNotRegisteredNewObjectForPersist(java.lang.Object newObject,
ClassDescriptor descriptor)
INTERNAL:
Called only by registerNewObjectForPersist method,
and only if newObject is not already registered.
|
void |
rollbackTransaction()
INTERNAL:
This is internal to the uow, transactions should not be used explictly in a uow.
|
void |
setShouldClearForCloseInsteadOfResume(boolean shouldClearForCloseInsteadOfResume) |
void |
setShouldTerminateTransaction(boolean shouldTerminateTransaction) |
boolean |
shouldClearForCloseInsteadOfResume() |
boolean |
shouldClearForCloseOnRelease()
INTERNAL:
Indicates whether clearForClose methor should be called by release method.
|
void |
synchronizeAndResume()
INTERNAL
Synchronize the clones and update their backup copies.
|
void |
updateChangeTrackersIfRequired(java.lang.Object objectToWrite,
ObjectChangeSet changeSetToWrite,
UnitOfWorkImpl uow,
ClassDescriptor descriptor)
INTERNAL:
This method is used internally to update the tracked objects if required
|
void |
writeChanges()
INTERNAL:
This method will cause the all of the tracked objects at this level to have
their changes written to the database.
|
acquireUnitOfWork, addNewAggregate, addObjectDeletedDuringCommit, addPessimisticLockedClone, addReadOnlyClass, addReadOnlyClasses, addRemovedObject, afterTransaction, assignSequenceNumber, assignSequenceNumbers, basicPrintRegisteredObjects, beginEarlyTransaction, beginTransaction, buildOriginal, calculateChanges, canChangeReadOnlySet, checkExistence, checkForUnregisteredExistingObject, checkIfAlreadyRegistered, clear, cloneAndRegisterNewObject, cloneAndRegisterObject, collectAndPrepareObjectsForCommit, collectAndPrepareObjectsForNestedMerge, commit, commitAfterWriteChanges, commitAndResume, commitAndResumeAfterWriteChanges, commitAndResumeOnFailure, commitAndResumeWithPreBuiltChangeSet, commitInternallyStartedExternalTransaction, commitRootUnitOfWorkWithPreBuiltChangeSet, commitToDatabaseWithChangeSet, commitToDatabaseWithPreBuiltChangeSet, commitTransactionAfterWriteChanges, copyReadOnlyClasses, deepMergeClone, deepRevertObject, deepUnregisterObject, deleteAllObjects, discoverAllUnregisteredNewObjects, dontPerformValidation, executeCall, forceUpdateToVersionField, getAccessor, getAccessor, getAccessor, getActiveUnitOfWork, getAllClones, getAllFromNewObjects, getBackupClone, getBackupCloneForCommit, getCloneMapping, getCloneToOriginals, getCommitManager, getCurrentChanges, getDefaultReadOnlyClasses, getDeletedObjects, getDescriptorForAlias, getDescriptors, getExecutionSession, getLifecycle, getMergeManager, getNewAggregates, getNewObjectsCloneToOriginal, getNewObjectsOriginalToClone, getObjectFromNewObjects, getObjectFromNewObjects, getObjectsDeletedDuringCommit, getOptimisticReadLockObjects, getOriginalVersionOfNewObject, getOriginalVersionOfObject, getOriginalVersionOfObjectOrNull, getParent, getParentIdentityMapSession, getPessimisticLockedObjects, getPlatform, getQuery, getQuery, getReadOnlyClasses, getRemovedObjects, getSequencing, getServerPlatform, getSessionTypeString, getShouldThrowConformExceptions, getState, getTransaction, getUnitOfWorkChangeSet, getUnregisteredExistingObjects, getUnregisteredNewObjects, getValidationLevel, getWorkingCopyFromUnitOfWorkIdentityMap, hasChanges, hasCloneMapping, hasCloneToOriginals, hasDeferredModifyAllQueries, hasDeletedObjects, hasModifications, hasModifyAllQueries, hasNewObjects, hasObjectsDeletedDuringCommit, hasRemovedObjects, initializeIdentityMapAccessor, internalExecuteQuery, internalRegisterObject, isActive, isAfterWriteChangesFailed, isClassReadOnly, isCloneNewObject, isCommitPending, isDead, isInTransaction, isMergePending, isNestedUnitOfWork, isObjectNew, isObjectRegistered, isOriginalNewObject, isPessimisticLocked, isSmartMerge, issueModifyAllQueryList, issueSQLbeforeCompletion, isSynchronized, isUnitOfWork, mergeChangesIntoParent, mergeClone, mergeClone, mergeClonesAfterCompletion, mergeCloneWithReferences, mergeCloneWithReferences, newInstance, performFullValidation, performPartialValidation, performRemove, populateAndRegisterObject, postMergeChanges, preMergeChanges, printRegisteredObjects, processDeleteObjectQuery, registerAllObjects, registerAllObjects, registerExistingObject, registerExistingObject, registerExistingObject, registerNewObject, registerNewObject, registerNewObjectClone, registerNewObjectForPersist, registerNewObjectInIdentityMap, registerObject, registerObject, registerWithTransactionIfRequired, release, removeAllReadOnlyClasses, removeForceUpdateToVersionField, removeReadOnlyClass, resetAllCloneCollection, revertAndResume, revertObject, revertObject, rollbackTransaction, scanForConformingInstances, setAllClonesCollection, setCloneMapping, setDead, setDeletedObjects, setLifecycle, setMergeManager, setNewObjectsCloneToOriginal, setNewObjectsOriginalToClone, setObjectsDeletedDuringCommit, setParent, setPendingMerge, setReadOnlyClasses, setRemovedObjects, setResumeUnitOfWorkOnTransactionCompletion, setShouldCascadeCloneToJoinedRelationship, setShouldNewObjectsBeCached, setShouldPerformDeletesFirst, setShouldThrowConformExceptions, setSmartMerge, setSynchronized, setTransaction, setUnitOfWorkChangeSet, setUnregisteredExistingObjects, setUnregisteredNewObjects, setValidationLevel, setWasNonObjectLevelModifyQueryExecuted, setWasTransactionBegunPrematurely, shallowMergeClone, shallowRevertObject, shallowUnregisterObject, shouldCascadeCloneToJoinedRelationship, shouldNewObjectsBeCached, shouldPerformDeletesFirst, shouldPerformFullValidation, shouldPerformNoValidation, shouldPerformPartialValidation, shouldReadFromDB, shouldResumeUnitOfWorkOnTransactionCompletion, storeDeferredModifyAllQuery, storeModifyAllQuery, undeleteObject, unregisterObject, unregisterObject, validateObjectSpace, wasNonObjectLevelModifyQueryExecuted, wasTransactionBegunPrematurely, writesCompletedacquireNonSynchronizedUnitOfWork, addAlias, addEjbqlPlaceHolderQuery, addQuery, addQuery, basicBeginTransaction, basicCommitTransaction, basicRollbackTransaction, beginExternalTransaction, clearIntegrityChecker, clearLastDescriptorAccessed, clearProfile, clone, commitExternalTransaction, compareObjects, compareObjectsDontMatch, config, containsQuery, copyObject, copyObject, deleteAllObjects, deleteObject, doesObjectExist, dontLogMessages, endOperationProfile, executeNonSelectingCall, executeNonSelectingSQL, executeQuery, executeQuery, executeQuery, executeQuery, executeQuery, executeQuery, executeQuery, executeQuery, executeQuery, executeQuery, executeQuery, executeQuery, executeQuery, executeSelectingCall, executeSQL, fine, finer, finest, getActiveSession, getAliasDescriptors, getAllQueries, getBroker, getClassDescriptor, getClassDescriptor, getClassDescriptorForAlias, getDatasourceLogin, getDatasourcePlatform, getDescriptor, getDescriptor, getEjbqlPlaceHolderQueries, getEventManager, getExceptionHandler, getExceptionHandlerClass, getExternalTransactionController, getIdentityMapAccessor, getIdentityMapAccessorInstance, getIntegrityChecker, getLog, getLogin, getLogLevel, getLogLevel, getLogSessionString, getName, getNextQueryId, getNextSequenceNumberValue, getNumberOfActiveUnitsOfWork, getParentIdentityMapSession, getPlatform, getProfiler, getProject, getProperties, getProperty, getQueries, getRootSession, getSessionForClass, getSessionLog, getTransactionMutex, handleException, handleSevere, hasBroker, hasDescriptor, hasExceptionHandler, hasExternalTransactionController, hasProperties, incrementProfile, info, insertObject, isBroker, isClassReadOnly, isClientSession, isConnected, isDatabaseSession, isDistributedSession, isInBroker, isInProfile, isRemoteSession, isRemoteUnitOfWork, isServerSession, isSessionBroker, keyFromObject, keyFromObject, log, log, log, log, log, log, log, log, log, log, logMessage, logThrowable, prepareDatabaseQuery, processEJBQLQueries, processEJBQLQueries, readAllObjects, readAllObjects, readAllObjects, readAllObjects, readObject, readObject, readObject, readObject, readObject, refreshAndLockObject, refreshAndLockObject, refreshObject, releaseUnitOfWork, removeProperty, removeQuery, removeQuery, rollbackExternalTransaction, setAccessor, setBroker, setCommitManager, setDatasourceLogin, setEventManager, setExceptionHandler, setExternalTransactionController, setIntegrityChecker, setIsInProfile, setLog, setLogin, setLogin, setLogLevel, setName, setNumberOfActiveUnitsOfWork, setProfiler, setProject, setProperties, setProperty, setQueries, setSessionLog, setTransactionMutex, setWasJTSTransactionInternallyStarted, severe, shouldLog, shouldLogMessages, startOperationProfile, toString, unwrapObject, updateObject, updateProfile, validateQuery, verifyDelete, warning, wasJTSTransactionInternallyStarted, wrapObject, writeAllObjects, writeAllObjectsWithChangeSet, writeObjectequals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitdeleteAllObjects, deleteObject, isClassReadOnly, refreshAndLockObject, refreshAndLockObjectaddEjbqlPlaceHolderQuery, addQuery, clearIntegrityChecker, clearProfile, containsQuery, copyObject, copyObject, doesObjectExist, dontLogMessages, executeNonSelectingCall, executeNonSelectingSQL, executeQuery, executeQuery, executeQuery, executeQuery, executeQuery, executeQuery, executeQuery, executeQuery, executeQuery, executeQuery, executeQuery, executeQuery, executeSelectingCall, executeSQL, getActiveSession, getClassDescriptor, getClassDescriptor, getClassDescriptorForAlias, getDatasourceLogin, getDatasourcePlatform, getDescriptor, getDescriptor, getEjbqlPlaceHolderQueries, getEventManager, getExceptionHandler, getExternalTransactionController, getIdentityMapAccessor, getIntegrityChecker, getLog, getLogin, getLogLevel, getLogLevel, getName, getNextSequenceNumberValue, getPlatform, getProfiler, getProject, getProperties, getProperty, getQueries, getSessionLog, handleException, handleSevere, hasDescriptor, hasExceptionHandler, hasExternalTransactionController, isClientSession, isConnected, isDatabaseSession, isDistributedSession, isInProfile, isRemoteSession, isRemoteUnitOfWork, isServerSession, isSessionBroker, keyFromObject, log, log, logMessage, logThrowable, readAllObjects, readAllObjects, readAllObjects, readObject, readObject, readObject, readObject, refreshObject, removeProperty, removeQuery, setExceptionHandler, setExternalTransactionController, setIntegrityChecker, setLog, setLogLevel, setName, setProfiler, setProperty, setSessionLog, shouldLog, shouldLogMessagesprotected UnitOfWorkChangeSet cumulativeUOWChangeSet
protected IdentityHashtable unregisteredDeletedObjectsCloneToBackupAndOriginal
protected boolean shouldTerminateTransaction
protected boolean shouldClearForCloseInsteadOfResume
public RepeatableWriteUnitOfWork(AbstractSession parentSession)
public void clearForClose(boolean shouldClearCache)
clearForClose in class UnitOfWorkImplpublic boolean shouldClearForCloseOnRelease()
shouldClearForCloseOnRelease in class UnitOfWorkImplpublic void commitRootUnitOfWork()
throws DatabaseException,
OptimisticLockException
commitRootUnitOfWork in class UnitOfWorkImplDatabaseExceptionOptimisticLockExceptionpublic void discoverUnregisteredNewObjects(java.lang.Object clone,
IdentityHashtable knownNewObjects,
IdentityHashtable unregisteredExistingObjects,
IdentityHashtable visitedObjects)
discoverUnregisteredNewObjects in class UnitOfWorkImplpublic boolean isAfterWriteChangesButBeforeCommit()
isAfterWriteChangesButBeforeCommit in class UnitOfWorkImplpublic boolean isObjectDeleted(java.lang.Object object)
isObjectDeleted in class UnitOfWorkImplpublic void issueSQLbeforeCompletion()
issueSQLbeforeCompletion in class UnitOfWorkImplpublic java.lang.Object mergeCloneWithReferences(java.lang.Object rmiClone,
int cascadePolicy,
boolean forceCascade)
mergeCloneWithReferences in class UnitOfWorkImplUnitOfWorkImpl.shallowMergeClone(Object),
UnitOfWorkImpl.deepMergeClone(Object)public void updateChangeTrackersIfRequired(java.lang.Object objectToWrite,
ObjectChangeSet changeSetToWrite,
UnitOfWorkImpl uow,
ClassDescriptor descriptor)
updateChangeTrackersIfRequired in class UnitOfWorkImplpublic void writeChanges()
writeChanges in interface UnitOfWorkwriteChanges in class UnitOfWorkImplprotected void registerNotRegisteredNewObjectForPersist(java.lang.Object newObject,
ClassDescriptor descriptor)
registerNotRegisteredNewObjectForPersist in class UnitOfWorkImplpublic void rollbackTransaction()
throws DatabaseException
rollbackTransaction in class UnitOfWorkImplDatabaseException - if the database connection is lost or the rollback fails.public void synchronizeAndResume()
synchronizeAndResume in class UnitOfWorkImplpublic java.lang.Object getUnregisteredDeletedCloneForOriginal(java.lang.Object original)
protected void commitToDatabase(boolean commitTransaction)
commitToDatabase in class UnitOfWorkImplcommitTransaction - public void commitTransaction()
throws DatabaseException
commitTransaction in class UnitOfWorkImplDatabaseException - most databases validate changes as they are done,
normally errors do not occur on commit unless the disk fails or the connection is lost.public void setShouldTerminateTransaction(boolean shouldTerminateTransaction)
public void setShouldClearForCloseInsteadOfResume(boolean shouldClearForCloseInsteadOfResume)
public boolean shouldClearForCloseInsteadOfResume()