I've checked in these changes.

Craig

svn commit -m "Manage relationships on both sides" src tests
Sending        src/org/apache/roller/pojos/FolderData.java
Sending        src/org/apache/roller/pojos/WeblogCategoryData.java
Sending        tests/org/apache/roller/business/PingsTest.java
Transmitting file data ...
Committed revision 492013.

On Jan 2, 2007, at 2:56 PM, Mitesh Meswani wrote:

Hi,

I am working to port Roller's backend code to use JPA/JDO (see trunk/sandbox/jdobackend). I ran across some code that is not portable across persistence strategies. Attached is a patch to fix that. The patch is from trunk dir based on revision 491960

Following is a summary of changes:
1. src/org/apache/roller/pojos/FolderData.java, src/org/apache/ roller/pojos/WeblogCategoryData.java: JPA assumes that relationships are managed by user code and not persistence provider. If we have a one-to-many relationship, if the "many side" is set to point to an instance, the "one side" also needs to add it the collection. For example if we set a FolderData's "parent", the parent should add it to its "childFolders" collection. FolderData and WeblogCategoryData is modified to follow this convention.

2. tests/org/apache/roller/business/PingsTest.java
The test calls AutpoingManager#removeAutoPings(Collection) passing it a collection of unmanged instances. It is modified to remove manged version instead. I have verified that when AutpoingManager#removeAutoPings is called from roller code (PingSetupAction#disableSelected()), the instances are managed

I have successfully run all tests against hibernate-derby with these changes. Please review and check in.

Thanks,
Mitesh




Index: src/org/apache/roller/pojos/FolderData.java
===================================================================
--- src/org/apache/roller/pojos/FolderData.java (revision 491943)
+++ src/org/apache/roller/pojos/FolderData.java (working copy)
@@ -84,6 +84,15 @@
         } else {
             this.path = parent.getPath() + "/" + name;
         }
+
+        this.parentFolder = parent;
+        // Relationship needs to be maintained from both sides
+        if(parent != null) {
+ // Following triggers this.hascode(). Which is calculated based on this.path
+            // It needs to happen after this.path is initialized
+            parent.childFolders.add(this);
+        }
+
     }


Index: src/org/apache/roller/pojos/WeblogCategoryData.java
===================================================================
--- src/org/apache/roller/pojos/WeblogCategoryData.java (revision 491943)
+++ src/org/apache/roller/pojos/WeblogCategoryData.java (working copy)
@@ -71,8 +71,7 @@
         this.image = image;

         this.website = website;
-        this.parentCategory = parent;
-
+
         // calculate path
         if(parent == null) {
             this.path = "/";
@@ -81,6 +80,15 @@
         } else {
             this.path = parent.getPath() + "/" + name;
         }
+
+        this.parentCategory = parent;
+        // Relationship needs to be maintained from both sides
+        if(parent != null) {
+ // Following triggers this.hascode(). Which is calculated based on this.path
+            // It needs to happen after this.path is initialized
+            parent.childCategories.add(this);
+        }
+
     }


Index: tests/org/apache/roller/business/PingsTest.java
===================================================================
--- tests/org/apache/roller/business/PingsTest.java     (revision 491943)
+++ tests/org/apache/roller/business/PingsTest.java     (working copy)
@@ -314,7 +314,9 @@

         // remove a collection
         List autoPings = new ArrayList();
+ autoPing2 = mgr.getAutoPing(autoPing2.getId()); //Get managed version of autoPing2
         autoPings.add(autoPing2);
+ autoPing3 = mgr.getAutoPing(autoPing3.getId()); //Get managed version of autoPing2
         autoPings.add(autoPing3);
         mgr.removeAutoPings(autoPings);
         TestUtils.endSession(true);

Craig Russell
Architect, Sun Java Enterprise System http://java.sun.com/products/jdo
408 276-5638 mailto:[EMAIL PROTECTED]
P.S. A good JDO? O, Gasp!

Attachment: smime.p7s
Description: S/MIME cryptographic signature

Reply via email to