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

    All Methods Instance Methods Abstract Methods
    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 Detail

    - #### 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