Transaction and Concurrency Control Instructions

The Jade instructions for transaction and concurrency control are listed in the following table.

Instruction Purpose
beginTransaction Indicates the start of a transaction that updates persistent objects
beginTransientTransaction Indicates the start of a transaction that updates shared transient objects
commitTransaction Commits changes made within a transaction to storage
commitTransientTransaction Releases all transaction duration shared transient locks and exits from transient transaction state
abortTransaction Aborts the current transaction
abortTransientTransaction Releases all transaction duration shared transient locks and exits from transient transaction state
beginLoad Starts a read-only transaction
endLoad Ends a read-only transaction started with the beginLoad instruction
beginLock Starts a read-only transaction, ensuring referenced objects are the latest editions
endLock Ends a read-only transaction started with the beginLock instruction

The beginLoad and endLoad instruction pair and the beginLock and endLock instruction pair perform similar functions. They enable you to defer the unlocking of locked objects to the end of the operations bounded by the beginLoad and endLoad instructions or the beginLock and endLock instructions. One endLoad or endLock instruction enables you to unlock all of the objects locked during a sequence of operations bounded by these instructions.

The difference between the two instruction pairs is that the lock pair automatically places a shared lock on all objects that are referenced, whereas the load pair leaves it to you to decide and code the objects that are locked. Therefore, if the object is already in cache and you do not place a shared lock on it or use some other means of forcing the latest copy into your local cache when using the load instruction pair, reading this object will use the copy in cache, which may be out of date.

In persistent transaction state, all unlock requests for persistent objects are ignored. Similarly, in transient transaction state, all unlock requests for shared transient objects are ignored. A session lock is therefore not released if the unlock request is made while in transaction state. To release a session lock, the unlock request must be made while not in transaction state.

For more details about object editions, see "Unlocking Objects", in Chapter 6. For details about reading and writing transactions, see "Using Read and Write Transactions", in the following subsection. See also "Sharing Uncommitted Persistent Objects", later in this section.