Index: trunk/runtime20/src/java/org/apache/jdo/impl/pm/PersistenceManagerFactoryImpl.java =================================================================== --- trunk/runtime20/src/java/org/apache/jdo/impl/pm/PersistenceManagerFactoryImpl.java (revision 290761) +++ trunk/runtime20/src/java/org/apache/jdo/impl/pm/PersistenceManagerFactoryImpl.java (working copy) @@ -105,6 +105,7 @@ private boolean nontransactionalRead = true; private boolean nontransactionalWrite = false; private boolean ignoreCache = true; + private boolean detachAllOnCommit = true; private int queryTimeout = 0; private int updateTimeout = 0; @@ -526,6 +527,25 @@ return ignoreCache; } + /** + * Set the default DetachAllOnCommit setting for all PersistenceManager instances + * obtained from this factory. + * @param flag the default DetachAllOnCommit setting. + */ + public void setDetachAllOnCommit(boolean flag) { + assertConfigurable(); + detachAllOnCommit = flag; + } + + /** + * Get the default DetachAllOnCommit setting for all PersistenceManager instances + * obtained from this factory. + * @return the default DetachAllOnCommit setting. + */ + public boolean getDetachAllOnCommit() { + return detachAllOnCommit; + } + /** Set the default MsWait setting for all PersistenceManager instances * obtained from this factory. * @param msWait the default MsWait setting. Index: trunk/runtime20/src/java/org/apache/jdo/impl/pm/PersistenceManagerImpl.java =================================================================== --- trunk/runtime20/src/java/org/apache/jdo/impl/pm/PersistenceManagerImpl.java (revision 290761) +++ trunk/runtime20/src/java/org/apache/jdo/impl/pm/PersistenceManagerImpl.java (working copy) @@ -114,6 +114,12 @@ private boolean _ignoreCache; /** + * Flag for detaching all objects upon PM commit. + * Constructor defaults it to the PMF setting. + */ + private boolean _detachAllOnCommit; + + /** * Flag for active transaction */ private boolean _activeTransaction = false; @@ -260,6 +266,7 @@ optimistic = pmf.getOptimistic(); _ignoreCache = pmf.getIgnoreCache(); + _detachAllOnCommit = pmf.getDetachAllOnCommit(); _isClosed = false; @@ -284,6 +291,24 @@ return _ignoreCache; } + /** + * @see javax.jdo.PersistenceManager#setDetachAllOnCommit(boolean flag) + * @param flag the detachAllOnCommit value + */ + public void setDetachAllOnCommit(boolean flag) { + assertIsOpen(); + _detachAllOnCommit = flag; + } + + /** Get the value of the detachAllOnCommit flag. + * @see javax.jdo.PersistenceManager#getDetachAllOnCommit() + * @return the DetachAllOnCommit flag + */ + public boolean getDetachAllOnCommit() { + assertIsOpen(); + return _detachAllOnCommit; + } + /** Set the Multithreaded flag for this PersistenceManager. Applications * that use multiple threads to invoke methods or access fields from * instances managed by this PersistenceManager must set this flag to true. Index: trunk/runtime20/src/java/org/apache/jdo/impl/pm/PersistenceManagerWrapper.java =================================================================== --- trunk/runtime20/src/java/org/apache/jdo/impl/pm/PersistenceManagerWrapper.java (revision 290761) +++ trunk/runtime20/src/java/org/apache/jdo/impl/pm/PersistenceManagerWrapper.java (working copy) @@ -128,6 +128,30 @@ } /** + * @see javax.jdo.PersistenceManager#setIgnoreCache(boolean flag) + */ + public void setDetachAllOnCommit(boolean flag) { + if (isValid) { + pm.setDetachAllOnCommit(flag); + } else { + throw new JDOFatalUserException(msg.msg( + "EXC_PersistenceManagerClosed"));// NOI18N + } + } + + /** + * @see javax.jdo.PersistenceManager#getIgnoreCache() + */ + public boolean getDetachAllOnCommit() { + if (isValid) { + return pm.getDetachAllOnCommit(); + } else { + throw new JDOFatalUserException(msg.msg( + "EXC_PersistenceManagerClosed"));// NOI18N + } + } + + /** * @see javax.jdo.PersistenceManager#getMultithreaded() */ public boolean getMultithreaded() { Index: trunk/runtime20/src/java/org/apache/jdo/impl/pm/TransactionImpl.java =================================================================== --- trunk/runtime20/src/java/org/apache/jdo/impl/pm/TransactionImpl.java (revision 290761) +++ trunk/runtime20/src/java/org/apache/jdo/impl/pm/TransactionImpl.java (working copy) @@ -404,6 +404,11 @@ // Proceede with non-managed environment call. synchronized (this) { + if (persistenceManager.getDetachAllOnCommit()) { + throw new JDOCanRetryException(msg.msg( + "notsupported", "commit")); + } + // // Disallow parallel transaction completion calls: //