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/07/29 22:22:37 UTC

svn commit: r560806 - in /cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src: main/java/org/apache/cayenne/access/ main/java/org/apache/cayenne/intercept/ test/java/org/apache/cayenne/access/ test/java/org/apache/cayenne/intercept/

Author: aadamchik
Date: Sun Jul 29 13:22:35 2007
New Revision: 560806

URL: http://svn.apache.org/viewvc?view=rev&rev=560806
Log:
CAY-797 Lifecycle callbacks *CallbackInterceptor concept introduces problems for testing equality of contexts
(merging PrePersist and PreRemove callbacks to the DataContext class)

Added:
    cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/DataContextCallbacksTest.java
Removed:
    cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/intercept/ObjectContextCallbackInterceptor.java
    cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/intercept/ObjectContextCallbackInterceptorTest.java
Modified:
    cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/ClientServerChannel.java
    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/DataContextDeleteAction.java

Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/ClientServerChannel.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/ClientServerChannel.java?view=diff&rev=560806&r1=560805&r2=560806
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/ClientServerChannel.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/ClientServerChannel.java Sun Jul 29 13:22:35 2007
@@ -46,11 +46,8 @@
 
     ClientServerChannel(DataContext serverContext) {
         this.serverContext = serverContext;
-        
-        DataChannelCallbackInterceptor interceptor = new DataChannelCallbackInterceptor();
 
-        // must call pre-persist and pre-remove on commit
-        interceptor.setContextCallbacksEnabled(true);
+        DataChannelCallbackInterceptor interceptor = new DataChannelCallbackInterceptor();
         interceptor.setChannel(serverContext.getChannel());
 
         serverContext.setChannel(interceptor);

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=560806&r1=560805&r2=560806
==============================================================================
--- 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 Sun Jul 29 13:22:35 2007
@@ -39,6 +39,7 @@
 import org.apache.cayenne.DataRow;
 import org.apache.cayenne.DeleteDenyException;
 import org.apache.cayenne.Fault;
+import org.apache.cayenne.LifecycleListener;
 import org.apache.cayenne.ObjectContext;
 import org.apache.cayenne.ObjectId;
 import org.apache.cayenne.PersistenceState;
@@ -746,6 +747,11 @@
         getObjectStore().registerNode(id, object);
         getObjectStore().nodeCreated(id);
 
+        // invoke callbacks
+        getEntityResolver().getCallbackRegistry().performCallbacks(
+                LifecycleListener.PRE_PERSIST,
+                object);
+
         return object;
     }
 
@@ -871,6 +877,11 @@
                 return true;
             }
         });
