Optimistic Locking


JBoss supports optimistic locking of entity beans. Optimistic locking allows multiple instances of the same entity bean to be active simultaneously. Consistency is enforced based on the optimistic locking policy choice. The optimistic locking policy choice defines the set of fields that are used in the commit time write of modified data to the database. The optimistic consistency check asserts that the values of the chosen set of fields have the same values in the database as existed when the current transaction was started. You ensure this by using a select for UPDATE WHERE... statement that contains the value assertions.

You specify the optimistic locking policy choice by using an optimistic-locking element in the jbosscmp-jdbc.xml descriptor. The content model of the optimistic-locking element is shown in Figure 11.14, and the description of the elements follows:

Figure 11.14. The jbosscmp-jdbc optimistic-locking element content model.


  • group-name This element specifies that optimistic locking is based on the fields of a load-group. The value of this element must match one of the entity's load-group-name elements. The fields in this group will be used for optimistic locking.

  • modified-strategy This element specifies that optimistic locking is based on the modified fields. This strategy implies that the fields that were modified during transaction will be used for optimistic locking.

  • read-strategy This element specifies that optimistic locking is based on the fields read. This strategy implies that the fields that were read/changed in the transaction will be used for optimistic locking.

  • version-column This element specifies that optimistic locking is based on a version column strategy. Specifying this element adds an additional version field of type java.lang.Long to the entity bean for optimistic locking. Each update of the entity increases the value of this field. The field-name element allows for the specification of the name of the CMP field, and the column-name element allows for the specification of the corresponding table column.

  • timestamp-column This element specifies that optimistic locking is based on a timestamp column strategy. Specifying this element adds an additional version field of type java.util.Date to the entity bean for optimistic locking. Each update of the entity sets the value of this field to the current time. The field-name element allows for the specification of the name of the CMP field, and the column-name element allows for the specification of the corresponding table column.

  • key-generator-factory This element specifies that optimistic locking is based on key generation. The value of the element is the JNDI name of an org.jboss.ejb.plugins.keygenerator.KeyGeneratorFactory implementation. Specifying this element adds an additional version field to the entity bean for optimistic locking. The type of the field must be specified via the field-type element. Each update of the entity updates the key field by obtaining a new value from the key generator. The field-name element allows for the specification of the name of the CMP field, and the column-name element allows for the specification of the corresponding table column.

A sample jbosscmp-jdbc.xml descriptor that illustrates all the optimistic locking strategies is shown here:

 <!DOCTYPE jbosscmp-jdbc PUBLIC     "-//JBoss//DTD JBOSSCMP-JDBC 3.2//EN"     "http://www.jboss.org/j2ee/dtd/jbosscmp-jdbc_3_2.dtd"> <jbosscmp-jdbc>     <defaults>         <datasource>java:/DefaultDS</datasource>         <datasource-mapping>Hypersonic SQL</datasource-mapping>     </defaults>     <enterprise-beans>         <entity>             <ejb-name>EntityGroupLocking</ejb-name>             <create-table>true</create-table>             <remove-table>true</remove-table>             <table-name>entitygrouplocking</table-name>             <cmp-field>                 <field-name>dateField</field-name>             </cmp-field>             <cmp-field>                 <field-name>integerField</field-name>             </cmp-field>             <cmp-field>                 <field-name>stringField</field-name>             </cmp-field>             <load-groups>                 <load-group>                     <load-group-name>string</load-group-name>                     <field-name>stringField</field-name>                 </load-group>                 <load-group>                     <load-group-name>all</load-group-name>                     <field-name>stringField</field-name>                     <field-name>dateField</field-name>                 </load-group>             </load-groups>             <optimistic-locking>                 <group-name>string</group-name>             </optimistic-locking>         </entity>         <entity>             <ejb-name>EntityModifiedLocking</ejb-name>             <create-table>true</create-table>             <remove-table>true</remove-table>             <table-name>entitymodifiedlocking</table-name>             <cmp-field>                 <field-name>dateField</field-name>             </cmp-field>             <cmp-field>                 <field-name>integerField</field-name>             </cmp-field>             <cmp-field>                 <field-name>stringField</field-name>             </cmp-field>             <optimistic-locking>                 <modified-strategy/>             </optimistic-locking>         </entity>         <entity>             <ejb-name>EntityReadLocking</ejb-name>             <create-table>true</create-table>             <remove-table>true</remove-table>             <table-name>entityreadlocking</table-name>             <cmp-field>                 <field-name>dateField</field-name>             </cmp-field>             <cmp-field>                 <field-name>integerField</field-name>             </cmp-field>             <cmp-field>                 <field-name>stringField</field-name>             </cmp-field>             <optimistic-locking>                 <read-strategy/>             </optimistic-locking>         </entity>         <entity>             <ejb-name>EntityVersionLocking</ejb-name>             <create-table>true</create-table>             <remove-table>true</remove-table>             <table-name>entityversionlocking</table-name>             <cmp-field>                 <field-name>dateField</field-name>             </cmp-field>             <cmp-field>                 <field-name>integerField</field-name>             </cmp-field>             <cmp-field>                 <field-name>stringField</field-name>             </cmp-field>             <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>         </entity>         <entity>             <ejb-name>EntityTimestampLocking</ejb-name>             <create-table>true</create-table>             <remove-table>true</remove-table>             <table-name>entitytimestamplocking</table-name>             <cmp-field>                 <field-name>dateField</field-name>             </cmp-field>             <cmp-field>                 <field-name>integerField</field-name>             </cmp-field>             <cmp-field>                 <field-name>stringField</field-name>             </cmp-field>             <optimistic-locking>                 <timestamp-column/>                 <field-name>versionField</field-name>                 <column-name>ol_timestamp</column-name>                 <jdbc-type>TIMESTAMP</jdbc-type>                 <sql-type>DATETIME</sql-type>             </optimistic-locking>         </entity>         <entity>             <ejb-name>EntityKeyGeneratorLocking</ejb-name>             <create-table>true</create-table>             <remove-table>true</remove-table>             <table-name>entitykeygenlocking</table-name>             <cmp-field>                 <field-name>dateField</field-name>             </cmp-field>             <cmp-field>                 <field-name>integerField</field-name>             </cmp-field>             <cmp-field>                 <field-name>stringField</field-name>             </cmp-field>             <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>         </entity>     </enterprise-beans> </jbosscmp-jdbc> 



JBoss 4. 0(c) The Official Guide
JBoss 4.0 - The Official Guide
ISBN: B003D7JU58
EAN: N/A
Year: 2006
Pages: 137

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net