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 2008/01/25 20:41:58 UTC

svn commit: r615317 - in /openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel: AttachManager.java VersionAttachStrategy.java

Author: pcl
Date: Fri Jan 25 11:41:57 2008
New Revision: 615317

URL: http://svn.apache.org/viewvc?rev=615317&view=rev
Log:
OPENJPA-245

Modified:
    openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AttachManager.java
    openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/VersionAttachStrategy.java

Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AttachManager.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AttachManager.java?rev=615317&r1=615316&r2=615317&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AttachManager.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AttachManager.java Fri Jan 25 11:41:57 2008
@@ -98,11 +98,7 @@
 
         CallbackException excep = null;
         try {
-            PersistenceCapable into = findFromDatabase(pc);
-            OpenJPAStateManager owner = (into == null) ? null
-                    : (OpenJPAStateManager) into.pcGetStateManager();
-            return attach(pc, into, owner, null, true);
-
+            return attach(pc, null, null, null, true);
         } catch (CallbackException ce) {
             excep = ce;
             return null; // won't be reached as the exceps will be rethrown
@@ -339,30 +335,4 @@
                 Exceptions.toString(obj))).setFailedObject (obj);
 		return sm;
 	}
-
-    /**
-     * Find a PersistenceCapable instance of an Object if it exists in the 
-     * database. If the object is null or can't be found in the database.  
-     *  
-     * @param pc An object which will be attached into the current context. The 
-     * object may or may not correspond to a row in the database. 
-     * 
-     * @return If the object is null or can't be found in the database this 
-     * method returns null. Otherwise a PersistenceCapable representation of the
-     * object is returned.
-     */
-    protected PersistenceCapable findFromDatabase(Object pc) {
-        PersistenceCapable rval = null;
-
-        if (pc != null) {
-            Object oid = _broker.newObjectId(pc.getClass(),
-                    getDetachedObjectId(pc));
-
-            if (oid != null) {
-                rval = ImplHelper.toPersistenceCapable(_broker.find(oid, true,
-                        null), getBroker().getConfiguration());
-            }
-        }
-        return rval;
-    }
 }

Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/VersionAttachStrategy.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/VersionAttachStrategy.java?rev=615317&r1=615316&r2=615317&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/VersionAttachStrategy.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/VersionAttachStrategy.java Fri Jan 25 11:41:57 2008
@@ -68,6 +68,13 @@
     public Object attach(AttachManager manager, Object toAttach,
         ClassMetaData meta, PersistenceCapable into, OpenJPAStateManager owner,
         ValueMetaData ownerMeta, boolean explicit) {
+
+        // VersionAttachStrategy is invoked in the case where no more
+        // intelligent strategy could be found; let's be more lenient
+        // about new vs. detached record determination.
+        if (into == null)
+            into = findFromDatabase(manager, toAttach);
+
         BrokerImpl broker = manager.getBroker();
         PersistenceCapable pc = ImplHelper.toPersistenceCapable(toAttach,
             meta.getRepository().getConfiguration());
@@ -342,4 +349,29 @@
         }
         return (copy == null) ? map : copy;
 	}
+
+    /**
+     * Find a PersistenceCapable instance of an Object if it exists in the
+     * database. If the object is null or can't be found in the database.
+     *
+     * @param pc An object which will be attached into the current context. The
+     * object may or may not correspond to a row in the database.
+     *
+     * @return If the object is null or can't be found in the database this
+     * method returns null. Otherwise a PersistenceCapable representation of the
+     * object is returned.
+     */
+    protected PersistenceCapable findFromDatabase(AttachManager manager,
+        Object pc) {
+        Object oid = manager.getBroker().newObjectId(pc.getClass(),
+            manager.getDetachedObjectId(pc));
+
+        if (oid != null) {
+            return ImplHelper.toPersistenceCapable(
+                manager.getBroker().find(oid, true, null),
+                manager.getBroker().getConfiguration());
+        } else {
+            return null;
+        }
+    }
 }