Class TransactionAwarePersistenceManagerFactoryProxy
- java.lang.Object
-
- org.apache.isis.persistence.jdo.spring.integration.TransactionAwarePersistenceManagerFactoryProxy
-
- All Implemented Interfaces:
org.springframework.beans.factory.FactoryBean<javax.jdo.PersistenceManagerFactory>
public class TransactionAwarePersistenceManagerFactoryProxy extends Object implements org.springframework.beans.factory.FactoryBean<javax.jdo.PersistenceManagerFactory>
Proxy for a target JDOPersistenceManagerFactory, returning the current thread-bound PersistenceManager (the Spring-managed transactional PersistenceManager or the single OpenPersistenceManagerInView PersistenceManager) ongetPersistenceManager(), if any.Essentially,
getPersistenceManager()calls get seamlessly forwarded toPersistenceManagerFactoryUtils.getPersistenceManager(javax.jdo.PersistenceManagerFactory, boolean). Furthermore,PersistenceManager.closecalls get forwarded toPersistenceManagerFactoryUtils.releasePersistenceManager(javax.jdo.PersistenceManager, javax.jdo.PersistenceManagerFactory).The main advantage of this proxy is that it allows DAOs to work with a plain JDO PersistenceManagerFactory reference, while still participating in Spring's (or a J2EE server's) resource and transaction management. DAOs will only rely on the JDO API in such a scenario, without any Spring dependencies.
Note that the behavior of this proxy matches the behavior that the JDO spec defines for a PersistenceManagerFactory as exposed by a JCA connector, when deployed in a J2EE server. Hence, DAOs could seamlessly switch between a JNDI PersistenceManagerFactory and this proxy for a local PersistenceManagerFactory, receiving the reference through Dependency Injection. This will work without any Spring API dependencies in the DAO code!
Of course, you can still access the target PersistenceManagerFactory even when your DAOs go through this proxy, by defining a bean reference that points directly at your target PersistenceManagerFactory bean.
- See Also:
PersistenceManagerFactory.getPersistenceManager(),PersistenceManager.close(),PersistenceManagerFactoryUtils.getPersistenceManager(javax.jdo.PersistenceManagerFactory, boolean),PersistenceManagerFactoryUtils.releasePersistenceManager(javax.jdo.PersistenceManager, javax.jdo.PersistenceManagerFactory)
-
-
Field Summary
Fields Modifier and Type Field Description static StringMMC_USER_OBJECT_KEYKey of the key-value pair into the map of the PM's user objects, we store the Isis MetaModelContext to.
-
Constructor Summary
Constructors Constructor Description TransactionAwarePersistenceManagerFactoryProxy(@NonNull org.apache.isis.core.metamodel.context.MetaModelContext metaModelContext)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description javax.jdo.PersistenceManagerFactorygetObject()Class<? extends javax.jdo.PersistenceManagerFactory>getObjectType()javax.jdo.PersistenceManagerFactorygetPersistenceManagerFactory()javax.jdo.PersistenceManagerFactorygetTargetPersistenceManagerFactory()Return the target JDO PersistenceManagerFactory that this proxy delegates to.protected booleanisAllowCreate()Return whether the PersistenceManagerFactory proxy is allowed to create a non-transactional PersistenceManager when no transactional PersistenceManager can be found for the current thread.booleanisSingleton()voidsetAllowCreate(boolean allowCreate)Set whether the PersistenceManagerFactory proxy is allowed to create a non-transactional PersistenceManager when no transactional PersistenceManager can be found for the current thread.voidsetTargetPersistenceManagerFactory(javax.jdo.PersistenceManagerFactory target)Set the target JDO PersistenceManagerFactory that this proxy should delegate to.
-
-
-
Field Detail
-
MMC_USER_OBJECT_KEY
public static final String MMC_USER_OBJECT_KEY
Key of the key-value pair into the map of the PM's user objects, we store the Isis MetaModelContext to.- See Also:
PersistenceManager.putUserObject(Object, Object), Constant Field Values
-
-
Constructor Detail
-
TransactionAwarePersistenceManagerFactoryProxy
public TransactionAwarePersistenceManagerFactoryProxy(@NonNull @NonNull org.apache.isis.core.metamodel.context.MetaModelContext metaModelContext)
-
-
Method Detail
-
setTargetPersistenceManagerFactory
public void setTargetPersistenceManagerFactory(javax.jdo.PersistenceManagerFactory target)
Set the target JDO PersistenceManagerFactory that this proxy should delegate to. This should be the raw PersistenceManagerFactory, as accessed by JdoTransactionManager.- See Also:
JdoTransactionManager
-
getTargetPersistenceManagerFactory
public javax.jdo.PersistenceManagerFactory getTargetPersistenceManagerFactory()
Return the target JDO PersistenceManagerFactory that this proxy delegates to.
-
setAllowCreate
public void setAllowCreate(boolean allowCreate)
Set whether the PersistenceManagerFactory proxy is allowed to create a non-transactional PersistenceManager when no transactional PersistenceManager can be found for the current thread.Default is "true". Can be turned off to enforce access to transactional PersistenceManagers, which safely allows for DAOs written to get a PersistenceManager without explicit closing (i.e. a
PersistenceManagerFactory.getPersistenceManager()call without correspondingPersistenceManager.close()call).
-
isAllowCreate
protected boolean isAllowCreate()
Return whether the PersistenceManagerFactory proxy is allowed to create a non-transactional PersistenceManager when no transactional PersistenceManager can be found for the current thread.
-
getObject
public javax.jdo.PersistenceManagerFactory getObject()
- Specified by:
getObjectin interfaceorg.springframework.beans.factory.FactoryBean<javax.jdo.PersistenceManagerFactory>
-
getObjectType
public Class<? extends javax.jdo.PersistenceManagerFactory> getObjectType()
- Specified by:
getObjectTypein interfaceorg.springframework.beans.factory.FactoryBean<javax.jdo.PersistenceManagerFactory>
-
isSingleton
public boolean isSingleton()
- Specified by:
isSingletonin interfaceorg.springframework.beans.factory.FactoryBean<javax.jdo.PersistenceManagerFactory>
-
getPersistenceManagerFactory
public javax.jdo.PersistenceManagerFactory getPersistenceManagerFactory()
-
-