Package org.eclipse.emf.cdo.transaction

# Interface CDOUserTransaction

All Known Subinterfaces:
  `CDOTransaction`, `CDOXATransaction`, `InternalCDOTransaction`, `InternalCDOUserTransaction`, `InternalCDOXATransaction`

All Known Implementing Classes:
  `CDOPushTransaction`

public interface CDOUserTransaction
Provides functionality that is common to both `single` transactions and `distributed` (XA) transactions.

Since:
  2.0
Author:
  Simon McDuff
No Implement
  This interface is not intended to be implemented by clients.
No Extend
  This interface is not intended to be extended by clients.

## Method Summary

Modifier and Type
Method
Description
`CDOCommitInfo`
`commit()`
Same as `commit(null)`.
`CDOCommitInfo`
`commit(IProgressMonitor monitor)`
Commits the modifications of this transaction to the repository and returns a `commit info` object if successful.
`CDOUserSavepoint`
`getLastSavepoint()`
`void`
`rollback()`
`CDOUserSavepoint`
`setSavepoint()`
Creates a save point in the `CDOTransaction` that can be used to roll back a part of the transaction

## Method Details

### commit

CDOCommitInfo commit() throws ConcurrentAccessException, CommitException
Same as `commit(null)`.

Throws:
  `ConcurrentAccessException`
  `CommitException`
Since:
  3.0

### commit

CDOCommitInfo commit(IProgressMonitor monitor) throws ConcurrentAccessException, CommitException
Commits the modifications of this transaction to the repository and returns a `commit info` object if successful.

Various kinds of problems can cause the commit to fail and not all of them can be avoided by acquiring pessimistic `locks` on the modified objects. In particular you must expect and handle `containment cycle exceptions`. The following example shows how write robust transactions:

        CDOTransaction transaction = null;

        try
        {
          transaction = session.openTransaction();

          for (;;)
          {
            transaction.getViewLock().lock();

            try
            {
              CDOResource resource = transaction.getResource("/stock/resource1");

              // Modify the model here...

              transaction.commit();
              break;
            }
            catch (ConcurrentAccessException ex)
            {
              transaction.rollback();
            }
            catch (CommitException ex)
            {
              throw ex.wrap();
            }
            finally
            {
              transaction.getViewLock().unlock();
            }
          }
        }
        finally
        {
          if (transaction != null)
          {
            transaction.close();
          }
        }

Note that the transaction stays functional after a any call to the `commit()` methods. If the transaction is not closed after a commit it can be used to apply additional modifications to the model.

Throws:
  `ConcurrentAccessException`
  `CommitException`
Since:
  3.0

### rollback

void rollback()

### setSavepoint

CDOUserSavepoint setSavepoint()
Creates a save point in the `CDOTransaction` that can be used to roll back a part of the transaction

Save points do not involve the server side, everything is done on the client side.

Since:
  3.0

### getLastSavepoint

CDOUserSavepoint getLastSavepoint()

Since:
  3.0