You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by dw...@apache.org on 2010/03/22 15:25:23 UTC

svn commit: r926104 - /openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/Proxies.java

Author: dwoods
Date: Mon Mar 22 14:25:22 2010
New Revision: 926104

URL: http://svn.apache.org/viewvc?rev=926104&view=rev
Log:
OPENJPA-1097 Cleanup imports and add more comments on the before/after behavior of writeReplace().

Modified:
    openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/Proxies.java

Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/Proxies.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/Proxies.java?rev=926104&r1=926103&r2=926104&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/Proxies.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/Proxies.java Mon Mar 22 14:25:22 2010
@@ -20,9 +20,6 @@ package org.apache.openjpa.util;
 
 import java.security.AccessController;
 
-import org.apache.openjpa.conf.DetachOptions;
-import org.apache.openjpa.enhance.PersistenceCapable;
-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;
@@ -84,9 +81,22 @@ public class Proxies {
      * Used by proxy types to serialize non-proxy versions.
      */
     public static Object writeReplace(Proxy proxy, boolean detachable) {
-        /* OPENJPA-1097 Always remove $proxy classes during serialization if detachable
+        /* OPENJPA-1097 Remove $proxy classes during serialization based on:
+         *   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
          * 
          * Original code -
+         *   1) Runtime created proxy (!detachable), then unproxy
+         *   2) No Proxy, then return as-is
+         *   3) No StateManager (DetachedStateField==false), then return as-is
+         *   4) If detached, then return as-is <--- ERROR as EM.clear() marks
+         *      entity as detached but doesn't remove any $proxy usage
+         *   5) Else, unproxy
          * 
          *  if (detachable && (proxy == null || proxy.getOwner() == null 
          *      || proxy.getOwner().isDetached()))