You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2007/03/07 19:21:34 UTC
svn commit: r515679 - in
/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src:
main/java/org/apache/cayenne/access/ test/java/org/apache/cayenne/intercept/
Author: aadamchik
Date: Wed Mar 7 10:21:33 2007
New Revision: 515679
URL: http://svn.apache.org/viewvc?view=rev&rev=515679
Log:
CAY-766: localObject returning object with temporary id inside postPersist() method
fixed for "flat" DataContexts, nested DC will still have to use the workaround described in the previous comment
Modified:
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/DataContext.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/DataDomainFlushAction.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/intercept/DataChannelCallbackInterceptorTest.java
Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/DataContext.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/DataContext.java?view=diff&rev=515679&r1=515678&r2=515679
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/DataContext.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/DataContext.java Wed Mar 7 10:21:33 2007
@@ -1128,20 +1128,22 @@
int syncType = cascade
? DataChannel.FLUSH_CASCADE_SYNC
: DataChannel.FLUSH_NOCASCADE_SYNC;
+
+ ObjectStore objectStore = getObjectStore();
// prevent multiple commits occuring simulteneously
- synchronized (getObjectStore()) {
+ synchronized (objectStore) {
DataContextFlushEventHandler eventHandler = null;
- ObjectStoreGraphDiff changes = getObjectStore().getChanges();
+ ObjectStoreGraphDiff changes = objectStore.getChanges();
boolean noop = isValidatingObjectsOnCommit()
? changes.validateAndCheckNoop()
: changes.isNoop();
if (noop) {
// need to clear phantom changes
- getObjectStore().postprocessAfterPhantomCommit();
+ objectStore.postprocessAfterPhantomCommit();
return new CompoundDiff();
}
@@ -1153,7 +1155,16 @@
try {
GraphDiff returnChanges = getChannel().onSync(this, changes, syncType);
- getObjectStore().postprocessAfterCommit(returnChanges);
+
+ // note that this is a hack resulting from a fix to CAY-766... To support
+ // valid object state in PostPersist callback, 'postprocessAfterCommit' is
+ // invoked by DataDomain.onSync(..). Unless the parent is DataContext, and
+ // this method is not invoked!! As a result, PostPersist will contain temp
+ // ObjectIds in nested contexts and perm ones in flat contexts.
+ // Pending better callback design .....
+ if (objectStore.hasChanges()) {
+ objectStore.postprocessAfterCommit(returnChanges);
+ }
// this is a legacy event ... will deprecate in 2.0
fireTransactionCommitted();
@@ -1388,8 +1399,8 @@
/**
* Sets default for posting transaction events by new DataContexts.
*
- * @deprecated since 3.0M1 in favor of {@link LifecycleListener}. Will be
- * removed in later 3.0 milestones.
+ * @deprecated since 3.0M1 in favor of {@link LifecycleListener}. Will be removed in
+ * later 3.0 milestones.
*/
public static void setTransactionEventsEnabledDefault(boolean flag) {
transactionEventsEnabledDefault = flag;
@@ -1398,16 +1409,16 @@
/**
* Enables or disables posting of transaction events by this DataContext.
*
- * @deprecated since 3.0M1 in favor of {@link LifecycleListener}. Will be
- * removed in later 3.0 milestones.
+ * @deprecated since 3.0M1 in favor of {@link LifecycleListener}. Will be removed in
+ * later 3.0 milestones.
*/
public void setTransactionEventsEnabled(boolean flag) {
this.transactionEventsEnabled = flag;
}
/**
- * @deprecated since 3.0M1 in favor of {@link LifecycleListener}. Will be
- * removed in later 3.0 milestones.
+ * @deprecated since 3.0M1 in favor of {@link LifecycleListener}. Will be removed in
+ * later 3.0 milestones.
*/
public boolean isTransactionEventsEnabled() {
return this.transactionEventsEnabled;
@@ -1444,8 +1455,8 @@
}
/**
- * @deprecated since 3.0M1 in favor of {@link LifecycleListener}. Will be
- * removed in later 3.0 milestones.
+ * @deprecated since 3.0M1 in favor of {@link LifecycleListener}. Will be removed in
+ * later 3.0 milestones.
*/
void fireWillCommit() {
// post event: WILL_COMMIT
@@ -1456,8 +1467,8 @@
}
/**
- * @deprecated since 3.0M1 in favor of {@link LifecycleListener}. Will be
- * removed in later 3.0 milestones.
+ * @deprecated since 3.0M1 in favor of {@link LifecycleListener}. Will be removed in
+ * later 3.0 milestones.
*/
void fireTransactionRolledback() {
// post event: DID_ROLLBACK
@@ -1468,8 +1479,8 @@
}
/**
- * @deprecated since 3.0M1 in favor of {@link LifecycleListener}. Will be
- * removed in later 3.0 milestones.
+ * @deprecated since 3.0M1 in favor of {@link LifecycleListener}. Will be removed in
+ * later 3.0 milestones.
*/
void fireTransactionCommitted() {
// old-style event
Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/DataDomainFlushAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/DataDomainFlushAction.java?view=diff&rev=515679&r1=515678&r2=515679
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/DataDomainFlushAction.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/DataDomainFlushAction.java Wed Mar 7 10:21:33 2007
@@ -253,5 +253,7 @@
Collections.EMPTY_LIST,
resultIndirectlyModifiedIds);
}
+
+ context.getObjectStore().postprocessAfterCommit(resultDiff);
}
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/intercept/DataChannelCallbackInterceptorTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/intercept/DataChannelCallbackInterceptorTest.java?view=diff&rev=515679&r1=515678&r2=515679
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/intercept/DataChannelCallbackInterceptorTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/intercept/DataChannelCallbackInterceptorTest.java Wed Mar 7 10:21:33 2007
@@ -21,6 +21,7 @@
import org.apache.art.Artist;
import org.apache.cayenne.LifecycleListener;
import org.apache.cayenne.ObjectContext;
+import org.apache.cayenne.Persistent;
import org.apache.cayenne.access.DataContext;
import org.apache.cayenne.access.ObjectStore;
import org.apache.cayenne.map.EntityResolver;
@@ -51,7 +52,10 @@
ObjectContext context = new DataContext(i, new ObjectStore(getDomain()
.getSharedSnapshotCache()));
- registry.addListener(LifecycleListener.POST_LOAD, Artist.class, "postLoadCallback");
+ registry.addListener(
+ LifecycleListener.POST_LOAD,
+ Artist.class,
+ "postLoadCallback");
MockCallingBackListener listener = new MockCallingBackListener();
registry.addListener(
LifecycleListener.POST_LOAD,
@@ -132,7 +136,10 @@
context.commitChanges();
assertFalse(a1.isPreUpdated());
- registry.addListener(LifecycleListener.PRE_UPDATE, Artist.class, "preUpdateCallback");
+ registry.addListener(
+ LifecycleListener.PRE_UPDATE,
+ Artist.class,
+ "preUpdateCallback");
a1.setArtistName("ZZ");
context.commitChanges();
assertTrue(a1.isPreUpdated());
@@ -175,7 +182,10 @@
context.commitChanges();
assertFalse(a1.isPostUpdated());
- registry.addListener(LifecycleListener.POST_UPDATE, Artist.class, "postUpdateCallback");
+ registry.addListener(
+ LifecycleListener.POST_UPDATE,
+ Artist.class,
+ "postUpdateCallback");
a1.setArtistName("ZZ");
context.commitChanges();
assertTrue(a1.isPostUpdated());
@@ -213,7 +223,10 @@
a1.setArtistName("XX");
context.commitChanges();
- registry.addListener(LifecycleListener.POST_REMOVE, Artist.class, "postRemoveCallback");
+ registry.addListener(
+ LifecycleListener.POST_REMOVE,
+ Artist.class,
+ "postRemoveCallback");
MockCallingBackListener listener2 = new MockCallingBackListener();
registry.addListener(
LifecycleListener.POST_REMOVE,
@@ -249,7 +262,13 @@
LifecycleListener.POST_PERSIST,
Artist.class,
"postPersistCallback");
- MockCallingBackListener listener2 = new MockCallingBackListener();
+ MockCallingBackListener listener2 = new MockCallingBackListener() {
+
+ public void publicCallback(Object entity) {
+ super.publicCallback(entity);
+ assertFalse(((Persistent) entity).getObjectId().isTemporary());
+ }
+ };
registry.addListener(
LifecycleListener.POST_PERSIST,
Artist.class,