You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by jo...@apache.org on 2013/06/04 23:25:33 UTC
svn commit: r1489619 - in /cayenne/main/trunk: docs/doc/src/main/resources/
framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/
framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/
Author: johnthuss
Date: Tue Jun 4 21:25:21 2013
New Revision: 1489619
URL: http://svn.apache.org/r1489619
Log:
CAY-1832 Exception when modifying objects in postLoad callback
Modified:
cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/BaseContext.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataDomainCallbacksTest.java
Modified: cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt?rev=1489619&r1=1489618&r2=1489619&view=diff
==============================================================================
--- cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt (original)
+++ cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt Tue Jun 4 21:25:21 2013
@@ -83,3 +83,5 @@ CAY-1804 Serialisation of long[] type wa
CAY-1806 Error importing eomodel
CAY-1817 NPE during Validate Project
CAY-1827 EhCache region corresponding to a cache group loses its settings after 'removeGroup'
+CAY-1832 Exception when modifying objects in postLoad callback
+
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/BaseContext.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/BaseContext.java?rev=1489619&r1=1489618&r2=1489619&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/BaseContext.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/BaseContext.java Tue Jun 4 21:25:21 2013
@@ -321,18 +321,18 @@ public abstract class BaseContext implem
"Error resolving fault, more than one row exists in the database for ObjectId: " + oid);
}
+ // 5/28/2013 - Commented out this block to allow for modifying objects in the postLoad callback
// sanity check...
- if (object.getPersistenceState() != PersistenceState.COMMITTED) {
-
- String state = PersistenceState.persistenceStateName(object.getPersistenceState());
-
- // TODO: andrus 4/13/2006, modified and deleted states are
- // possible due to
- // a race condition, should we handle them here?
-
- throw new FaultFailureException("Error resolving fault for ObjectId: " + oid + " and state (" + state
- + "). Possible cause - matching row is missing from the database.");
- }
+// if (object.getPersistenceState() != PersistenceState.COMMITTED) {
+//
+// String state = PersistenceState.persistenceStateName(object.getPersistenceState());
+//
+// // TODO: andrus 4/13/2006, modified and deleted states are
+// // possible due to
+// // a race condition, should we handle them here?
+// throw new FaultFailureException("Error resolving fault for ObjectId: " + oid + " and state (" + state
+// + "). Possible cause - matching row is missing from the database.");
+// }
}
// resolve relationship fault
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataDomainCallbacksTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataDomainCallbacksTest.java?rev=1489619&r1=1489618&r2=1489619&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataDomainCallbacksTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataDomainCallbacksTest.java Tue Jun 4 21:25:21 2013
@@ -18,6 +18,8 @@
****************************************************************/
package org.apache.cayenne.access;
+import java.util.List;
+
import org.apache.cayenne.ObjectContext;
import org.apache.cayenne.PersistenceState;
import org.apache.cayenne.Persistent;
@@ -226,6 +228,47 @@ public class DataDomainCallbacksTest ext
assertSame(a2, listener.getPublicCalledbackEntity());
}
+ public void testPostLoad_ThatModifiesObject() {
+ LifecycleCallbackRegistry registry = resolver.getCallbackRegistry();
+
+ registry.addListener(LifecycleEvent.POST_LOAD, Artist.class, "postLoadCallback");
+ MockCallingBackListener listener = new MockCallingBackListener() {
+ @Override
+ public void publicCallback(Object entity) {
+ super.publicCallback(entity);
+ Artist a = (Artist)entity;
+ a.setArtistName("Changed"); // modify object during postLoad callback
+ }
+ };
+ registry.addListener(
+ LifecycleEvent.POST_LOAD,
+ Artist.class,
+ listener,
+ "publicCallback");
+
+ Artist a1 = context.newObject(Artist.class);
+ a1.setArtistName("XX");
+ Painting p1 = context.newObject(Painting.class);
+ p1.setToArtist(a1);
+ p1.setPaintingTitle("XXX");
+ context.commitChanges();
+
+ context.invalidateObjects(a1, p1);
+
+ SelectQuery q = new SelectQuery(Painting.class);
+ p1 = (Painting) context1.performQuery(q).get(0);
+
+ // this should be a hollow object, so no callback just yet
+ a1 = p1.getToArtist();
+ assertEquals(PersistenceState.HOLLOW, a1.getPersistenceState());
+ assertEquals(0, a1.getPostLoaded());
+ assertNull(listener.getPublicCalledbackEntity());
+
+ a1.getArtistName();
+ assertEquals(1, a1.getPostLoaded());
+ assertSame(a1, listener.getPublicCalledbackEntity());
+ }
+
public void testPreUpdate() {
LifecycleCallbackRegistry registry = resolver.getCallbackRegistry();