You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@roller.apache.org by Dave <sn...@gmail.com> on 2007/01/06 16:36:59 UTC

Re: svn commit: r492013 - in /incubator/roller/trunk: src/org/apache/roller/pojos/FolderData.java src/org/apache/roller/pojos/WeblogCategoryData.java tests/org/apache/roller/business/PingsTest.java

The changes for "Relationships need to be maintained from both sides"
in FolderData and WeblogCategoryData cause the unit tests to fail.
Perhaps you tested against the JPA backend but not against Hibernate?

Do we need to change the way that we specify the Hibernate cascades
for the relationships in question? Any other ideas?

Details below...

- Dave



On 1/2/07, clr@apache.org <cl...@apache.org> wrote:
> Author: clr
> Date: Tue Jan  2 18:21:13 2007
> New Revision: 492013
>
> URL: http://svn.apache.org/viewvc?view=rev&rev=492013
> Log:
> Manage relationships on both sides
>
> Modified:
>     incubator/roller/trunk/src/org/apache/roller/pojos/FolderData.java
>     incubator/roller/trunk/src/org/apache/roller/pojos/WeblogCategoryData.java
>     incubator/roller/trunk/tests/org/apache/roller/business/PingsTest.java
>
> Modified: incubator/roller/trunk/src/org/apache/roller/pojos/FolderData.java
> URL: http://svn.apache.org/viewvc/incubator/roller/trunk/src/org/apache/roller/pojos/FolderData.java?view=diff&rev=492013&r1=492012&r2=492013
> ==============================================================================
> --- incubator/roller/trunk/src/org/apache/roller/pojos/FolderData.java (original)
> +++ incubator/roller/trunk/src/org/apache/roller/pojos/FolderData.java Tue Jan  2 18:21:13 2007
> @@ -84,6 +84,16 @@
>          } else {
>              this.path = parent.getPath() + "/" + name;
>          }
> +
> +        this.parentFolder = parent;
> +        // Relationships need to be maintained from both sides
> +        if(parent != null) {
> +            // The following triggers this.hashCode(), which is calculated
> +            // based on this.path
> +            // It needs to happen after this.path is initialized
> +            parent.childFolders.add(this);
> +        }
> +
>      }

That change causes the test teardown to fail for the
testFolderEquality test when testing using Hibernate. The following
exception is thrown:

java.lang.Exception: Test teardown failed at
org.apache.roller.business.BookmarkTest.tearDown(BookmarkTest.java:86)Caused
by: org.hibernate.NonUniqueObjectException: a different object with
the same identifier value was already associated with the session:
[org.apache.roller.pojos.FolderData#402881e40ff7f5a6010ff7f5b68e00c6]
at org.hibernate.engine.StatefulPersistenceContext.checkUniqueness(StatefulPersistenceContext.java:629)
at org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:70)
at org.hibernate.impl.SessionImpl.fireDelete(SessionImpl.java:790) at
org.hibernate.impl.SessionImpl.delete(SessionImpl.java:782) at
org.hibernate.engine.CascadingAction$2.cascade(CascadingAction.java:47)
at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:213) at
org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:157) at
org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:108) at
org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:290)
at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:185) at
org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:160) at
org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:108) at
org.hibernate.engine.Cascade.cascade(Cascade.java:248) at
org.hibernate.engine.Cascade.cascade(Cascade.java:223) at
org.hibernate.event.def.DefaultDeleteEventListener.cascadeBeforeDelete(DefaultDeleteEventListener.java:220)
at org.hibernate.event.def.DefaultDeleteEventListener.deleteEntity(DefaultDeleteEventListener.java:169)
at org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:110)
at org.hibernate.impl.SessionImpl.fireDelete(SessionImpl.java:790) at
org.hibernate.impl.SessionImpl.delete(SessionImpl.java:768) at
sun.reflect.GeneratedMethodAccessor28.invoke(Unknown Source) at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:301)
at $Proxy0.delete(Unknown Source) at
org.apache.roller.business.hibernate.HibernatePersistenceStrategy.remove(HibernatePersistenceStrategy.java:373)
at org.apache.roller.business.hibernate.HibernateUserManagerImpl.removeWebsiteContents(HibernateUserManagerImpl.java:197)
at org.apache.roller.business.hibernate.HibernateUserManagerImpl.removeWebsite(HibernateUserManagerImpl.java:100)
at org.apache.roller.TestUtils.teardownWeblog(TestUtils.java:160) at
org.apache.roller.business.BookmarkTest.tearDown(BookmarkTest.java:81)
... 12 more


