Module org.eclipse.persistence.core
Class VersionLockingPolicy
java.lang.Object
org.eclipse.persistence.descriptors.VersionLockingPolicy
- All Implemented Interfaces:
Serializable
,Cloneable
,OptimisticLockingPolicy
- Direct Known Subclasses:
TimestampLockingPolicy
Purpose: Used to allow a single version number to be used for optimistic locking.
- Since:
- TOPLink/Java 2.0
- See Also:
-
Nested Class Summary
Nested classes/interfaces inherited from interface org.eclipse.persistence.internal.descriptors.OptimisticLockingPolicy
OptimisticLockingPolicy.LockOnChange
-
Field Summary
Modifier and TypeFieldDescriptionprotected Expression
protected ClassDescriptor
static final int
static final int
protected boolean
protected AbstractDirectMapping
PERF: Cache the lock mapping if mapped with a direct mapping.protected OptimisticLockingPolicy.LockOnChange
protected int
protected DatabaseField
-
Constructor Summary
ConstructorDescriptionPUBLIC: Create a new VersionLockingPolicy.VersionLockingPolicy
(String fieldName) PUBLIC: Create a new VersionLockingPolicy.PUBLIC: Create a new VersionLockingPolicy. -
Method Summary
Modifier and TypeMethodDescriptionvoid
addLockFieldsToUpdateRow
(AbstractRecord databaseRow, AbstractSession session) INTERNAL: Add update fields for template row.void
INTERNAL: This method adds the lock value to the translation row of the passed in query.buildDeleteExpression
(DatabaseTable table, Expression mainExpression, AbstractRecord row) INTERNAL: When given an expression, this method will return a new expression with the optimistic locking values included.protected Expression
INTERNAL: Returns an expression that will be used for both the update and delete where clausebuildUpdateExpression
(DatabaseTable table, Expression mainExpression, AbstractRecord row, AbstractRecord row2) INTERNAL: When given an expression, this method will return a new expression with the optimistic locking values included.clone()
INTERNAL: Clone the policyint
compareWriteLockValues
(Object value1, Object value2) INTERNAL: This method compares two writeLockValues.<T> T
INTERNAL: This is the base value that is older than all other values, it is used in the place of null in some situations.protected <T> Class
<T> INTERNAL: Return the default version locking filed java type, default is BigDecimalprotected ClassDescriptor
INTERNAL:protected <T> T
getInitialWriteValue
(AbstractSession session) INTERNAL: returns the initial locking valueADVANCED: returns the LockOnChange mode for this policy.<T> T
getNewLockValue
(ModifyQuery query) INTERNAL: This method gets the write lock value from either the cache or the object stored in the query.protected Vector
<DatabaseField> INTERNAL: This method returns any of the fields that are not mapped in the object.<T> T
getValueToPutInCache
(AbstractRecord row, AbstractSession session) INTERNAL: Return the value that should be stored in the identity map.int
getVersionDifference
(Object currentValue, Object domainObject, Object primaryKeys, AbstractSession session) PUBLIC: Return the number of versions different between these objects.INTERNAL: Returns the mapping that will be used to access the version value from an object.INTERNAL: Return the write lock field.PUBLIC: Return the field name of the field that stores the write lock value.getWriteLockUpdateExpression
(ExpressionBuilder builder, AbstractSession session) INTERNAL: Retrun an expression that updates the write lock<T> T
getWriteLockValue
(Object domainObject, Object primaryKey, AbstractSession session) INTERNAL: This method will return the optimistic lock value for the objectprotected Number
incrementWriteLockValue
(Number numberValue) INTERNAL: Adds 1 to the value passed in.void
initialize
(AbstractSession session) INTERNAL: It is responsible for initializing the policy;void
INTERNAL: It is responsible for initializing the policy properties;boolean
PUBLIC: Return true if the policy uses cascade locking.boolean
isNewerVersion
(Object firstLockFieldValue, Object secondWriteLockFieldValue) INTERNAL: Compares two values.boolean
isNewerVersion
(Object currentValue, Object domainObject, Object primaryKey, AbstractSession session) INTERNAL: Compares the value with the value from the object (or cache).boolean
isNewerVersion
(AbstractRecord databaseRow, Object domainObject, Object primaryKey, AbstractSession session) INTERNAL: Compares the value from the row and from the object (or cache).boolean
PUBLIC: Return true if the lock value is stored in the cache.boolean
PUBLIC: Return true if the lock value is stored in the object.protected Object
lockValueFromObject
(Object domainObject) INTERNAL: Retrieves the lock value from the object.void
mergeIntoParentCache
(CacheKey unitOfWorkCacheKey, CacheKey parentSessionCacheKey) INTERNAL: This method should merge changes from the parent into the child.void
mergeIntoParentCache
(UnitOfWorkImpl uow, Object primaryKey, Object object) INTERNAL: Only applicable when the value is stored in the cache.void
setDescriptor
(ClassDescriptor descriptor) INTERNAL:void
setIsCascaded
(boolean isCascaded) PUBLIC: Set whether to use cascade locking on the policy.void
setIsStoredInCache
(boolean isStoredInCache) PUBLIC: Set whether to store the lock in the cache or in the object.void
setLockOnChangeMode
(OptimisticLockingPolicy.LockOnChange lockOnChangeMode) ADVANCED: Sets the LockOnChange mode for this policy.void
INTERNAL: This method must be included in any locking policy.void
setWriteLockField
(DatabaseField writeLockField) ADVANCED: Set the write lock field.void
setWriteLockFieldName
(String writeLockFieldName) PUBLIC: Set the write lock field name.boolean
INTERNAL: Returns true if the policy has been set to set an optimistic read lock when any mapping changes.boolean
INTERNAL: Returns true if the policy has been set to set an optimistic read lock when a owning mapping changes.void
PUBLIC: Configure the version lock value to be stored in the cache.void
PUBLIC: Configure the version lock value to be stored in the object.boolean
INTERNAL: Indicates that compareWriteLockValues method is supported by the policy.void
updateObjectWithWriteValue
(ObjectLevelModifyQuery query, Object lockValue) void
updateRowAndObjectForUpdate
(ObjectLevelModifyQuery query, Object domainObject) INTERNAL: This method updates the modify row, and the domain object with the new lock value.protected void
updateWriteLockValueForWrite
(ObjectLevelModifyQuery query, Object lockValue) INTERNAL: Update the row, object and change set with the version value.void
validateDelete
(int rowCount, Object object, DeleteObjectQuery query) INTERNAL: Check the row count for lock failure.void
validateUpdate
(int rowCount, Object object, WriteObjectQuery query) INTERNAL: Check the row count for lock failure.void
writeLockValueIntoRow
(ObjectLevelModifyQuery query, Object domainObject) INTERNAL: This method updates the modify row with the old lock value.
-
Field Details
-
writeLockField
-
isCascaded
protected boolean isCascaded -
lockValueStored
protected int lockValueStored -
descriptor
-
cachedExpression
-
IN_CACHE
public static final int IN_CACHE- See Also:
-
IN_OBJECT
public static final int IN_OBJECT- See Also:
-
lockMapping
PERF: Cache the lock mapping if mapped with a direct mapping. -
lockOnChangeMode
-
-
Constructor Details
-
VersionLockingPolicy
public VersionLockingPolicy()PUBLIC: Create a new VersionLockingPolicy. Defaults to storing the lock value in the cache. -
VersionLockingPolicy
PUBLIC: Create a new VersionLockingPolicy. Defaults to storing the lock value in the cache.- Parameters:
fieldName
- specifies the field name for the write lock field.
-
VersionLockingPolicy
PUBLIC: Create a new VersionLockingPolicy. Defaults to storing the lock value in the cache.- Parameters:
field
- the write lock field.
-
-
Method Details
-
addLockFieldsToUpdateRow
INTERNAL: Add update fields for template row. These are any unmapped fields required to write in an update.- Specified by:
addLockFieldsToUpdateRow
in interfaceOptimisticLockingPolicy
-
addLockValuesToTranslationRow
INTERNAL: This method adds the lock value to the translation row of the passed in query. depending on the storage flag, the value is either retrieved from the cache of the object.- Specified by:
addLockValuesToTranslationRow
in interfaceOptimisticLockingPolicy
-
buildDeleteExpression
public Expression buildDeleteExpression(DatabaseTable table, Expression mainExpression, AbstractRecord row) INTERNAL: When given an expression, this method will return a new expression with the optimistic locking values included. The values are taken from the passed in database row. This expression will be used in a delete call.- Specified by:
buildDeleteExpression
in interfaceOptimisticLockingPolicy
-
buildExpression
INTERNAL: Returns an expression that will be used for both the update and delete where clause -
buildUpdateExpression
public Expression buildUpdateExpression(DatabaseTable table, Expression mainExpression, AbstractRecord row, AbstractRecord row2) INTERNAL: When given an expression, this method will return a new expression with the optimistic locking values included. The values are taken from the passed in database row. This expression will be used in an update call.- Specified by:
buildUpdateExpression
in interfaceOptimisticLockingPolicy
-
clone
INTERNAL: Clone the policy- Specified by:
clone
in interfaceOptimisticLockingPolicy
- Overrides:
clone
in classObject
-
supportsWriteLockValuesComparison
public boolean supportsWriteLockValuesComparison()INTERNAL: Indicates that compareWriteLockValues method is supported by the policy.- Specified by:
supportsWriteLockValuesComparison
in interfaceOptimisticLockingPolicy
-
compareWriteLockValues
INTERNAL: This method compares two writeLockValues. The writeLockValues should be non-null and of type Number. Returns: -1 if value1 is less (older) than value2; 0 if value1 equals value2; 1 if value1 is greater (newer) than value2. Throws: NullPointerException if the passed value is null; ClassCastException if the passed value is of a wrong type.- Specified by:
compareWriteLockValues
in interfaceOptimisticLockingPolicy
-
getDefaultLockingFieldType
INTERNAL: Return the default version locking filed java type, default is BigDecimal -
getBaseValue
public <T> T getBaseValue()INTERNAL: This is the base value that is older than all other values, it is used in the place of null in some situations.- Specified by:
getBaseValue
in interfaceOptimisticLockingPolicy
-
getDescriptor
INTERNAL: -
getInitialWriteValue
INTERNAL: returns the initial locking value -
getLockOnChangeMode
ADVANCED: returns the LockOnChange mode for this policy. This mode specifies if a Optimistic Write lock should be enforced on this entity when a set of mappings are changed. Unfortunately this locking policy can not enforce an optimistic write lock unless a FK or DTF field has changed so this type returns LockOnChange.NONE- Specified by:
getLockOnChangeMode
in interfaceOptimisticLockingPolicy
-
getNewLockValue
INTERNAL: This method gets the write lock value from either the cache or the object stored in the query. It then returns the new incremented value. -
getUnmappedFields
INTERNAL: This method returns any of the fields that are not mapped in the object. In the case of the value being stored in the cache, a vector with one value is returned. In the case of being stored in the object, an empty vector is returned. -
getValueToPutInCache
INTERNAL: Return the value that should be stored in the identity map. If the value is stored in the object, then return a null.- Specified by:
getValueToPutInCache
in interfaceOptimisticLockingPolicy
-
getVersionDifference
public int getVersionDifference(Object currentValue, Object domainObject, Object primaryKeys, AbstractSession session) PUBLIC: Return the number of versions different between these objects.- Specified by:
getVersionDifference
in interfaceOptimisticLockingPolicy
- Parameters:
currentValue
- the new lock valuedomainObject
- the object containing the version to be compared toprimaryKeys
- a vector containing the primary keys of the domainObjectsession
- the session to be used with the comparison
-
getWriteLockField
INTERNAL: Return the write lock field.- Specified by:
getWriteLockField
in interfaceOptimisticLockingPolicy
-
getWriteLockFieldName
PUBLIC: Return the field name of the field that stores the write lock value. -
getWriteLockUpdateExpression
INTERNAL: Retrun an expression that updates the write lock- Specified by:
getWriteLockUpdateExpression
in interfaceOptimisticLockingPolicy
-
getWriteLockValue
INTERNAL: This method will return the optimistic lock value for the object- Specified by:
getWriteLockValue
in interfaceOptimisticLockingPolicy
-
incrementWriteLockValue
INTERNAL: Adds 1 to the value passed in. -
initialize
INTERNAL: It is responsible for initializing the policy;- Specified by:
initialize
in interfaceOptimisticLockingPolicy
-
initializeProperties
public void initializeProperties()INTERNAL: It is responsible for initializing the policy properties;- Specified by:
initializeProperties
in interfaceOptimisticLockingPolicy
-
isCascaded
public boolean isCascaded()PUBLIC: Return true if the policy uses cascade locking.- Specified by:
isCascaded
in interfaceOptimisticLockingPolicy
-
isNewerVersion
public boolean isNewerVersion(Object currentValue, Object domainObject, Object primaryKey, AbstractSession session) INTERNAL: Compares the value with the value from the object (or cache). Will return true if the currentValue is newer than the domainObject.- Specified by:
isNewerVersion
in interfaceOptimisticLockingPolicy
-
isNewerVersion
public boolean isNewerVersion(AbstractRecord databaseRow, Object domainObject, Object primaryKey, AbstractSession session) INTERNAL: Compares the value from the row and from the object (or cache). Will return true if the row is newer than the object.- Specified by:
isNewerVersion
in interfaceOptimisticLockingPolicy
-
isNewerVersion
INTERNAL: Compares two values. Will return true if the firstLockFieldValue is newer than the secondWriteLockFieldValue. -
isStoredInCache
public boolean isStoredInCache()PUBLIC: Return true if the lock value is stored in the cache.- Specified by:
isStoredInCache
in interfaceOptimisticLockingPolicy
-
isStoredInObject
public boolean isStoredInObject()PUBLIC: Return true if the lock value is stored in the object. -
lockValueFromObject
INTERNAL: Retrieves the lock value from the object. -
getVersionMapping
INTERNAL: Returns the mapping that will be used to access the version value from an object. -
mergeIntoParentCache
INTERNAL: Only applicable when the value is stored in the cache. Will merge with the parent unit of work.- Specified by:
mergeIntoParentCache
in interfaceOptimisticLockingPolicy
-
mergeIntoParentCache
INTERNAL: This method should merge changes from the parent into the child. #see this method in VersionLockingPolicy- Specified by:
mergeIntoParentCache
in interfaceOptimisticLockingPolicy
-
setDescriptor
INTERNAL:- Specified by:
setDescriptor
in interfaceOptimisticLockingPolicy
-
setIsStoredInCache
public void setIsStoredInCache(boolean isStoredInCache) PUBLIC: Set whether to store the lock in the cache or in the object.- Parameters:
isStoredInCache
- set this to true if you would like to store lock in the cache and set it to false if you would like to store it in the object.
-
setIsCascaded
public void setIsCascaded(boolean isCascaded) PUBLIC: Set whether to use cascade locking on the policy.- Parameters:
isCascaded
- set this to true if you would like cascade the locking and set it to false if you would like no cascade locking.
-
setupWriteFieldsForInsert
INTERNAL: This method must be included in any locking policy. Put the initial writelock value into the modifyRow.- Specified by:
setupWriteFieldsForInsert
in interfaceOptimisticLockingPolicy
-
updateWriteLockValueForWrite
INTERNAL: Update the row, object and change set with the version value. This handles the version being mapped in nested aggregates, writable or read-only. -
shouldUpdateVersionOnOwnedMappingChange
public boolean shouldUpdateVersionOnOwnedMappingChange()INTERNAL: Returns true if the policy has been set to set an optimistic read lock when a owning mapping changes.- Specified by:
shouldUpdateVersionOnOwnedMappingChange
in interfaceOptimisticLockingPolicy
-
shouldUpdateVersionOnMappingChange
public boolean shouldUpdateVersionOnMappingChange()INTERNAL: Returns true if the policy has been set to set an optimistic read lock when any mapping changes.- Specified by:
shouldUpdateVersionOnMappingChange
in interfaceOptimisticLockingPolicy
-
updateObjectWithWriteValue
-
setLockOnChangeMode
ADVANCED: Sets the LockOnChange mode for this policy. This mode specifies if a Optimistic Write lock should be enforced on this entity when set of mappings are changed.- Specified by:
setLockOnChangeMode
in interfaceOptimisticLockingPolicy
-
setWriteLockField
ADVANCED: Set the write lock field. This can be used for advanced field types, such as XML nodes, or to set the field type. -
setWriteLockFieldName
PUBLIC: Set the write lock field name.- Parameters:
writeLockFieldName
- the name of the field to lock against.
-
storeInCache
public void storeInCache()PUBLIC: Configure the version lock value to be stored in the cache. This allows for the object not to require to store its version value as an attribute. Note: if using a stateless model where the object can be passed to a client and then later updated in a different transaction context, then the version lock value should not be stored in the cache, but in the object to ensure it is the correct value for that object. This is the default. -
storeInObject
public void storeInObject()PUBLIC: Configure the version lock value to be stored in the object. The object must define a mapping and an attribute to store the version value. Note: the value will be updated internally by EclipseLink and should not be updated by the application. -
updateRowAndObjectForUpdate
INTERNAL: This method updates the modify row, and the domain object with the new lock value.- Specified by:
updateRowAndObjectForUpdate
in interfaceOptimisticLockingPolicy
-
writeLockValueIntoRow
INTERNAL: This method updates the modify row with the old lock value. -
validateDelete
INTERNAL: Check the row count for lock failure.- Specified by:
validateDelete
in interfaceOptimisticLockingPolicy
-
validateUpdate
INTERNAL: Check the row count for lock failure.- Specified by:
validateUpdate
in interfaceOptimisticLockingPolicy
-