## 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 `JdoTemplate`, `JdoInterceptor` and `JdoTransactionManager`. Can also be used directly in application code.

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

Field Summary
`static int` `PERSISTENCE_MANAGER_SYNCHRONIZATION_ORDER` Order value for TransactionSynchronization objects that clean up JDO PersistenceManagers.

Constructor Summary
`PersistenceManagerFactoryUtils()`

Method Summary
`static void` `applyTransactionTimeout(javax.jdo.Query query, javax.jdo.PersistenceManagerFactory pmf, JdoDialect jdoDialect)` 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,
                                               JdoDialect jdoDialect)
                                        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
    `jdoDialect` - the JdoDialect to use for applying a query timeout (must not be `null`)
  Throws:
    `javax.jdo.JDOException` - if thrown by JDO methods
  See Also:
    `JdoDialect.applyQueryTimeout(javax.jdo.Query, int)`

### 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, JdoAccessor and JdoTransactionManager support sophisticated translation of exceptions via a JdoDialect.

  Parameters:
    `ex` - JDOException that occured
  Returns:
    the corresponding DataAccessException instance
  See Also:
    `JdoAccessor.convertJdoAccessException(javax.jdo.JDOException)`, `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