Here is a test demonstrating the problem:
diff --git a/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataDomainCallbacksTest.java b/framework/cayenne-jdk1.5-unpu
index cab44ec..c7d56e9 100644
— a/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataDomainCallbacksTest.java
+++ b/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataDomainCallbacksTest.java
@@ -219,6 +219,42 @@ public class DataDomainCallbacksTest extends CayenneCase
{
assertTrue(a1.isPostRemoved());
assertSame(a1, listener2.getPublicCalledbackEntity());
}
+
+ public void testPostRemove_Updated()
{
+
+ LifecycleCallbackRegistry registry = getDomain()
+ .getEntityResolver()
+ .getCallbackRegistry();
+
+ ObjectContext context = createDataContext();
+
+ Artist a1 = context.newObject(Artist.class);
+ a1.setArtistName("XX");
+ context.commitChanges();
+
+ MockCallingBackListener listener1 = new MockCallingBackListener();
+ registry.addListener(
+ LifecycleEvent.POST_REMOVE,
+ Artist.class,
+ listener1,
+ "publicCallback");
+
+ MockCallingBackListener listener2 = new MockCallingBackListener();
+ registry.addListener(
+ LifecycleEvent.POST_UPDATE,
+ Artist.class,
+ listener2,
+ "publicCallback");
+
+
+ // change before removing
+ a1.setArtistName("YY");
+ context.deleteObject(a1);
+ context.commitChanges();
+
+ assertNull(listener2.getPublicCalledbackEntity());
+ assertSame(a1, listener1.getPublicCalledbackEntity());
+ }