Overview
- Last Updated: April 14, 2026
- 2 minute read
Use the following procedure to use multi-statement, explicitly committed transactions with XCC:
-
Create a
Sessionobject in the usual way. -
Call
Session.setAutoCommitwith a value offalse. The next transaction created in the session will run as a multi-statement, explicit commit transaction. -
Optionally, call
Session.setUpdateto specify an explicit transaction type. By default, MarkLogic determines the transaction type through static analysis of the first statement in a request, but you can explicitly set the transaction type to update or query usingSession.setUpdate. -
Call
Session.submitRequestas usual to operate on your data. All requests run in the same transaction until the transaction is committed or rolled back. -
Call
Session.commitorSession.rollbackto commit or rollback the transaction. If the session ends or times out without explicitly commit or rolling back, the transaction is rolled back. -
To restore a session to the default, single-statement transaction model, call
Session.setAutoCommitwith a value oftrueandSession.setUpdatewith a value ofAUTO.
Note that the transaction configuration defined by setAutoCommit and setUpdate remain in effect for all transactions created by a session until explicitly changed. If you override the transaction configuration in an ad hoc query, the override applies only to the current transaction.
Multi-statement query transactions allow all the statements in a transaction to share the same point-in-time view of the database, as discussed in Point-In-Time Queries.
In a multi-statement update transaction, updates performed by one statement (or request) are visible to subsequent statements in the same transaction, without being visible to other transactions.
A multi-statement transaction remains open until it is committed or rolled back. Use Session.commit. to commit a multi-statement transaction and make the changes visible in the database. Use Session.rollback to roll back a multi-statement transaction, discarding any updates. Multi-statement transactions are implicitly rolled back when the containing session ends or the transaction times out. Failure to explicitly commit or rollback a multi-statement update transaction can tie up resources, hold locks unnecessarily, and increase the chances of deadlock.
Note: You may receive a java.lang.IllegalStateException if you call Session.commit from an exception handler when there are no pending updates in the current transaction. Committing from a handler is not recommended.
For a detailed discussion of multi-statement transactions, see Understanding Transactions in MarkLogic Server in Develop Server-Side Applications.
Multi-statement transactions impose special re-try semantics on XCC applications. For details, see Retrying Multi-statement Transactions.