Author: dwoods
Date: Sat Mar 27 20:53:53 2010
New Revision: 928271
URL: http://svn.apache.org/viewvc?rev=928271&view=rev
Log:
OPENJPA-1597 Revert code added to DetachManager to unproxy objects when
detached in-place. Updated tests to verify old behavior of detached entites
still having references, but that they are removed during serialization.
Added:
openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/detach/persistence1.xml
(with props)
openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/detach/persistence2.xml
(with props)
Modified:
openjpa/branches/2.0.x/openjpa-kernel/src/main/java/org/apache/openjpa/conf/Compatibility.java
openjpa/branches/2.0.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DetachManager.java
openjpa/branches/2.0.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DetachedStateManager.java
openjpa/branches/2.0.x/openjpa-kernel/src/main/java/org/apache/openjpa/util/Proxies.java
openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/compat/TestContainerSpecCompatibilityOptions.java
openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/compat/TestSpecCompatibilityOptions.java
openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/detach/TestDetachNoProxy.java
openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/proxy/TestDetachMerge.java
openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/proxy/persistence2.xml
openjpa/branches/2.0.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProductDerivation.java
Modified:
openjpa/branches/2.0.x/openjpa-kernel/src/main/java/org/apache/openjpa/conf/Compatibility.java
URL:
http://svn.apache.org/viewvc/openjpa/branches/2.0.x/openjpa-kernel/src/main/java/org/apache/openjpa/conf/Compatibility.java?rev=928271&r1=928270&r2=928271&view=diff
==============================================================================
---
openjpa/branches/2.0.x/openjpa-kernel/src/main/java/org/apache/openjpa/conf/Compatibility.java
(original)
+++
openjpa/branches/2.0.x/openjpa-kernel/src/main/java/org/apache/openjpa/conf/Compatibility.java
Sat Mar 27 20:53:53 2010
@@ -66,6 +66,7 @@ public class Compatibility {
private boolean _isNonDefaultMappingAllowed = false;
private boolean _reorderMetaDataResolution = true;
private boolean _reloadOnDetach = false;
+ private boolean _ignoreDetachedStateFieldForProxySerialization = false;
/**
* Whether to require exact identity value types when creating object
@@ -296,6 +297,39 @@ public class Compatibility {
}
/**
+ * Whether OpenJPA should ignore the DetachedStateField value when
+ * determining if our Proxy classes should be removed during serialization.
+ * <P>Starting with version 2.0.0, when the DetachedStateFiled==true, the
+ * build time $proxy classes will not be removed.
+ * <P>Prior to version 2.0.0, the DetachedStateFiled was not used and
+ * the $proxy classes were not being removed during serialization after
+ * the Persistence context was cleared.
+ *
+ * @param ignoreDSF if true the old Proxy serialization behavior will be
used.
+ *
+ * @since 2.0.0
+ */
+ public void setIgnoreDetachedStateFieldForProxySerialization(boolean
ignoreDSF) {
+ _ignoreDetachedStateFieldForProxySerialization = ignoreDSF;
+ }
+
+ /**
+ * Whether OpenJPA should ignore the DetachedStateField value when
+ * determining if our Proxy classes should be removed during serialization.
+ * <P>Starting with version 2.0.0, when the DetachedStateFiled==true, the
+ * build time $proxy classes will not be removed.
+ * <P>Prior to version 2.0.0, the DetachedStateFiled was not used and
+ * the $proxy classes were not being removed during serialization after
+ * the Persistence context was cleared.
+ *
+ * @since 2.0.0
+ * @return true if the old Proxy serialization will be used, otherwise
false.
+ */
+ public boolean getIgnoreDetachedStateFieldForProxySerialization() {
+ return _ignoreDetachedStateFieldForProxySerialization;
+ }
+
+ /**
* Whether OpenJPA should flush changes before detaching or serializing an
* entity. In JPA this is usually false, but other persistence frameworks
* (ie JDO) may expect it to be true.
Modified:
openjpa/branches/2.0.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DetachManager.java
URL:
http://svn.apache.org/viewvc/openjpa/branches/2.0.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DetachManager.java?rev=928271&r1=928270&r2=928271&view=diff
==============================================================================
---
openjpa/branches/2.0.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DetachManager.java
(original)
+++
openjpa/branches/2.0.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DetachManager.java
Sat Mar 27 20:53:53 2010
@@ -708,10 +708,8 @@ public class DetachManager
* Set the owner of the field's proxy to the detached state manager.
*/
private Object reproxy(Object obj, int field) {
- if (obj != null && _detSM != null && obj instanceof Proxy) {
+ if (obj != null && _detSM != null && obj instanceof Proxy)
((Proxy) obj).setOwner(_detSM, field);
- return ((Proxy) obj).copy(obj);
- }
return obj;
}
Modified:
openjpa/branches/2.0.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DetachedStateManager.java
URL:
http://svn.apache.org/viewvc/openjpa/branches/2.0.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DetachedStateManager.java?rev=928271&r1=928270&r2=928271&view=diff
==============================================================================
---
openjpa/branches/2.0.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DetachedStateManager.java
(original)
+++
openjpa/branches/2.0.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DetachedStateManager.java
Sat Mar 27 20:53:53 2010
@@ -25,6 +25,7 @@ import java.util.BitSet;
import java.util.Collection;
import java.util.Map;
+import org.apache.openjpa.conf.Compatibility;
import org.apache.openjpa.enhance.PersistenceCapable;
import org.apache.openjpa.enhance.StateManager;
import org.apache.openjpa.lib.util.Localizer;
@@ -62,6 +63,7 @@ public class DetachedStateManager
private final Object _oid;
private final Object _version;
private final ReentrantLock _lock;
+ private final boolean _useDSFForUnproxy; // old releases will default to
FALSE, which is the old behavior
/**
* Constructor.
@@ -89,6 +91,14 @@ public class DetachedStateManager
_lock = new ReentrantLock();
else
_lock = null;
+ if (sm.getContext() != null && sm.getContext().getConfiguration() !=
null) {
+ Compatibility compat =
sm.getContext().getConfiguration().getCompatibilityInstance();
+ if (compat != null &&
!compat.getIgnoreDetachedStateFieldForProxySerialization())
+ _useDSFForUnproxy = true; // new 2.0 behavior
+ else
+ _useDSFForUnproxy = false;
+ } else
+ _useDSFForUnproxy = false;
}
/////////////////////////////////
@@ -731,6 +741,15 @@ public class DetachedStateManager
return _dirty;
}
+ /**
+ * Should DetachedStateField be used by Proxies to determine when to remove
+ * $proxy wrappers during serialization.
+ * @since 2.0.0
+ */
+ public boolean getUseDSFForUnproxy() {
+ return _useDSFForUnproxy;
+ }
+
public BitSet getFlushed() {
throw new UnsupportedOperationException();
}
Modified:
openjpa/branches/2.0.x/openjpa-kernel/src/main/java/org/apache/openjpa/util/Proxies.java
URL:
http://svn.apache.org/viewvc/openjpa/branches/2.0.x/openjpa-kernel/src/main/java/org/apache/openjpa/util/Proxies.java?rev=928271&r1=928270&r2=928271&view=diff
==============================================================================
---
openjpa/branches/2.0.x/openjpa-kernel/src/main/java/org/apache/openjpa/util/Proxies.java
(original)
+++
openjpa/branches/2.0.x/openjpa-kernel/src/main/java/org/apache/openjpa/util/Proxies.java
Sat Mar 27 20:53:53 2010
@@ -20,6 +20,8 @@ package org.apache.openjpa.util;
import java.security.AccessController;
+import org.apache.openjpa.conf.Compatibility;
+import org.apache.openjpa.kernel.DetachedStateManager;
import org.apache.openjpa.kernel.OpenJPAStateManager;
import org.apache.openjpa.lib.util.J2DoPrivHelper;
import org.apache.openjpa.lib.util.Localizer;
@@ -85,10 +87,18 @@ public class Proxies {
* 1) No Proxy, then return as-is
* 2) Runtime created proxy (!detachable), then unproxy
* 3) No StateManager (DetachedStateField==false), then return as-is
- * 4) If detached, then unproxy
- * 5) If ClassMetaData exists and DetachedStateField != TRUE
- * (default of DetachedStateField==transient), then unproxy
- * 6) Else, return as-is
+ * Get the new IgnoreDetachedStateFieldForProxySerialization
+ * Compatibility flag from either the metadata/configuration if
+ * this is a normal StateManager, otherwise use the new flag
+ * added to the DetachedStateManager
+ * 4) If new 2.0 behavior
+ * 4a) If ClassMetaData exists and DetachedStateField == TRUE
+ * then do not remove the proxy and return as-is
+ * 4b) Else, using DetachedStateField of transient(default) or
+ * false, so unproxy
+ * 5) If 1.0 app or requested old 1.0 behavior
+ * 5a) If detached, then do not unproxy and return as-is
+ * 5b) Else, unproxy
*
* Original code -
* 1) Runtime created proxy (!detachable), then unproxy
@@ -111,19 +121,47 @@ public class Proxies {
} else if (proxy.getOwner() == null) {
// no StateManager (DetachedStateField==false), so no $proxy to
remove
return proxy;
- } else if (proxy.getOwner().isDetached()) {
- // already detached, so remove any $proxy
- return proxy.copy(proxy);
} else {
// using a StateManager, so determine what DetachedState is being
used
- OpenJPAStateManager sm = proxy.getOwner(); // !null checked for
above
- ClassMetaData meta = sm.getMetaData(); // if null, no proxies?
- if ((meta != null) &&
(!Boolean.TRUE.equals(meta.usesDetachedState()))) {
- // configured to use transient (null) or no (FALSE)
StateManger, so remove any $proxy
- return proxy.copy(proxy);
+ OpenJPAStateManager sm = proxy.getOwner(); // null checked for
above
+ ClassMetaData meta = null; // if null, no proxies?
+ boolean useDSFForUnproxy = false; // default to false for old
1.0 behavior
+
+ // DetachedStateMnager has no context or metadata, so we can't get
configuration settings
+ if (!proxy.getOwner().isDetached()) {
+ Compatibility compat = null;
+ meta = sm.getMetaData();
+ if (meta != null) {
+ compat =
meta.getRepository().getConfiguration().getCompatibilityInstance();
+ } else if (sm.getContext() != null &&
sm.getContext().getConfiguration() != null) {
+ compat =
sm.getContext().getConfiguration().getCompatibilityInstance();
+ } else {
+ // no-op - using a StateManager, but no Compatibility
settings available
+ }
+ if (compat != null) {
+ // new 2.0 behavior of using DetachedStateField to
determine unproxy during serialization
+ useDSFForUnproxy =
!compat.getIgnoreDetachedStateFieldForProxySerialization();
+ }
+ } else {
+ // Using a DetachedStateManager, so use the new flag since
there is no context or metadata
+ useDSFForUnproxy =
((DetachedStateManager)sm).getUseDSFForUnproxy();
+ }
+
+ if (useDSFForUnproxy) {
+ // use new 2.0 behavior
+ if ((meta != null) &&
(Boolean.TRUE.equals(meta.usesDetachedState()))) {
+ // configured to always use and serialize a StateManger,
so keep any $proxy
+ return proxy;
+ } else {
+ // already detached or using DetachedStateField==false or
transient, so remove any $proxy
+ return proxy.copy(proxy);
+ }
} else {
- // DetachedStateField==true, which means to keep the SM and
$proxy in the serialized objects
- return proxy;
+ // use old 1.0 behavior
+ if (proxy.getOwner().isDetached())
+ return proxy;
+ else
+ return proxy.copy(proxy);
}
}
}
Modified:
openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/compat/TestContainerSpecCompatibilityOptions.java
URL:
http://svn.apache.org/viewvc/openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/compat/TestContainerSpecCompatibilityOptions.java?rev=928271&r1=928270&r2=928271&view=diff
==============================================================================
---
openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/compat/TestContainerSpecCompatibilityOptions.java
(original)
+++
openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/compat/TestContainerSpecCompatibilityOptions.java
Sat Mar 27 20:53:53 2010
@@ -71,6 +71,7 @@ public class TestContainerSpecCompatibil
Compatibility compat =
emf1.getConfiguration().getCompatibilityInstance();
assertTrue(compat.getFlushBeforeDetach());
assertTrue(compat.getCopyOnDetach());
+ assertTrue(compat.getIgnoreDetachedStateFieldForProxySerialization());
assertTrue(compat.getPrivatePersistentProperties());
assertFalse(compat.isAbstractMappingUniDirectional());
assertFalse(compat.isNonDefaultMappingAllowed());
@@ -92,6 +93,7 @@ public class TestContainerSpecCompatibil
Compatibility compat =
emf.getConfiguration().getCompatibilityInstance();
assertFalse(compat.getFlushBeforeDetach());
assertFalse(compat.getCopyOnDetach());
+ assertFalse(compat.getIgnoreDetachedStateFieldForProxySerialization());
assertFalse(compat.getPrivatePersistentProperties());
assertTrue(compat.isAbstractMappingUniDirectional());
assertTrue(compat.isNonDefaultMappingAllowed());
Modified:
openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/compat/TestSpecCompatibilityOptions.java
URL:
http://svn.apache.org/viewvc/openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/compat/TestSpecCompatibilityOptions.java?rev=928271&r1=928270&r2=928271&view=diff
==============================================================================
---
openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/compat/TestSpecCompatibilityOptions.java
(original)
+++
openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/compat/TestSpecCompatibilityOptions.java
Sat Mar 27 20:53:53 2010
@@ -57,6 +57,7 @@ extends AbstractCachedEMFTestCase {
Compatibility compat =
emf.getConfiguration().getCompatibilityInstance();
assertTrue(compat.getFlushBeforeDetach());
assertTrue(compat.getCopyOnDetach());
+ assertTrue(compat.getIgnoreDetachedStateFieldForProxySerialization());
assertTrue(compat.getPrivatePersistentProperties());
String vMode = emf.getConfiguration().getValidationMode();
assertEquals("NONE", vMode);
@@ -65,7 +66,6 @@ extends AbstractCachedEMFTestCase {
assertEquals(spec.getVersion(), 1);
emf.close();
-
}
/*
@@ -82,6 +82,7 @@ extends AbstractCachedEMFTestCase {
Compatibility compat =
emf.getConfiguration().getCompatibilityInstance();
assertFalse(compat.getFlushBeforeDetach());
assertFalse(compat.getCopyOnDetach());
+ assertFalse(compat.getIgnoreDetachedStateFieldForProxySerialization());
assertFalse(compat.getPrivatePersistentProperties());
String vMode = emf.getConfiguration().getValidationMode();
assertEquals("AUTO", vMode);
Modified:
openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/detach/TestDetachNoProxy.java
URL:
http://svn.apache.org/viewvc/openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/detach/TestDetachNoProxy.java?rev=928271&r1=928270&r2=928271&view=diff
==============================================================================
---
openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/detach/TestDetachNoProxy.java
(original)
+++
openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/detach/TestDetachNoProxy.java
Sat Mar 27 20:53:53 2010
@@ -28,34 +28,19 @@ import java.util.ArrayList;
import org.apache.openjpa.conf.Compatibility;
import org.apache.openjpa.lib.log.Log;
import org.apache.openjpa.persistence.OpenJPAEntityManager;
+import org.apache.openjpa.persistence.OpenJPAEntityManagerFactorySPI;
+import org.apache.openjpa.persistence.OpenJPAPersistence;
import org.apache.openjpa.persistence.test.SingleEMFTestCase;
public class TestDetachNoProxy extends SingleEMFTestCase {
private static final int numEntities = 3;
private static final String PROXY = new String("$proxy");
- private Log log;
+ private Log _log;
public void setUp() {
setUp(DROP_TABLES, Entity20.class);
- log = emf.getConfiguration().getLog("test");
-
- // check and set Compatibility values to new 2.0 values
- Compatibility compat =
emf.getConfiguration().getCompatibilityInstance();
- assertNotNull(compat);
- if (log.isTraceEnabled()) {
- log.trace("Before set, FlushBeforeDetach=" +
compat.getFlushBeforeDetach());
- log.trace("Before set, CopyOnDetach=" + compat.getCopyOnDetach());
- log.trace("Before set, CascadeWithDetach=" +
compat.getCascadeWithDetach());
- }
- compat.setFlushBeforeDetach(false);
- compat.setCopyOnDetach(false);
- compat.setCascadeWithDetach(false);
- if (log.isTraceEnabled()) {
- log.trace("After set, FlushBeforeDetach=" +
compat.getFlushBeforeDetach());
- log.trace("After set, CopyOnDetach=" + compat.getCopyOnDetach());
- log.trace("After set, CascadeWithDetach=" +
compat.getCascadeWithDetach());
- }
+ _log = emf.getConfiguration().getLog("test");
createEntities(numEntities);
}
@@ -74,16 +59,33 @@ public class TestDetachNoProxy extends S
/*
* Verify that an in-place detached entity does not use the proxy classes.
*/
- public void testDetach() {
- if (log.isTraceEnabled())
- log.trace("***** testDetach() *****");
+ public void testDetach20() {
Integer id = new Integer(0);
- OpenJPAEntityManager em = emf.createEntityManager();
+ OpenJPAEntityManagerFactorySPI emf2 =
+ (OpenJPAEntityManagerFactorySPI)
OpenJPAPersistence.createEntityManagerFactory(
+ "NoProxy2New",
"org/apache/openjpa/persistence/detach/persistence2.xml");
+ assertNotNull(emf2);
+
+ Log log = emf2.getConfiguration().getLog("test");
+ if (log.isTraceEnabled())
+ log.trace("***** testDetach20() *****");
+ if (log.isTraceEnabled()) {
+ Compatibility compat =
emf2.getConfiguration().getCompatibilityInstance();
+ assertNotNull(compat);
+ log.trace("FlushBeforeDetach=" + compat.getFlushBeforeDetach());
+ log.trace("CopyOnDetach=" + compat.getCopyOnDetach());
+ log.trace("CascadeWithDetach=" + compat.getCascadeWithDetach());
+ log.trace("IgnoreDetachedStateFieldForProxySerialization=" +
+ compat.getIgnoreDetachedStateFieldForProxySerialization());
+ }
+
+ OpenJPAEntityManager em = emf2.createEntityManager();
em.clear();
+
Entity20 e20 = em.find(Entity20.class, id);
if (log.isTraceEnabled())
- log.trace("** after find");
+ log.trace("** testDetach20() - after find");
assertTrue(em.contains(e20));
assertFalse(em.isDetached(e20));
verifySerializable(e20, true, false);
@@ -91,28 +93,46 @@ public class TestDetachNoProxy extends S
// new openjpa-2.0.0 behavior, where detach() doesn't return updated
entity, but does it in-place
em.detach(e20);
if (log.isTraceEnabled())
- log.trace("** after detach");
+ log.trace("** testDetach20() - after detach");
// in-place updated entity should not have any proxy classes and
should be detached
assertFalse(em.contains(e20));
assertTrue(em.isDetached(e20));
- verifySerializable(e20, false, false);
+ verifySerializable(e20, true, false);
em.close();
+ emf2.close();
}
/*
* Verify that a detachCopy() returned entity does not contain any proxy
classes.
*/
- public void testDetachCopy() {
- if (log.isTraceEnabled())
- log.trace("***** testDetachCopy() *****");
+ public void testDetachCopy20() {
Integer id = new Integer(0);
- OpenJPAEntityManager em = emf.createEntityManager();
+ OpenJPAEntityManagerFactorySPI emf2 =
+ (OpenJPAEntityManagerFactorySPI)
OpenJPAPersistence.createEntityManagerFactory(
+ "NoProxy2New",
"org/apache/openjpa/persistence/detach/persistence2.xml");
+ assertNotNull(emf2);
+
+ Log log = emf2.getConfiguration().getLog("test");
+ if (log.isTraceEnabled())
+ log.trace("***** testDetachCopy20() *****");
+
+ if (log.isTraceEnabled()) {
+ Compatibility compat =
emf2.getConfiguration().getCompatibilityInstance();
+ assertNotNull(compat);
+ log.trace("FlushBeforeDetach=" + compat.getFlushBeforeDetach());
+ log.trace("CopyOnDetach=" + compat.getCopyOnDetach());
+ log.trace("CascadeWithDetach=" + compat.getCascadeWithDetach());
+ log.trace("IgnoreDetachedStateFieldForProxySerialization=" +
+ compat.getIgnoreDetachedStateFieldForProxySerialization());
+ }
+
+ OpenJPAEntityManager em = emf2.createEntityManager();
em.clear();
Entity20 e20 = em.find(Entity20.class, id);
if (log.isTraceEnabled())
- log.trace("** after find");
+ log.trace("** testDetachCopy20() - after find");
assertTrue(em.contains(e20));
assertFalse(em.isDetached(e20));
verifySerializable(e20, true, false);
@@ -120,7 +140,7 @@ public class TestDetachNoProxy extends S
// Test new detachCopy() method added in 2.0.0
Entity20 e20copy = em.detachCopy(e20);
if (log.isTraceEnabled())
- log.trace("** after detachCopy");
+ log.trace("** TestDetachCopy20() - after detachCopy");
// verify e20 is same as above
assertTrue(em.contains(e20));
assertFalse(em.isDetached(e20));
@@ -131,15 +151,33 @@ public class TestDetachNoProxy extends S
verifySerializable(e20copy, false, false);
em.close();
+ emf2.close();
}
/*
* Verify that in-place detachAll entities do not use the proxy classes.
*/
- public void testDetachAll() {
+ public void testDetachAll20() {
+ OpenJPAEntityManagerFactorySPI emf2 =
+ (OpenJPAEntityManagerFactorySPI)
OpenJPAPersistence.createEntityManagerFactory(
+ "NoProxy2New",
"org/apache/openjpa/persistence/detach/persistence2.xml");
+ assertNotNull(emf2);
+
+ Log log = emf2.getConfiguration().getLog("test");
if (log.isTraceEnabled())
- log.trace("***** testDetachAll() *****");
- OpenJPAEntityManager em = emf.createEntityManager();
+ log.trace("***** testDetachAll20() *****");
+
+ if (log.isTraceEnabled()) {
+ Compatibility compat =
emf2.getConfiguration().getCompatibilityInstance();
+ assertNotNull(compat);
+ log.trace("FlushBeforeDetach=" + compat.getFlushBeforeDetach());
+ log.trace("CopyOnDetach=" + compat.getCopyOnDetach());
+ log.trace("CascadeWithDetach=" + compat.getCascadeWithDetach());
+ log.trace("IgnoreDetachedStateFieldForProxySerialization=" +
+ compat.getIgnoreDetachedStateFieldForProxySerialization());
+ }
+
+ OpenJPAEntityManager em = emf2.createEntityManager();
em.clear();
ArrayList<Entity20> e20List = new ArrayList<Entity20>(numEntities);
@@ -147,7 +185,7 @@ public class TestDetachNoProxy extends S
Entity20 e20 = em.find(Entity20.class, new Integer(i));
e20List.add(e20);
if (log.isTraceEnabled())
- log.trace("** after find Entity20(" + i + ")");
+ log.trace("** testDetachAll20() - after find Entity20(" + i +
")");
assertTrue(em.contains(e20));
assertFalse(em.isDetached(e20));
verifySerializable(e20, true, false);
@@ -159,24 +197,42 @@ public class TestDetachNoProxy extends S
em.detachAll(e20List.get(0), e20List.get(1), e20List.get(2));
for (int i=0; i<numEntities; i++) {
if (log.isTraceEnabled())
- log.trace("** after EM.detachAll() verify e20List(" + i + ")");
+ log.trace("** testDetachAll20() - after EM.detachAll() verify
e20List(" + i + ")");
Entity20 e20 = e20List.get(i);
// entity should not have any proxy classes (in-place updated) and
is detached
assertFalse(em.contains(e20));
assertTrue(em.isDetached(e20));
- verifySerializable(e20, false, false);
+ verifySerializable(e20, true, false);
}
em.close();
+ emf2.close();
}
/*
- * Verify that after EM.clear() entities still contain proxy classes.
+ * Verify that after EM.clear() entities still contain proxy classes for
1.0 apps.
*/
- public void testClear() {
+ public void testClear10Compat() {
+ OpenJPAEntityManagerFactorySPI emf1 =
+ (OpenJPAEntityManagerFactorySPI)
OpenJPAPersistence.createEntityManagerFactory(
+ "NoProxy1Compat",
"org/apache/openjpa/persistence/detach/persistence1.xml");
+ assertNotNull(emf1);
+
+ Log log = emf1.getConfiguration().getLog("test");
if (log.isTraceEnabled())
- log.trace("***** testClear() *****");
- OpenJPAEntityManager em = emf.createEntityManager();
+ log.trace("***** testClear10Compat() *****");
+
+ if (log.isTraceEnabled()) {
+ Compatibility compat =
emf1.getConfiguration().getCompatibilityInstance();
+ assertNotNull(compat);
+ log.trace("FlushBeforeDetach=" + compat.getFlushBeforeDetach());
+ log.trace("CopyOnDetach=" + compat.getCopyOnDetach());
+ log.trace("CascadeWithDetach=" + compat.getCascadeWithDetach());
+ log.trace("IgnoreDetachedStateFieldForProxySerialization=" +
+ compat.getIgnoreDetachedStateFieldForProxySerialization());
+ }
+
+ OpenJPAEntityManager em = emf1.createEntityManager();
em.clear();
ArrayList<Entity20> e20List = new ArrayList<Entity20>(numEntities);
@@ -184,7 +240,7 @@ public class TestDetachNoProxy extends S
Entity20 e20 = em.find(Entity20.class, new Integer(i));
e20List.add(e20);
if (log.isTraceEnabled())
- log.trace("** after find Entity20(" + i + ")");
+ log.trace("** testClear10Compat() - after find Entity20(" + i
+ ")");
assertTrue(em.contains(e20));
assertFalse(em.isDetached(e20));
verifySerializable(e20, true, false);
@@ -194,19 +250,124 @@ public class TestDetachNoProxy extends S
for (int i=0; i<numEntities; i++) {
if (log.isTraceEnabled())
- log.trace("** after EM.clear() verify Entity20(" + i + ")");
+ log.trace("** testClear10Compat() - after EM.clear() verify
Entity20(" + i + ")");
Entity20 e20 = e20List.get(i);
assertFalse(em.contains(e20));
assertTrue(em.isDetached(e20));
- // entity should still have proxy classes and is detached,
- // Old 1.2.x Behavior -
+ // Old 1.0/1.2 Behavior -
// the $proxy classes are not removed during serialization
- // verifySerializable(e20, true, true);
+ verifySerializable(e20, true, true);
+ }
+
+ em.close();
+ emf1.close();
+ }
+
+ /*
+ * Verify that after EM.clear() entities still contain proxy classes for
1.0 apps.
+ */
+ public void testClear20Compat() {
+ OpenJPAEntityManagerFactorySPI emf2 =
+ (OpenJPAEntityManagerFactorySPI)
OpenJPAPersistence.createEntityManagerFactory(
+ "NoProxy2Compat",
"org/apache/openjpa/persistence/detach/persistence2.xml");
+ assertNotNull(emf2);
+
+ Log log = emf2.getConfiguration().getLog("test");
+ if (log.isTraceEnabled())
+ log.trace("***** testClear20Compat() *****");
+
+ if (log.isTraceEnabled()) {
+ Compatibility compat =
emf2.getConfiguration().getCompatibilityInstance();
+ assertNotNull(compat);
+ log.trace("FlushBeforeDetach=" + compat.getFlushBeforeDetach());
+ log.trace("CopyOnDetach=" + compat.getCopyOnDetach());
+ log.trace("CascadeWithDetach=" + compat.getCascadeWithDetach());
+ log.trace("IgnoreDetachedStateFieldForProxySerialization=" +
+ compat.getIgnoreDetachedStateFieldForProxySerialization());
+ }
+
+ OpenJPAEntityManager em = emf2.createEntityManager();
+ em.clear();
+
+ ArrayList<Entity20> e20List = new ArrayList<Entity20>(numEntities);
+ for (int i=0; i<numEntities; i++) {
+ Entity20 e20 = em.find(Entity20.class, new Integer(i));
+ e20List.add(e20);
+ if (log.isTraceEnabled())
+ log.trace("** testClear20Compat() - after find Entity20(" + i
+ ")");
+ assertTrue(em.contains(e20));
+ assertFalse(em.isDetached(e20));
+ verifySerializable(e20, true, false);
+ }
+
+ em.clear();
+
+ for (int i=0; i<numEntities; i++) {
+ if (log.isTraceEnabled())
+ log.trace("** testClear20Compat() - after EM.clear() verify
Entity20(" + i + ")");
+ Entity20 e20 = e20List.get(i);
+ assertFalse(em.contains(e20));
+ assertTrue(em.isDetached(e20));
+ // Old 1.0/1.2 Behavior -
+ // the $proxy classes are not removed during serialization
+ verifySerializable(e20, true, true);
+ }
+
+ em.close();
+ emf2.close();
+ }
+
+ /*
+ * Verify that after EM.clear() entities do not contain proxy classes for
2.0 apps.
+ */
+ public void testClear20New() {
+ OpenJPAEntityManagerFactorySPI emf2 =
+ (OpenJPAEntityManagerFactorySPI)
OpenJPAPersistence.createEntityManagerFactory(
+ "NoProxy2New",
"org/apache/openjpa/persistence/detach/persistence2.xml");
+ assertNotNull(emf2);
+
+ Log log = emf2.getConfiguration().getLog("test");
+ if (log.isTraceEnabled())
+ log.trace("***** testClear20New() *****");
+
+ if (log.isTraceEnabled()) {
+ Compatibility compat =
emf2.getConfiguration().getCompatibilityInstance();
+ assertNotNull(compat);
+ log.trace("FlushBeforeDetach=" + compat.getFlushBeforeDetach());
+ log.trace("CopyOnDetach=" + compat.getCopyOnDetach());
+ log.trace("CascadeWithDetach=" + compat.getCascadeWithDetach());
+ log.trace("IgnoreDetachedStateFieldForProxySerialization=" +
+ compat.getIgnoreDetachedStateFieldForProxySerialization());
+ }
+
+ OpenJPAEntityManager em = emf2.createEntityManager();
+ em.clear();
+
+ ArrayList<Entity20> e20List = new ArrayList<Entity20>(numEntities);
+ for (int i=0; i<numEntities; i++) {
+ Entity20 e20 = em.find(Entity20.class, new Integer(i));
+ e20List.add(e20);
+ if (log.isTraceEnabled())
+ log.trace("** testClear20New() - after find Entity20(" + i +
")");
+ assertTrue(em.contains(e20));
+ assertFalse(em.isDetached(e20));
+ verifySerializable(e20, true, false);
+ }
+
+ em.clear();
+
+ for (int i=0; i<numEntities; i++) {
+ if (log.isTraceEnabled())
+ log.trace("** testClear20New() - after EM.clear() verify
Entity20(" + i + ")");
+ Entity20 e20 = e20List.get(i);
+ assertFalse(em.contains(e20));
+ assertTrue(em.isDetached(e20));
// OPENJPA-1097 New behavior - $proxy classes are removed
verifySerializable(e20, true, false);
}
em.close();
+ emf2.close();
}
/**
@@ -225,8 +386,8 @@ public class TestDetachNoProxy extends S
ObjectOutputStream oos = null;
byte[] e20bytes = null;
- if (log.isTraceEnabled())
- log.trace("verifySerializable() - before serialize");
+ if (_log.isTraceEnabled())
+ _log.trace("verifySerializable() - before serialize");
verifyEntities(e20, usesProxyBefore);
// first serialize
@@ -251,8 +412,8 @@ public class TestDetachNoProxy extends S
try {
ois = new ObjectInputStream(bais);
e20new = (Entity20) ois.readObject();
- if (log.isTraceEnabled())
- log.trace("verifySerializable() - after deserialize");
+ if (_log.isTraceEnabled())
+ _log.trace("verifySerializable() - after deserialize");
verifyEntities(e20new, usesProxyAfter);
} catch (IOException e) {
fail(e.toString());
@@ -269,8 +430,8 @@ public class TestDetachNoProxy extends S
}
private void verifyEntities(Entity20 e20, boolean usesProxy) {
- if (log.isTraceEnabled()) {
- log.trace("verifyEntities() - asserting expected proxy usage is "
+ usesProxy);
+ if (_log.isTraceEnabled()) {
+ _log.trace("verifyEntities() - asserting expected proxy usage is "
+ usesProxy);
printClassNames(e20);
}
assertTrue("Expected sqlDate endsWith($proxy) to return " + usesProxy,
@@ -283,10 +444,10 @@ public class TestDetachNoProxy extends S
}
private void printClassNames(Entity20 e20) {
- if (log.isTraceEnabled()) {
- log.trace("sqlDate = " +
e20.getDate().getClass().getCanonicalName());
- log.trace("sqlTime = " +
e20.getTime().getClass().getCanonicalName());
- log.trace("sqlTimestamp = " +
e20.getTimestamp().getClass().getCanonicalName());
+ if (_log.isTraceEnabled()) {
+ _log.trace("sqlDate = " +
e20.getDate().getClass().getCanonicalName());
+ _log.trace("sqlTime = " +
e20.getTime().getClass().getCanonicalName());
+ _log.trace("sqlTimestamp = " +
e20.getTimestamp().getClass().getCanonicalName());
}
}
}
Modified:
openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/proxy/TestDetachMerge.java
URL:
http://svn.apache.org/viewvc/openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/proxy/TestDetachMerge.java?rev=928271&r1=928270&r2=928271&view=diff
==============================================================================
---
openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/proxy/TestDetachMerge.java
(original)
+++
openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/proxy/TestDetachMerge.java
Sat Mar 27 20:53:53 2010
@@ -21,7 +21,9 @@ package org.apache.openjpa.persistence.p
import java.math.BigDecimal;
import java.util.Calendar;
import java.util.Date;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.UUID;
import javax.persistence.EntityManager;
@@ -75,7 +77,6 @@ public class TestDetachMerge extends Sin
/*
* Test default 1.0 compatibility behavior, which should pass AS-IS
*/
- @AllowFailure(message="Will fail until OPENJPA-1597 is fixed")
public void testAnnuity1Compat() throws Exception {
OpenJPAEntityManagerFactorySPI emf1 =
(OpenJPAEntityManagerFactorySPI)
OpenJPAPersistence.createEntityManagerFactory(
@@ -91,6 +92,8 @@ public class TestDetachMerge extends Sin
log.trace("FlushBeforeDetach=" + compat.getFlushBeforeDetach());
log.trace("CopyOnDetach=" + compat.getCopyOnDetach());
log.trace("CascadeWithDetach=" + compat.getCascadeWithDetach());
+ log.trace("IgnoreDetachedStateFieldForProxySerialization=" +
+ compat.getIgnoreDetachedStateFieldForProxySerialization());
}
try {
@@ -103,9 +106,8 @@ public class TestDetachMerge extends Sin
}
/*
- * Test 2.0 behavior with Compatibility flag and DetachedStateField=true,
which should PASS
+ * Test default 2.0 compatibility behavior, which should PASS
*/
- @AllowFailure(message="Will fail until OPENJPA-1597 is fixed")
public void testAnnuity2Compat() throws Exception {
OpenJPAEntityManagerFactorySPI emf2 =
(OpenJPAEntityManagerFactorySPI)
OpenJPAPersistence.createEntityManagerFactory(
@@ -121,6 +123,8 @@ public class TestDetachMerge extends Sin
log.trace("FlushBeforeDetach=" + compat.getFlushBeforeDetach());
log.trace("CopyOnDetach=" + compat.getCopyOnDetach());
log.trace("CascadeWithDetach=" + compat.getCascadeWithDetach());
+ log.trace("IgnoreDetachedStateFieldForProxySerialization=" +
+ compat.getIgnoreDetachedStateFieldForProxySerialization());
}
try {
@@ -132,69 +136,6 @@ public class TestDetachMerge extends Sin
}
}
- /*
- * Test 2.0 behavior with DetachedStateField=true, which should FAIL
- */
- public void testAnnuity2Fail() throws Exception {
- OpenJPAEntityManagerFactorySPI emf2 =
- (OpenJPAEntityManagerFactorySPI)
OpenJPAPersistence.createEntityManagerFactory(
- "Annuity2Fail",
"org/apache/openjpa/persistence/proxy/persistence2.xml");
- assertNotNull(emf2);
-
- Log log = emf2.getConfiguration().getLog("test");
-
- if (log.isTraceEnabled()) {
- Compatibility compat =
emf2.getConfiguration().getCompatibilityInstance();
- assertNotNull(compat);
- log.trace("started testAnnuity2Fail()");
- log.trace("FlushBeforeDetach=" + compat.getFlushBeforeDetach());
- log.trace("CopyOnDetach=" + compat.getCopyOnDetach());
- log.trace("CascadeWithDetach=" + compat.getCascadeWithDetach());
- }
-
- try {
- execute(emf2);
- fail("testAnuity2Fail() should have caused an execption!");
- } catch (RuntimeException e) {
- if (e.getMessage().startsWith("Annuity:")) {
- // no-op caught our expected exception
- } else {
- fail("testAnuity2Fail() caught an unexpected execption!" + e);
- }
- } finally {
- emf2.close();
- }
- }
-
- /*
- * Test default 2.0 behavior with DetachedStateField=transient, which
should PASS
- */
- public void testAnnuity2New() throws Exception {
- OpenJPAEntityManagerFactorySPI emf2 =
- (OpenJPAEntityManagerFactorySPI)
OpenJPAPersistence.createEntityManagerFactory(
- "Annuity2New",
"org/apache/openjpa/persistence/proxy/persistence2.xml");
- assertNotNull(emf2);
-
- Log log = emf2.getConfiguration().getLog("test");
-
- if (log.isTraceEnabled()) {
- Compatibility compat =
emf2.getConfiguration().getCompatibilityInstance();
- assertNotNull(compat);
- log.trace("started testAnnuity2New()");
- log.trace("FlushBeforeDetach=" + compat.getFlushBeforeDetach());
- log.trace("CopyOnDetach=" + compat.getCopyOnDetach());
- log.trace("CascadeWithDetach=" + compat.getCascadeWithDetach());
- }
-
- try {
- execute(emf2);
- } catch (RuntimeException e) {
- fail("testAnuity2New() should not have caused an execption!" + e);
- } finally {
- emf2.close();
- }
- }
-
private void execute(OpenJPAEntityManagerFactorySPI myEMF) throws
Exception {
Log log = myEMF.getConfiguration().getLog("test");
//EntityManager em = myEMF.createEntityManager();
@@ -613,7 +554,8 @@ public class TestDetachMerge extends Sin
if (payors == null)
throw new RuntimeException("Annuity: IPayor list not the same
(payors was null)!");
if (payors.size() != payors2.size())
- throw new RuntimeException("Annuity: IPayor list not the same
(payors size not the same)!");
+ throw new RuntimeException("Annuity: IPayor list not the same
(payors size not the same)! payors=" +
+ payors.toArray().toString() + ", payors2=" +
payors2.toString());
for (int i = 0; i < payors.size(); i++) {
IPayor payor = payors.get(i);
boolean found = false;
Added:
openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/detach/persistence1.xml
URL:
http://svn.apache.org/viewvc/openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/detach/persistence1.xml?rev=928271&view=auto
==============================================================================
---
openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/detach/persistence1.xml
(added)
+++
openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/detach/persistence1.xml
Sat Mar 27 20:53:53 2010
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<persistence xmlns="http://java.sun.com/xml/ns/persistence"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ version="1.0"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
+ http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
+
+ <persistence-unit name="NoProxy1Compat">
+ <class>org.apache.openjpa.persistence.detach.Entity20</class>
+ <exclude-unlisted-classes>true</exclude-unlisted-classes>
+ <properties>
+ <property name="openjpa.jdbc.SynchronizeMappings"
+ value="buildSchema(ForeignKeys=true)"/>
+ </properties>
+ </persistence-unit>
+</persistence>
Propchange:
openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/detach/persistence1.xml
------------------------------------------------------------------------------
svn:eol-style = native
Added:
openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/detach/persistence2.xml
URL:
http://svn.apache.org/viewvc/openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/detach/persistence2.xml?rev=928271&view=auto
==============================================================================
---
openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/detach/persistence2.xml
(added)
+++
openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/detach/persistence2.xml
Sat Mar 27 20:53:53 2010
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<persistence xmlns="http://java.sun.com/xml/ns/persistence"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ version="2.0"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
+ http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
+
+ <!--
+ This is the new PU for 2.0, which takes the default 2.0
+ behavior of removing $proxy for default DetachedStateField=transient
+ -->
+ <persistence-unit name="NoProxy2New">
+ <class>org.apache.openjpa.persistence.detach.Entity20</class>
+ <exclude-unlisted-classes>true</exclude-unlisted-classes>
+ <properties>
+ <property name="openjpa.jdbc.SynchronizeMappings"
+ value="buildSchema(ForeignKeys=true)" />
+ </properties>
+ </persistence-unit>
+
+ <!--
+ This is the original PU from 1.0, but running as a 2.0 app
+ with the new Compatibility flag set to use the old 1.0 behavior,
+ which is to not remove $proxy after calling EM.clear()
+ -->
+ <persistence-unit name="NoProxy2Compat">
+ <class>org.apache.openjpa.persistence.detach.Entity20</class>
+ <exclude-unlisted-classes>true</exclude-unlisted-classes>
+ <properties>
+ <property name="openjpa.jdbc.SynchronizeMappings"
+ value="buildSchema(ForeignKeys=true)" />
+ <property name="openjpa.Compatibility"
+ value="IgnoreDetachedStateFieldForProxySerialization=true" />
+ </properties>
+ </persistence-unit>
+
+</persistence>
Propchange:
openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/detach/persistence2.xml
------------------------------------------------------------------------------
svn:eol-style = native
Modified:
openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/proxy/persistence2.xml
URL:
http://svn.apache.org/viewvc/openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/proxy/persistence2.xml?rev=928271&r1=928270&r2=928271&view=diff
==============================================================================
---
openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/proxy/persistence2.xml
(original)
+++
openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/proxy/persistence2.xml
Sat Mar 27 20:53:53 2010
@@ -26,58 +26,6 @@
<!--
This is the original PU from 1.0, but running as a 2.0 app
-->
- <persistence-unit name="Annuity2Fail">
- <class>org.apache.openjpa.persistence.proxy.entities.Address</class>
- <class>org.apache.openjpa.persistence.proxy.entities.Annuity</class>
-
<class>org.apache.openjpa.persistence.proxy.entities.AnnuityHolder</class>
-
<class>org.apache.openjpa.persistence.proxy.entities.AnnuityPersistebleObject</class>
- <class>org.apache.openjpa.persistence.proxy.entities.Contact</class>
-
<class>org.apache.openjpa.persistence.proxy.entities.EquityAnnuity</class>
-
<class>org.apache.openjpa.persistence.proxy.entities.FixedAnnuity</class>
- <class>org.apache.openjpa.persistence.proxy.entities.Payor</class>
- <class>org.apache.openjpa.persistence.proxy.entities.Payout</class>
- <class>org.apache.openjpa.persistence.proxy.entities.Person</class>
- <class>org.apache.openjpa.persistence.proxy.entities.Rider</class>
- <exclude-unlisted-classes>true</exclude-unlisted-classes>
- <properties>
- <property name="openjpa.DetachState"
value="fgs(DetachedStateField=true)" />
- <!-- <property name="openjpa.jdbc.Schema" value="EJB30"/> -->
- <property name="openjpa.jdbc.SynchronizeMappings"
- value="buildSchema(ForeignKeys=true)"/>
- </properties>
- </persistence-unit>
-
- <!--
- This is the original PU from 1.0, but with the DetachedStateField
- override removed, which will cause a transient one to be used
- and the tests will pass.
- -->
- <persistence-unit name="Annuity2New">
- <class>org.apache.openjpa.persistence.proxy.entities.Address</class>
- <class>org.apache.openjpa.persistence.proxy.entities.Annuity</class>
-
<class>org.apache.openjpa.persistence.proxy.entities.AnnuityHolder</class>
-
<class>org.apache.openjpa.persistence.proxy.entities.AnnuityPersistebleObject</class>
- <class>org.apache.openjpa.persistence.proxy.entities.Contact</class>
-
<class>org.apache.openjpa.persistence.proxy.entities.EquityAnnuity</class>
-
<class>org.apache.openjpa.persistence.proxy.entities.FixedAnnuity</class>
- <class>org.apache.openjpa.persistence.proxy.entities.Payor</class>
- <class>org.apache.openjpa.persistence.proxy.entities.Payout</class>
- <class>org.apache.openjpa.persistence.proxy.entities.Person</class>
- <class>org.apache.openjpa.persistence.proxy.entities.Rider</class>
- <exclude-unlisted-classes>true</exclude-unlisted-classes>
- <properties>
- <!-- <property name="openjpa.DetachState"
value="fgs(DetachedStateField=true)" /> -->
- <!-- <property name="openjpa.jdbc.Schema" value="EJB30"/> -->
- <property name="openjpa.jdbc.SynchronizeMappings"
- value="buildSchema(ForeignKeys=true)"/>
- </properties>
- </persistence-unit>
-
- <!--
- This is the original PU from 1.0, but running as a 2.0 app
- with the new Compatibility flag set to use the old 1.0 behavior,
- so the tests will pass.
- -->
<persistence-unit name="Annuity2Compat">
<class>org.apache.openjpa.persistence.proxy.entities.Address</class>
<class>org.apache.openjpa.persistence.proxy.entities.Annuity</class>
@@ -92,11 +40,11 @@
<class>org.apache.openjpa.persistence.proxy.entities.Rider</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
- <!-- <property name="openjpa.Compatibility.xxxxx" value="true)" />
-->
- <property name="openjpa.DetachState"
value="fgs(DetachedStateField=true)" />
- <!-- <property name="openjpa.jdbc.Schema" value="EJB30"/> -->
+ <property name="openjpa.DetachState"
+ value="fgs(DetachedStateField=true)" />
<property name="openjpa.jdbc.SynchronizeMappings"
- value="buildSchema(ForeignKeys=true)"/>
+ value="buildSchema(ForeignKeys=true)" />
</properties>
</persistence-unit>
+
</persistence>
Modified:
openjpa/branches/2.0.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProductDerivation.java
URL:
http://svn.apache.org/viewvc/openjpa/branches/2.0.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProductDerivation.java?rev=928271&r1=928270&r2=928271&view=diff
==============================================================================
---
openjpa/branches/2.0.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProductDerivation.java
(original)
+++
openjpa/branches/2.0.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProductDerivation.java
Sat Mar 27 20:53:53 2010
@@ -287,6 +287,7 @@ public class PersistenceProductDerivatio
compatibility.setFlushBeforeDetach(true);
compatibility.setCopyOnDetach(true);
compatibility.setPrivatePersistentProperties(true);
+
compatibility.setIgnoreDetachedStateFieldForProxySerialization(true);
// Disable bean validation for spec level < 2 configurations
conf.validationMode.set(String.valueOf(ValidationMode.NONE));
} else {