org.springframework.orm.jdo

## Class PersistenceManagerFactoryUtils

- java.lang.Object
- - org.springframework.orm.jdo.PersistenceManagerFactoryUtils

-     public abstract class PersistenceManagerFactoryUtils
      extends Object

  Helper class featuring methods for JDO `PersistenceManager` handling, allowing for reuse of PersistenceManager instances within transactions. Also provides support for exception translation.

  Used internally by `JdoTransactionManager`. Can also be used directly in application code.

  Since:
    03.06.2003
  Author:
    Juergen Hoeller
  See Also:
    `JdoTransactionManager`, `JtaTransactionManager`, `TransactionSynchronizationManager`

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static int` | `PERSISTENCE_MANAGER_SYNCHRONIZATION_ORDER` Order value for TransactionSynchronization objects that clean up JDO PersistenceManagers.

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `PersistenceManagerFactoryUtils()`

  - ### Method Summary

    All Methods Static Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `static void` | `applyTransactionTimeout(javax.jdo.Query query, javax.jdo.PersistenceManagerFactory pmf)` Apply the current transaction timeout, if any, to the given JDO Query object.
    `static DataAccessException` | `convertJdoAccessException(javax.jdo.JDOException ex)` Convert the given JDOException to an appropriate exception from the `org.springframework.dao` hierarchy.
    `static javax.jdo.PersistenceManager` | `doGetPersistenceManager(javax.jdo.PersistenceManagerFactory pmf, boolean allowCreate)` Obtain a JDO PersistenceManager via the given factory.
    `static void` | `doReleasePersistenceManager(javax.jdo.PersistenceManager pm, javax.jdo.PersistenceManagerFactory pmf)` Actually release a PersistenceManager for the given factory.
    `static javax.jdo.PersistenceManager` | `getPersistenceManager(javax.jdo.PersistenceManagerFactory pmf, boolean allowCreate)` Obtain a JDO PersistenceManager via the given factory.
    `static boolean` | `isPersistenceManagerTransactional(javax.jdo.PersistenceManager pm, javax.jdo.PersistenceManagerFactory pmf)` Return whether the given JDO PersistenceManager is transactional, that is, bound to the current thread by Spring's transaction facilities.
    `static void` | `releasePersistenceManager(javax.jdo.PersistenceManager pm, javax.jdo.PersistenceManagerFactory pmf)` Close the given PersistenceManager, created via the given factory, if it is not managed externally (i.e.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### PERSISTENCE_MANAGER_SYNCHRONIZATION_ORDER

          public static final int PERSISTENCE_MANAGER_SYNCHRONIZATION_ORDER

      Order value for TransactionSynchronization objects that clean up JDO PersistenceManagers. Return DataSourceUtils.CONNECTION_SYNCHRONIZATION_ORDER - 100 to execute PersistenceManager cleanup before JDBC Connection cleanup, if any.
      See Also:
        `DataSourceUtils.CONNECTION_SYNCHRONIZATION_ORDER`, Constant Field Values

  - ### Constructor Detail

    - #### PersistenceManagerFactoryUtils

          public PersistenceManagerFactoryUtils()

  - ### Method Detail

    - #### getPersistenceManager

          public static javax.jdo.PersistenceManager getPersistenceManager(javax.jdo.PersistenceManagerFactory pmf,
                                                                           boolean allowCreate)
                                                                    throws DataAccessResourceFailureException,
                                                                           IllegalStateException

      Obtain a JDO PersistenceManager via the given factory. Is aware of a corresponding PersistenceManager bound to the current thread, for example when using JdoTransactionManager. Will create a new PersistenceManager else, if "allowCreate" is `true`.
      Parameters:
        `pmf` - PersistenceManagerFactory to create the PersistenceManager with
        `allowCreate` - if a non-transactional PersistenceManager should be created when no transactional PersistenceManager can be found for the current thread
      Returns:
        the PersistenceManager
      Throws:
        `DataAccessResourceFailureException` - if the PersistenceManager couldn't be obtained
        `IllegalStateException` - if no thread-bound PersistenceManager found and "allowCreate" is `false`
      See Also:
        `JdoTransactionManager`

    - #### doGetPersistenceManager

          public static javax.jdo.PersistenceManager doGetPersistenceManager(javax.jdo.PersistenceManagerFactory pmf,
                                                                             boolean allowCreate)
                                                                      throws javax.jdo.JDOException,
                                                                             IllegalStateException

      Obtain a JDO PersistenceManager via the given factory. Is aware of a corresponding PersistenceManager bound to the current thread, for example when using JdoTransactionManager. Will create a new PersistenceManager else, if "allowCreate" is `true`.

      Same as `getPersistenceManager`, but throwing the original JDOException.

      Parameters:
        `pmf` - PersistenceManagerFactory to create the PersistenceManager with
        `allowCreate` - if a non-transactional PersistenceManager should be created when no transactional PersistenceManager can be found for the current thread
      Returns:
        the PersistenceManager
      Throws:
        `javax.jdo.JDOException` - if the PersistenceManager couldn't be created
        `IllegalStateException` - if no thread-bound PersistenceManager found and "allowCreate" is `false`
      See Also:
        `getPersistenceManager(javax.jdo.PersistenceManagerFactory, boolean)`, `JdoTransactionManager`

    - #### isPersistenceManagerTransactional

          public static boolean isPersistenceManagerTransactional(javax.jdo.PersistenceManager pm,
                                                                  javax.jdo.PersistenceManagerFactory pmf)

      Return whether the given JDO PersistenceManager is transactional, that is, bound to the current thread by Spring's transaction facilities.
      Parameters:
        `pm` - the JDO PersistenceManager to check
        `pmf` - JDO PersistenceManagerFactory that the PersistenceManager was created with (can be `null`)
      Returns:
        whether the PersistenceManager is transactional

    - #### applyTransactionTimeout

          public static void applyTransactionTimeout(javax.jdo.Query query,
                                                     javax.jdo.PersistenceManagerFactory pmf)
                                              throws javax.jdo.JDOException

      Apply the current transaction timeout, if any, to the given JDO Query object.
      Parameters:
        `query` - the JDO Query object
        `pmf` - JDO PersistenceManagerFactory that the Query was created for
      Throws:
        `javax.jdo.JDOException` - if thrown by JDO methods

    - #### convertJdoAccessException

          public static DataAccessException convertJdoAccessException(javax.jdo.JDOException ex)

      Convert the given JDOException to an appropriate exception from the `org.springframework.dao` hierarchy.

      The most important cases like object not found or optimistic locking failure are covered here. For more fine-granular conversion, JdoTransactionManager supports sophisticated translation of exceptions via a JdoDialect.

      Parameters:
        `ex` - JDOException that occured
      Returns:
        the corresponding DataAccessException instance
      See Also:
        `JdoTransactionManager.convertJdoAccessException(javax.jdo.JDOException)`, `JdoDialect.translateException(javax.jdo.JDOException)`

    - #### releasePersistenceManager

          public static void releasePersistenceManager(javax.jdo.PersistenceManager pm,
                                                       javax.jdo.PersistenceManagerFactory pmf)

      Close the given PersistenceManager, created via the given factory, if it is not managed externally (i.e. not bound to the thread).
      Parameters:
        `pm` - PersistenceManager to close
        `pmf` - PersistenceManagerFactory that the PersistenceManager was created with (can be `null`)

    - #### doReleasePersistenceManager

          public static void doReleasePersistenceManager(javax.jdo.PersistenceManager pm,
                                                         javax.jdo.PersistenceManagerFactory pmf)
                                                  throws javax.jdo.JDOException

      Actually release a PersistenceManager for the given factory. Same as `releasePersistenceManager`, but throwing the original JDOException.
      Parameters:
        `pm` - PersistenceManager to close
        `pmf` - PersistenceManagerFactory that the PersistenceManager was created with (can be `null`)
      Throws:
        `javax.jdo.JDOException` - if thrown by JDO methods