Try OpenEdge Now
skip to main content
Java Open Clients
Using SmartDataObjects from Java Clients : Working with SDOResultSet objects : Updating SDOResultSet objects : Transactions and concurrency control
Transactions and concurrency control
By default, all updates that change the database occur in a transaction managed by the remote SmartDataObject. Typically, any method that updates or deletes an existing row, or that inserts a new row causes the SmartDataObject to complete a transaction for that row. Note that updating column values does not, in itself, change the database. Only row operations can actually cause a transaction to occur.
You also can extend a transaction to include modifications to multiple rows by using an SDOResultSet in Batch mode or by remotely controlling an automatic transaction, if one is available on the AppServer. For more information on Batch mode, see Using batch mode [extension]. For more information on automatic transactions, see Using extended transactions.
SmartDataObjects use optimistic concurrency control, which means records are read without a lock. Locks are acquired only for the short duration of the transaction when modifications are performed. Before updating or deleting a row, the remote SmartDataObject implementation compares the original values of the columns to their values in the database to determine if the columns were modified by another user. If a column was modified, the modification does not succeed and the transaction is rolled back. A failed update then throws an SDOModificationException. If the SmartDataObject implementation tries to modify or delete a row that is locked, it also throws an SDOModificationException. For more information on SDOModificationException, see Errors and exceptions.