You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by pc...@apache.org on 2007/01/17 22:40:39 UTC
svn commit: r497185 - in /incubator/openjpa/trunk:
openjpa-kernel/src/main/java/org/apache/openjpa/conf/
openjpa-kernel/src/main/java/org/apache/openjpa/kernel/
openjpa-persistence/src/main/java/org/apache/openjpa/persistence/
Author: pcl
Date: Wed Jan 17 13:40:37 2007
New Revision: 497185
URL: http://svn.apache.org/viewvc?view=rev&rev=497185
Log:
fixes for OPENJPA-102 and OPENJPA-104
Modified:
incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/AutoDetachValue.java
incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AutoDetach.java
incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/BrokerImpl.java
incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DetachManager.java
incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerFactoryImpl.java
Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/AutoDetachValue.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/AutoDetachValue.java?view=diff&rev=497185&r1=497184&r2=497185
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/AutoDetachValue.java (original)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/AutoDetachValue.java Wed Jan 17 13:40:37 2007
@@ -30,11 +30,13 @@
public static final String DETACH_CLOSE = "close";
public static final String DETACH_COMMIT = "commit";
+ public static final String DETACH_ROLLBACK= "rollback";
public static final String DETACH_NONTXREAD = "nontx-read";
private static String[] ALIASES = new String[]{
DETACH_CLOSE, String.valueOf(AutoDetach.DETACH_CLOSE),
DETACH_COMMIT, String.valueOf(AutoDetach.DETACH_COMMIT),
+ DETACH_ROLLBACK, String.valueOf(AutoDetach.DETACH_ROLLBACK),
DETACH_NONTXREAD, String.valueOf(AutoDetach.DETACH_NONTXREAD),
// for compatibility with JDO DetachAllOnCommit
"true", String.valueOf(AutoDetach.DETACH_COMMIT),
Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AutoDetach.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AutoDetach.java?view=diff&rev=497185&r1=497184&r2=497185
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AutoDetach.java (original)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AutoDetach.java Wed Jan 17 13:40:37 2007
@@ -35,4 +35,9 @@
* nontransactional operation uses a new persistence context in essence.
*/
public static final int DETACH_NONTXREAD = 2 << 2;
+
+ /**
+ * Detach context on failed transaction commit / rollback.
+ */
+ public static final int DETACH_ROLLBACK = 2 << 3;
}
Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/BrokerImpl.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/BrokerImpl.java?view=diff&rev=497185&r1=497184&r2=497185
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/BrokerImpl.java (original)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/BrokerImpl.java Wed Jan 17 13:40:37 2007
@@ -1710,7 +1710,7 @@
/**
* Mark the operation over. If outermost caller of stack, returns true
- * and will detach manageed instances if necessary.
+ * and will detach managed instances if necessary.
*/
public boolean endOperation() {
try {
@@ -1779,6 +1779,10 @@
if ((_autoDetach & DETACH_COMMIT) != 0)
detachAllInternal(null);
+ else if (status == Status.STATUS_ROLLEDBACK
+ && (_autoDetach & DETACH_ROLLBACK) != 0) {
+ detachAllInternal(null);
+ }
// in an ee context, it's possible that the user tried to close
// us but we didn't actually close because we were waiting on this
Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DetachManager.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DetachManager.java?view=diff&rev=497185&r1=497184&r2=497185
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DetachManager.java (original)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DetachManager.java Wed Jan 17 13:40:37 2007
@@ -40,6 +40,7 @@
import org.apache.openjpa.meta.FieldMetaData;
import org.apache.openjpa.meta.JavaTypes;
import org.apache.openjpa.util.CallbackException;
+import org.apache.openjpa.util.ObjectNotFoundException;
import org.apache.openjpa.util.Proxy;
import org.apache.openjpa.util.ProxyManager;
import org.apache.openjpa.util.UserException;
@@ -148,7 +149,12 @@
exclude = StoreContext.EXCLUDE_ALL;
else if (detachMode == DETACH_ALL)
loadMode = StateManagerImpl.LOAD_ALL;
- sm.load(broker.getFetchConfiguration(), loadMode, exclude, null, false);
+ try {
+ sm.load(broker.getFetchConfiguration(), loadMode, exclude, null,
+ false);
+ } catch (ObjectNotFoundException onfe) {
+ // consume the exception
+ }
// create bitset of fields to detach; if mode is all we can use
// currently loaded bitset clone, since we know all fields are loaded
Modified: incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerFactoryImpl.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerFactoryImpl.java?view=diff&rev=497185&r1=497184&r2=497185
==============================================================================
--- incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerFactoryImpl.java (original)
+++ incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerFactoryImpl.java Wed Jan 17 13:40:37 2007
@@ -188,7 +188,8 @@
false);
// we should allow the user to specify these settings in conf
// regardless of PersistenceContextType
- broker.setAutoDetach(AutoDetach.DETACH_CLOSE);
+ broker.setAutoDetach(AutoDetach.DETACH_CLOSE
+ | AutoDetach.DETACH_ROLLBACK);
broker.setDetachedNew(false);
OpenJPAEntityManager em = newEntityManagerImpl(broker);