Class 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.

    See Also:
    JdoTransactionManager, JtaTransactionManager, TransactionSynchronizationManager
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method 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 org.springframework.dao.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.
    • 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
    • Method Detail

      • getPersistenceManager

        public static javax.jdo.PersistenceManager getPersistenceManager​(javax.jdo.PersistenceManagerFactory pmf,
                                                                         boolean allowCreate)
                                                                  throws org.springframework.dao.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:
        org.springframework.dao.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
      • 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