public JDBCOptimisticLockingMetaData(JDBCEntityMetaData entityMetaData,
Element element) throws DeploymentException {
// Constructors ------------------------------------
log = Logger.getLogger(entityMetaData.getName());
Element strategyEl;
if((strategyEl = MetaData.getOptionalChild(element, "group-name")) != null)
{
lockingStrategy = FIELD_GROUP_STRATEGY;
groupName = MetaData.getElementContent(strategyEl);
lockingField = null;
keyGeneratorFactory = null;
log.debug("optimistic locking: group=" + groupName);
}
else if((strategyEl = MetaData.getOptionalChild(element, "modified-strategy")) != null)
{
lockingStrategy = MODIFIED_STRATEGY;
groupName = null;
lockingField = null;
keyGeneratorFactory = null;
log.debug("optimistic locking: modified strategy");
}
else if((strategyEl = MetaData.getOptionalChild(element, "read-strategy")) != null)
{
lockingStrategy = READ_STRATEGY;
groupName = null;
lockingField = null;
keyGeneratorFactory = null;
log.debug("optimistic locking: read strategy");
}
else if((strategyEl = MetaData.getOptionalChild(element, "version-column")) != null)
{
String fieldType = MetaData.getOptionalChildContent(element, "field-type");
if(fieldType != null)
throw new DeploymentException(
"field-type is not allowed for version column. It is implicitly set to java.lang.Long."
);
lockingStrategy = VERSION_COLUMN_STRATEGY;
lockingField = constructLockingField(entityMetaData, element);
groupName = null;
keyGeneratorFactory = null;
log.debug("optimistic locking: version-column=" + lockingField.getFieldName());
}
else if((strategyEl = MetaData.getOptionalChild(element, "timestamp-column")) != null)
{
String fieldType = MetaData.getOptionalChildContent(element, "field-type");
if(fieldType != null)
throw new DeploymentException(
"field-type is not allowed for timestamp column. It is implicitly set to java.util.Date."
);
lockingStrategy = TIMESTAMP_COLUMN_STRATEGY;
lockingField = constructLockingField(entityMetaData, element);
groupName = null;
keyGeneratorFactory = null;
log.debug("optimistic locking: timestamp-column=" + lockingField.getFieldName());
}
else if((keyGeneratorFactory =
MetaData.getOptionalChildContent(element, "key-generator-factory")) != null)
{
lockingStrategy = KEYGENERATOR_COLUMN_STRATEGY;
lockingField = constructLockingField(entityMetaData, element);
groupName = null;
log.debug("optimistic locking: key-generator-factory=" + keyGeneratorFactory);
}
else
{
throw new DeploymentException("Unexpected error: entity "
+ entityMetaData.getName()
+ " has unkown/incorrect optimistic locking configuration.");
}
}
Constructs optimistic locking metadata reading
optimistic-locking XML element |