星期四, 三月 18, 2004

[JBoss-dev] [ jboss-Change Notes-658609 ] Optimistic locking support

[JBoss-dev] [ jboss-Change Notes-658609 ] Optimistic locking support

Initial Comment:
To setup optimistic locking, container configuration
element locking-policy should be set to
<locking-
policy>org.jboss.ejb.plugins.lock.JDBCOptimisticLock</l
ocking-policy>
and entity element in jbosscmp-jdbc.xml should have
optimistic-locking element.

Following are the possible configurations of optimistic-
locking element:
1. Fixed group of fields that will be used for optimistic
locking.
<optimistic-locking>
<group-name>optimisticLockingGroup</group-
name>
</optimistic-locking>
where optimisticLockingGroup is one of the entity's load-
group-name's.

2. Modified strategy. The fields that were modified during
transaction will be used for optimistic locking.
<optimistic-locking>
<modified-strategy/>
</optimistic-locking>

3. Read strategy. The fields that were read during
transaction will be used for optimistic locking.
<optimistic-locking>
<read-strategy/>
</optimistic-locking>

4. Version (counter) column strategy. Additional version
(counter) field of type java.lang.Long will be added to
entity which

will be used for optimistic locking. Each update of the
entity will increase the value of its version field by 1.
<optimistic-locking>
<version-column/>
<field-name>versionField</field-name>
<column-name>ol_version</column-name>
<jdbc-type>INTEGER</jdbc-type>
<sql-type>INTEGER(5)</sql-type>
</optimistic-locking>

5. Timestamp column strategy. Additional timestamp
column field of type java.util.Date will be added to entity
which will be

used for optimistic locking. Each update of the entity will
set the value of its timestamp field to the current time.
<optimistic-locking>
<timestamp-column/>
<field-name>timestampField</field-name>
<column-name>ol_timestamp</column-name>
<jdbc-type>TIMESTAMP</jdbc-type>
<sql-type>DATETIME</sql-type>
</optimistic-locking>

6. Version column generated by KeyGenerator.
Additional field will be added to entity that will be used
for optimistic

locking. Each update of the entity will update its version
column with value generated by KeyGenerator.
<optimistic-locking>
<key-generator-
factory>UUIDKeyGeneratorFactory</key-generator-
factory>
<field-type>java.lang.String</field-type>
<field-name>uuidField</field-name>
<column-name>ol_uuid</column-name>
<jdbc-type>VARCHAR</jdbc-type>
<sql-type>VARCHAR(32)</sql-type>
</optimistic-locking>