And this change:

> Modified: incubator/roller/trunk/src/org/apache/roller/pojos/WeblogCategoryData.java
> URL: http://svn.apache.org/viewvc/incubator/roller/trunk/src/org/apache/roller/pojos/WeblogCategoryData.java?view=diff&rev=492013&r1=492012&r2=492013
> ==============================================================================
> --- incubator/roller/trunk/src/org/apache/roller/pojos/WeblogCategoryData.java (original)
> +++ incubator/roller/trunk/src/org/apache/roller/pojos/WeblogCategoryData.java Tue Jan  2 18:21:13 2007
> @@ -71,8 +71,7 @@
>          this.image = image;
>
>          this.website = website;
> -        this.parentCategory = parent;
> -
> +
>          // calculate path
>          if(parent == null) {
>              this.path = "/";
> @@ -81,6 +80,16 @@
>          } else {
>              this.path = parent.getPath() + "/" + name;
>          }
> +
> +        this.parentCategory = parent;
> +        // Relationship needs to be maintained from both sides
> +        if(parent != null) {
> +            // Following triggers this.hashCode(), which is calculated
> +            // based on this.path
> +            // It needs to happen after this.path is initialized
> +            parent.childCategories.add(this);
> +        }
> +
>      }


It causes the same thing for testWeblogCategoryEquality:

java.lang.Exception: Test teardown failed at
org.apache.roller.business.WeblogCategoryTest.tearDown(WeblogCategoryTest.java:84)Caused
by: org.hibernate.NonUniqueObjectException: a different object with
the same identifier value was already associated with the session:
[org.apache.roller.pojos.WeblogCategoryData#402881e40ff80284010ff8029aec011e]
at org.hibernate.engine.StatefulPersistenceContext.checkUniqueness(StatefulPersistenceContext.java:629)
at org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:70)
at org.hibernate.impl.SessionImpl.fireDelete(SessionImpl.java:790) at
org.hibernate.impl.SessionImpl.delete(SessionImpl.java:782) at
org.hibernate.engine.CascadingAction$2.cascade(CascadingAction.java:47)
at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:213) at
org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:157) at
org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:108) at
org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:290)
at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:185) at
org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:160) at
org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:108) at
org.hibernate.engine.Cascade.cascade(Cascade.java:248) at
org.hibernate.engine.Cascade.cascade(Cascade.java:223) at
org.hibernate.event.def.DefaultDeleteEventListener.cascadeBeforeDelete(DefaultDeleteEventListener.java:220)
at org.hibernate.event.def.DefaultDeleteEventListener.deleteEntity(DefaultDeleteEventListener.java:169)
at org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:110)
at org.hibernate.impl.SessionImpl.fireDelete(SessionImpl.java:790) at
org.hibernate.impl.SessionImpl.delete(SessionImpl.java:768) at
sun.reflect.GeneratedMethodAccessor54.invoke(Unknown Source) at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:301)
at $Proxy0.delete(Unknown Source) at
org.apache.roller.business.hibernate.HibernatePersistenceStrategy.remove(HibernatePersistenceStrategy.java:373)
at org.apache.roller.business.hibernate.HibernateUserManagerImpl.removeWebsiteContents(HibernateUserManagerImpl.java:211)
at org.apache.roller.business.hibernate.HibernateUserManagerImpl.removeWebsite(HibernateUserManagerImpl.java:100)
at org.apache.roller.TestUtils.teardownWeblog(TestUtils.java:160) at
org.apache.roller.business.WeblogCategoryTest.tearDown(WeblogCategoryTest.java:79)
... 12 more

Re: svn commit: r492013 - in /incubator/roller/trunk: src/org/apache/roller/pojos/FolderData.java src/org/apache/roller/pojos/WeblogCategoryData.java tests/org/apache/roller/business/PingsTest.java

Posted by Dave <sn...@gmail.com>.
Perfect. Thanks guys. - Dave


