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

Copyright (c) 2004-2019 Eike Stepper (Loehne, Germany) and others.
All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html