Package 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 JDOPersistenceManager
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 Description static int
PERSISTENCE_MANAGER_SYNCHRONIZATION_ORDER
Order value for TransactionSynchronization objects that clean up JDO PersistenceManagers.
Constructor Summary
Constructors Constructor Description PersistenceManagerFactoryUtils()
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 DataAccessException
convertJdoAccessException(javax.jdo.JDOException ex)
Convert the given JDOException to an appropriate exception from theorg.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.
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" istrue
.- Parameters:
pmf
- PersistenceManagerFactory to create the PersistenceManager withallowCreate
- 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 obtainedIllegalStateException
- if no thread-bound PersistenceManager found and "allowCreate" isfalse
- 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" istrue
.Same as
getPersistenceManager
, but throwing the original JDOException.- Parameters:
pmf
- PersistenceManagerFactory to create the PersistenceManager withallowCreate
- 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 createdIllegalStateException
- if no thread-bound PersistenceManager found and "allowCreate" isfalse
- 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 checkpmf
- JDO PersistenceManagerFactory that the PersistenceManager was created with (can benull
)- 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 objectpmf
- 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 theorg.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 closepmf
- PersistenceManagerFactory that the PersistenceManager was created with (can benull
)
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 asreleasePersistenceManager
, but throwing the original JDOException.- Parameters:
pm
- PersistenceManager to closepmf
- PersistenceManagerFactory that the PersistenceManager was created with (can benull
)- Throws:
javax.jdo.JDOException
- if thrown by JDO methods