On 1/6/07, Craig L Russell <Cr...@sun.com> wrote:
> I checked in the patch. AOK now?
>
> Craig
>
> On Jan 6, 2007, at 4:34 PM, Mitesh Meswani wrote:
>
> > Index: tests/org/apache/roller/business/BookmarkTest.java
> > ===================================================================
> > --- tests/org/apache/roller/business/BookmarkTest.java        (revision
> > 493201)
> > +++ tests/org/apache/roller/business/BookmarkTest.java        (working copy)
> > @@ -242,7 +242,6 @@
> >          assertTrue(root.equals(testFolder));
> >
> >          testFolder = new FolderData(root, "root", "root",
> > testWeblog);
> > -        testFolder.setId(root.getId());
> >          assertFalse(root.equals(testFolder));
> >      }
> >
> > Index: tests/org/apache/roller/business/WeblogCategoryTest.java
> > ===================================================================
> > --- tests/org/apache/roller/business/WeblogCategoryTest.java
> > (revision 493201)
> > +++ tests/org/apache/roller/business/WeblogCategoryTest.java
> > (working copy)
> > @@ -178,7 +178,6 @@
> >          assertTrue(root.equals(testCat));
> >
> >          testCat = new WeblogCategoryData(testWeblog, root, "root",
> > "root", null);
> > -        testCat.setId(root.getId());
> >          assertFalse(root.equals(testCat));
> >      }
>
> Craig Russell
> Architect, Sun Java Enterprise System http://java.sun.com/products/jdo
> 408 276-5638 mailto:Craig.Russell@sun.com
> P.S. A good JDO? O, Gasp!
>
>
>
>

Re: svn commit: r492013 - in /incubator/roller/trunk: src/org/apache/roller/pojos/FolderData.java src/org/apache/roller/pojos/WeblogCategoryData.java tests/org/apache/roller/business/PingsTest.java

Posted by Craig L Russell <Cr...@Sun.COM>.
I checked in the patch. AOK now?

Craig

On Jan 6, 2007, at 4:34 PM, Mitesh Meswani wrote:

> Index: tests/org/apache/roller/business/BookmarkTest.java
> ===================================================================
> --- tests/org/apache/roller/business/BookmarkTest.java	(revision  
> 493201)
> +++ tests/org/apache/roller/business/BookmarkTest.java	(working copy)
> @@ -242,7 +242,6 @@
>          assertTrue(root.equals(testFolder));
>
>          testFolder = new FolderData(root, "root", "root",  
> testWeblog);
> -        testFolder.setId(root.getId());
>          assertFalse(root.equals(testFolder));
>      }
>
> Index: tests/org/apache/roller/business/WeblogCategoryTest.java
> ===================================================================
> --- tests/org/apache/roller/business/WeblogCategoryTest.java	 
> (revision 493201)
> +++ tests/org/apache/roller/business/WeblogCategoryTest.java	 
> (working copy)
> @@ -178,7 +178,6 @@
>          assertTrue(root.equals(testCat));
>
>          testCat = new WeblogCategoryData(testWeblog, root, "root",  
> "root", null);
> -        testCat.setId(root.getId());
>          assertFalse(root.equals(testCat));
>      }

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


Re: svn commit: r492013 - in /incubator/roller/trunk: src/org/apache/roller/pojos/FolderData.java src/org/apache/roller/pojos/WeblogCategoryData.java tests/org/apache/roller/business/PingsTest.java

Posted by Mitesh Meswani <Mi...@Sun.COM>.
Both BookmarkTest and WeblogCategoryTest assigns id to a temporary 
entity created to test equality. Hibernate correctly complains about two 
persistent instances (root and testFolder/Cat) having same Id. I think 
assigning Id is artificial and is wrong. Attached patch fixes it.