+        
+        // invoke callbacks
+        getEntityResolver().getCallbackRegistry().performCallbacks(
+                LifecycleListener.PRE_PERSIST,
+                object);
     }
 
     /**

Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/DataContextDeleteAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/DataContextDeleteAction.java?view=diff&rev=560806&r1=560805&r2=560806
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/DataContextDeleteAction.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/DataContextDeleteAction.java Sun Jul 29 13:22:35 2007
@@ -27,6 +27,7 @@
 
 import org.apache.cayenne.CayenneRuntimeException;
 import org.apache.cayenne.DeleteDenyException;
+import org.apache.cayenne.LifecycleListener;
 import org.apache.cayenne.PersistenceState;
 import org.apache.cayenne.Persistent;
 import org.apache.cayenne.map.DeleteRule;
@@ -97,6 +98,10 @@
 
     private void deletePersistent(Persistent object, int oldState)
             throws DeleteDenyException {
+
+        dataContext.getEntityResolver().getCallbackRegistry().performCallbacks(
+                LifecycleListener.PRE_REMOVE,
+                object);
 
         object.setPersistenceState(PersistenceState.DELETED);
         dataContext.getObjectStore().nodeRemoved(object.getObjectId());

Added: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/DataContextCallbacksTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/DataContextCallbacksTest.java?view=auto&rev=560806
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/DataContextCallbacksTest.java (added)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/DataContextCallbacksTest.java Sun Jul 29 13:22:35 2007
@@ -0,0 +1,131 @@
+/*****************************************************************
+ *   Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ ****************************************************************/
+package org.apache.cayenne.access;
+
+import org.apache.art.Artist;
+import org.apache.art.Painting;
+import org.apache.cayenne.LifecycleListener;
+import org.apache.cayenne.intercept.MockCallingBackListener;
+import org.apache.cayenne.map.EntityResolver;
+import org.apache.cayenne.reflect.LifecycleCallbackRegistry;
+import org.apache.cayenne.unit.CayenneCase;
+
+public class DataContextCallbacksTest extends CayenneCase {
+
+    protected void setUp() throws Exception {
+        deleteTestData();
+    }
+
+    protected void tearDown() throws Exception {
+        EntityResolver resolver = getDomain().getEntityResolver();
+        resolver.getCallbackRegistry().clear();
+    }
+
+    public void testPrePersistCallbacks() {
+        LifecycleCallbackRegistry registry = getDomain()
+                .getEntityResolver()
+                .getCallbackRegistry();
+
+        DataContext context = createDataContext();
+
+        // no callbacks
+        Artist a1 = (Artist) context.newObject(Artist.class);
+        assertNotNull(a1);
+        assertFalse(a1.isPrePersisted());
+
+        registry.addListener(
+                LifecycleListener.PRE_PERSIST,
+                Artist.class,
+                "prePersistCallback");
+
+        Artist a2 = (Artist) context.newObject(Artist.class);
+        assertNotNull(a2);
+        assertTrue(a2.isPrePersisted());
+
+        MockCallingBackListener listener2 = new MockCallingBackListener();
+        registry.addListener(
+                LifecycleListener.PRE_PERSIST,
+                Artist.class,
+                listener2,
+                "publicCallback");
+
+        Artist a3 = (Artist) context.newObject(Artist.class);
+        assertNotNull(a3);
+        assertTrue(a3.isPrePersisted());
+
+        assertSame(a3, listener2.getPublicCalledbackEntity());
+
+        Painting p3 = (Painting) context.newObject(Painting.class);
+        assertNotNull(p3);
+        assertFalse(p3.isPrePersisted());
+        assertSame(a3, listener2.getPublicCalledbackEntity());
+    }
+
+    public void testPreRemoveCallbacks() {
+        LifecycleCallbackRegistry registry = getDomain()
+                .getEntityResolver()
+                .getCallbackRegistry();
+
+        DataContext context = createDataContext();
+
+        // no callbacks
+        Artist a1 = (Artist) context.newObject(Artist.class);
+        a1.setArtistName("XX");
+        context.commitChanges();
+        context.deleteObject(a1);
+        assertFalse(a1.isPrePersisted());
+        assertFalse(a1.isPreRemoved());
+
+        registry.addListener(
+                LifecycleListener.PRE_REMOVE,
+                Artist.class,
+                "preRemoveCallback");
+
+        Artist a2 = (Artist) context.newObject(Artist.class);
+        a2.setArtistName("XX");
+        context.commitChanges();
+        context.deleteObject(a2);
+        assertFalse(a2.isPrePersisted());
+        assertTrue(a2.isPreRemoved());
+
+        MockCallingBackListener listener2 = new MockCallingBackListener();
+        registry.addListener(
+                LifecycleListener.PRE_REMOVE,
+                Artist.class,
+                listener2,
+                "publicCallback");
+
+        Artist a3 = (Artist) context.newObject(Artist.class);
+        a3.setArtistName("XX");
+        context.commitChanges();
+        context.deleteObject(a3);
+        assertFalse(a3.isPrePersisted());
+        assertTrue(a3.isPreRemoved());
+
+        assertSame(a3, listener2.getPublicCalledbackEntity());
+
+        Painting p3 = (Painting) context.newObject(Painting.class);
+        p3.setPaintingTitle("XX");
+        context.commitChanges();
+        context.deleteObject(p3);
+        assertFalse(p3.isPrePersisted());
+        assertFalse(p3.isPreRemoved());
+        assertSame(a3, listener2.getPublicCalledbackEntity());
+    }
+}