Sorry for the mix up :(. All the tests definitely pass against hibernate 
with the patch.

Regards,
Mitesh

Dave wrote:
> The changes for "Relationships need to be maintained from both sides"
> in FolderData and WeblogCategoryData cause the unit tests to fail.
> Perhaps you tested against the JPA backend but not against Hibernate?
>
> Do we need to change the way that we specify the Hibernate cascades
> for the relationships in question? Any other ideas?
>
> Details below...
>
> - Dave
>
>
>
> On 1/2/07, clr@apache.org <cl...@apache.org> wrote:
>> Author: clr
>> Date: Tue Jan  2 18:21:13 2007
>> New Revision: 492013
>>
>> URL: http://svn.apache.org/viewvc?view=rev&rev=492013
>> Log:
>> Manage relationships on both sides
>>
>> Modified:
>>     incubator/roller/trunk/src/org/apache/roller/pojos/FolderData.java
>>     
>> incubator/roller/trunk/src/org/apache/roller/pojos/WeblogCategoryData.java 
>>
>>     
>> incubator/roller/trunk/tests/org/apache/roller/business/PingsTest.java
>>
>> Modified: 
>> incubator/roller/trunk/src/org/apache/roller/pojos/FolderData.java
>> URL: 
>> http://svn.apache.org/viewvc/incubator/roller/trunk/src/org/apache/roller/pojos/FolderData.java?view=diff&rev=492013&r1=492012&r2=492013 
>>
>> ============================================================================== 
>>
>> --- 
>> incubator/roller/trunk/src/org/apache/roller/pojos/FolderData.java 
>> (original)
>> +++ 
>> incubator/roller/trunk/src/org/apache/roller/pojos/FolderData.java 
>> Tue Jan  2 18:21:13 2007
>> @@ -84,6 +84,16 @@
>>          } else {
>>              this.path = parent.getPath() + "/" + name;
>>          }
>> +
>> +        this.parentFolder = parent;
>> +        // Relationships need to be maintained from both sides
>> +        if(parent != null) {
>> +            // The following triggers this.hashCode(), which is 
>> calculated
>> +            // based on this.path
>> +            // It needs to happen after this.path is initialized
>> +            parent.childFolders.add(this);
>> +        }
>> +
>>      }
>
> That change causes the test teardown to fail for the
> testFolderEquality test when testing using Hibernate. The following
> exception is thrown:
>
> java.lang.Exception: Test teardown failed at
> org.apache.roller.business.BookmarkTest.tearDown(BookmarkTest.java:86)Caused 
>
> by: org.hibernate.NonUniqueObjectException: a different object with
> the same identifier value was already associated with the session:
> [org.apache.roller.pojos.FolderData#402881e40ff7f5a6010ff7f5b68e00c6]
> at 
> org.hibernate.engine.StatefulPersistenceContext.checkUniqueness(StatefulPersistenceContext.java:629) 
>
> at 
> org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:70) 
>
> at org.hibernate.impl.SessionImpl.fireDelete(SessionImpl.java:790) at
> org.hibernate.impl.SessionImpl.delete(SessionImpl.java:782) at
> org.hibernate.engine.CascadingAction$2.cascade(CascadingAction.java:47)
> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:213) at
> org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:157) at
> org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:108) at
> org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:290)
> at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:185) at
> org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:160) at
> org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:108) at
> org.hibernate.engine.Cascade.cascade(Cascade.java:248) at
> org.hibernate.engine.Cascade.cascade(Cascade.java:223) at
> org.hibernate.event.def.DefaultDeleteEventListener.cascadeBeforeDelete(DefaultDeleteEventListener.java:220) 
>
> at 
> org.hibernate.event.def.DefaultDeleteEventListener.deleteEntity(DefaultDeleteEventListener.java:169) 
>
> at 
> org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:110) 
>
> at org.hibernate.impl.SessionImpl.fireDelete(SessionImpl.java:790) at
> org.hibernate.impl.SessionImpl.delete(SessionImpl.java:768) at
> sun.reflect.GeneratedMethodAccessor28.invoke(Unknown Source) at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
>
> at 
> org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:301) 
>
> at $Proxy0.delete(Unknown Source) at
> org.apache.roller.business.hibernate.HibernatePersistenceStrategy.remove(HibernatePersistenceStrategy.java:373) 
>
> at 
> org.apache.roller.business.hibernate.HibernateUserManagerImpl.removeWebsiteContents(HibernateUserManagerImpl.java:197) 
>
> at 
> org.apache.roller.business.hibernate.HibernateUserManagerImpl.removeWebsite(HibernateUserManagerImpl.java:100) 
>
> at org.apache.roller.TestUtils.teardownWeblog(TestUtils.java:160) at
> org.apache.roller.business.BookmarkTest.tearDown(BookmarkTest.java:81)
> ... 12 more
>
>
> And this change:
>
>> Modified: 
>> incubator/roller/trunk/src/org/apache/roller/pojos/WeblogCategoryData.java 
>>
>> URL: 
>> http://svn.apache.org/viewvc/incubator/roller/trunk/src/org/apache/roller/pojos/WeblogCategoryData.java?view=diff&rev=492013&r1=492012&r2=492013 
>>
>> ============================================================================== 
>>
>> --- 
>> incubator/roller/trunk/src/org/apache/roller/pojos/WeblogCategoryData.java 
>> (original)
>> +++ 
>> incubator/roller/trunk/src/org/apache/roller/pojos/WeblogCategoryData.java 
>> Tue Jan  2 18:21:13 2007
>> @@ -71,8 +71,7 @@
>>          this.image = image;
>>
>>          this.website = website;
>> -        this.parentCategory = parent;
>> -
>> +
>>          // calculate path
>>          if(parent == null) {
>>              this.path = "/";
>> @@ -81,6 +80,16 @@
>>          } else {
>>              this.path = parent.getPath() + "/" + name;
>>          }
>> +
>> +        this.parentCategory = parent;
>> +        // Relationship needs to be maintained from both sides
>> +        if(parent != null) {
>> +            // Following triggers this.hashCode(), which is calculated
>> +            // based on this.path
>> +            // It needs to happen after this.path is initialized
>> +            parent.childCategories.add(this);
>> +        }
>> +
>>      }
>
>
> It causes the same thing for testWeblogCategoryEquality:
>
> java.lang.Exception: Test teardown failed at
> org.apache.roller.business.WeblogCategoryTest.tearDown(WeblogCategoryTest.java:84)Caused 
>
> by: org.hibernate.NonUniqueObjectException: a different object with
> the same identifier value was already associated with the session:
> [org.apache.roller.pojos.WeblogCategoryData#402881e40ff80284010ff8029aec011e] 
>
> at 
> org.hibernate.engine.StatefulPersistenceContext.checkUniqueness(StatefulPersistenceContext.java:629) 
>
> at 
> org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:70) 
>
> at org.hibernate.impl.SessionImpl.fireDelete(SessionImpl.java:790) at
> org.hibernate.impl.SessionImpl.delete(SessionImpl.java:782) at
> org.hibernate.engine.CascadingAction$2.cascade(CascadingAction.java:47)
> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:213) at
> org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:157) at
> org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:108) at
> org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:290)
> at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:185) at
> org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:160) at
> org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:108) at
> org.hibernate.engine.Cascade.cascade(Cascade.java:248) at
> org.hibernate.engine.Cascade.cascade(Cascade.java:223) at
> org.hibernate.event.def.DefaultDeleteEventListener.cascadeBeforeDelete(DefaultDeleteEventListener.java:220) 
>
> at 
> org.hibernate.event.def.DefaultDeleteEventListener.deleteEntity(DefaultDeleteEventListener.java:169) 
>
> at 
> org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:110) 
>
> at org.hibernate.impl.SessionImpl.fireDelete(SessionImpl.java:790) at
> org.hibernate.impl.SessionImpl.delete(SessionImpl.java:768) at
> sun.reflect.GeneratedMethodAccessor54.invoke(Unknown Source) at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
>
> at 
> org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:301) 
>
> at $Proxy0.delete(Unknown Source) at
> org.apache.roller.business.hibernate.HibernatePersistenceStrategy.remove(HibernatePersistenceStrategy.java:373) 
>
> at 
> org.apache.roller.business.hibernate.HibernateUserManagerImpl.removeWebsiteContents(HibernateUserManagerImpl.java:211) 
>
> at 
> org.apache.roller.business.hibernate.HibernateUserManagerImpl.removeWebsite(HibernateUserManagerImpl.java:100) 
>
> at org.apache.roller.TestUtils.teardownWeblog(TestUtils.java:160) at
> org.apache.roller.business.WeblogCategoryTest.tearDown(WeblogCategoryTest.java:79) 
>
> ... 12 more