This is an automated email from the ASF dual-hosted git repository.

asf-gitbox-commits pushed a commit to branch past-M2
in repository https://gitbox.apache.org/repos/asf/cayenne.git

commit d40e32258db2986022c7f2a89c95134a960724f9
Author: Andrus Adamchik <[email protected]>
AuthorDate: Sun Jun 7 12:05:55 2026 -0400

    DataChanne.getParent()
    
    replacing DataDomainQuery (gross overengineering) with direct parent lookup
---
 .../main/java/org/apache/cayenne/DataChannel.java  |   8 ++
 .../java/org/apache/cayenne/ObjectContext.java     |   9 +-
 .../org/apache/cayenne/access/DataContext.java     |  38 ++---
 .../cayenne/access/DataContextMergeHandler.java    |   6 +-
 .../java/org/apache/cayenne/access/DataDomain.java |  10 ++
 .../org/apache/cayenne/access/DataDomainQuery.java | 157 ---------------------
 .../cayenne/access/DataDomainQueryAction.java      |  13 +-
 .../org/apache/cayenne/access/ObjectStore.java     |   8 +-
 .../flush/operation/GraphBasedDbRowOpSorter.java   |   2 +-
 .../cayenne/ashwood/AshwoodEntitySorter.java       |   2 +-
 .../apache/cayenne/commitlog/CommitLogFilter.java  |   2 +-
 .../org/apache/cayenne/graph/ChildDiffLoader.java  |   2 +-
 .../org/apache/cayenne/tx/TransactionFilter.java   |   2 +-
 .../cayenne/util/ObjectContextQueryAction.java     |   4 +-
 .../org/apache/cayenne/util/RelationshipFault.java |   2 +-
 .../java/org/apache/cayenne/MockDataChannel.java   |   4 +
 .../access/DataContextDecoratedStackIT.java        |   2 +-
 .../apache/cayenne/runtime/CayenneRuntimeTest.java |   4 +
 18 files changed, 65 insertions(+), 210 deletions(-)

diff --git a/cayenne/src/main/java/org/apache/cayenne/DataChannel.java 
b/cayenne/src/main/java/org/apache/cayenne/DataChannel.java
index 0157be276..d244ad20c 100644
--- a/cayenne/src/main/java/org/apache/cayenne/DataChannel.java
+++ b/cayenne/src/main/java/org/apache/cayenne/DataChannel.java
@@ -77,6 +77,14 @@ public interface DataChannel {
      */
     EntityResolver getEntityResolver();
 
+    /**
+     * Returns the parent channel of this channel in the DataChannel stack, or 
null if this is a
+     * root channel (such as a {@link org.apache.cayenne.access.DataDomain}).
+     *
+     * @since 5.0
+     */
+    DataChannel getParent();
+
     /**
      * Executes a query, using provided <em>context</em> to register 
persistent objects if
      * query returns any objects.
diff --git a/cayenne/src/main/java/org/apache/cayenne/ObjectContext.java 
b/cayenne/src/main/java/org/apache/cayenne/ObjectContext.java
index cc9d45c6d..c5aa5a672 100644
--- a/cayenne/src/main/java/org/apache/cayenne/ObjectContext.java
+++ b/cayenne/src/main/java/org/apache/cayenne/ObjectContext.java
@@ -260,9 +260,14 @@ public interface ObjectContext extends DataChannel, 
Serializable {
     GraphManager getGraphManager();
 
     /**
-     * Returns an DataChannel used by this context.
+     * Returns a DataChannel used by this context.
+     *
+     * @deprecated since 5.0 in favor of {@link DataChannel#getParent()}
      */
-    DataChannel getChannel();
+    @Deprecated(since = "5.0")
+    default DataChannel getChannel() {
+        return getParent();
+    }
 
     /**
      * Returns <code>true</code> if there are any modified, deleted or new
diff --git a/cayenne/src/main/java/org/apache/cayenne/access/DataContext.java 
b/cayenne/src/main/java/org/apache/cayenne/access/DataContext.java
index 8b485ee2b..9d110dd5d 100644
--- a/cayenne/src/main/java/org/apache/cayenne/access/DataContext.java
+++ b/cayenne/src/main/java/org/apache/cayenne/access/DataContext.java
@@ -269,7 +269,7 @@ public class DataContext implements ObjectContext {
     }
 
     @Override
-    public DataChannel getChannel() {
+    public DataChannel getParent() {
         attachToRuntimeIfNeeded();
         return channel;
     }
@@ -298,29 +298,21 @@ public class DataContext implements ObjectContext {
 
 
     /**
-     * Returns a DataDomain used by this DataContext. DataDomain is looked up 
in
-     * the DataChannel hierarchy. If a channel is not a DataDomain or a
-     * DataContext, null is returned.
+     * Returns a DataDomain used by this DataContext. DataDomain is looked up 
in the DataChannel hierarchy. If the final
+     * channel is not a DataDomain, null is returned.
      * 
-     * @return DataDomain that is a direct or indirect parent of this
-     *         DataContext in the DataChannel hierarchy.
+     * @return DataDomain that is a direct or indirect parent of this 
DataContext in the DataChannel hierarchy.
      * @since 1.1
      */
     public DataDomain getParentDataDomain() {
         attachToRuntimeIfNeeded();
 
-        if (channel == null) {
-            return null;
-        }
-
-        if (channel instanceof DataDomain dataDomain) {
-            return dataDomain;
-        }
-
-        List<?> response = channel.onQuery(this, new 
DataDomainQuery()).firstList();
-
-        if (response != null && !response.isEmpty() && response.getFirst() 
instanceof DataDomain dataDomain) {
-            return dataDomain;
+        DataChannel c = channel;
+        while (c != null) {
+            if (c instanceof DataDomain dataDomain) {
+                return dataDomain;
+            }
+            c = c.getParent();
         }
 
         return null;
@@ -618,7 +610,7 @@ public class DataContext implements ObjectContext {
     }
 
     private List <?> objectsFromDataRowsFromParentContext(ClassDescriptor 
descriptor, List<? extends DataRow> dataRows) {
-        return getChannel().onQuery(this, new 
ObjectsFromDataRowsQuery(descriptor, dataRows)).firstList();
+        return getParent().onQuery(this, new 
ObjectsFromDataRowsQuery(descriptor, dataRows)).firstList();
     }
 
     /**
@@ -824,7 +816,7 @@ public class DataContext implements ObjectContext {
      */
     GraphDiff flushToParent(boolean cascade) {
 
-        if (this.getChannel() == null) {
+        if (this.getParent() == null) {
             throw new CayenneRuntimeException("Cannot commit changes - channel 
is not set.");
         }
 
@@ -845,7 +837,7 @@ public class DataContext implements ObjectContext {
             } else {
 
                 try {
-                    parentChanges = getChannel().onSync(this, changes, 
syncType);
+                    parentChanges = getParent().onSync(this, changes, 
syncType);
 
                     // note that this is a hack resulting from a fix to 
CAY-766...
                     // To support valid object state in PostPersist callback,
@@ -882,7 +874,7 @@ public class DataContext implements ObjectContext {
 
             // this event is caught by child DataContexts to update temporary 
ObjectIds with permanent
             if (!diff.isNoop()) {
-                fireDataChannelCommitted(getChannel(), diff);
+                fireDataChannelCommitted(getParent(), diff);
             }
 
             return diff;
@@ -992,7 +984,7 @@ public class DataContext implements ObjectContext {
             return new GenericResponse();
         }
 
-        if (this.getChannel() == null) {
+        if (this.getParent() == null) {
             throw new CayenneRuntimeException("Can't run query - parent 
DataChannel is not set.");
         }
 
diff --git 
a/cayenne/src/main/java/org/apache/cayenne/access/DataContextMergeHandler.java 
b/cayenne/src/main/java/org/apache/cayenne/access/DataContextMergeHandler.java
index e87daa2fa..5c37d3527 100644
--- 
a/cayenne/src/main/java/org/apache/cayenne/access/DataContextMergeHandler.java
+++ 
b/cayenne/src/main/java/org/apache/cayenne/access/DataContextMergeHandler.java
@@ -65,11 +65,11 @@ class DataContextMergeHandler implements 
GraphChangeHandler, DataChannelListener
 
         // this effectively filters out all events that are not coming from 
peers or
         // grandparents...
-        return e.getSource() == context.getChannel()
+        return e.getSource() == context.getParent()
                 && e.getPostedBy() != context
-                && e.getPostedBy() != context.getChannel();
+                && e.getPostedBy() != context.getParent();
 
-        // the first condition (e.getSource() == context.getChannel()) is 
actually always
+        // the first condition (e.getSource() == context.getParent()) is 
actually always
         // 'true' because of how the listener is registered. Still keep it 
here as an
         // extra safegurad
     }
diff --git a/cayenne/src/main/java/org/apache/cayenne/access/DataDomain.java 
b/cayenne/src/main/java/org/apache/cayenne/access/DataDomain.java
index e4d33513a..e4774de8f 100644
--- a/cayenne/src/main/java/org/apache/cayenne/access/DataDomain.java
+++ b/cayenne/src/main/java/org/apache/cayenne/access/DataDomain.java
@@ -527,6 +527,16 @@ public class DataDomain implements DataChannel {
         }
     }
 
+    /**
+     * Returns null, as DataDomain is the root of the DataChannel stack.
+     *
+     * @since 5.0
+     */
+    @Override
+    public DataChannel getParent() {
+        return null;
+    }
+
     /**
      * Runs query returning generic QueryResponse.
      *
diff --git 
a/cayenne/src/main/java/org/apache/cayenne/access/DataDomainQuery.java 
b/cayenne/src/main/java/org/apache/cayenne/access/DataDomainQuery.java
deleted file mode 100644
index 5f64410a7..000000000
--- a/cayenne/src/main/java/org/apache/cayenne/access/DataDomainQuery.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*****************************************************************
- *   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
- *
- *    https://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 java.util.List;
-import java.util.Map;
-
-import org.apache.cayenne.map.DataMap;
-import org.apache.cayenne.map.DbEntity;
-import org.apache.cayenne.map.EntityResolver;
-import org.apache.cayenne.map.ObjEntity;
-import org.apache.cayenne.map.Procedure;
-import org.apache.cayenne.query.PrefetchTreeNode;
-import org.apache.cayenne.query.Query;
-import org.apache.cayenne.query.QueryCacheStrategy;
-import org.apache.cayenne.query.QueryMetadata;
-import org.apache.cayenne.query.QueryRouter;
-import org.apache.cayenne.query.SQLAction;
-import org.apache.cayenne.query.SQLActionVisitor;
-import org.apache.cayenne.reflect.ClassDescriptor;
-
-/**
- * A query that allows DataContext to retrieve parent DataDomain through a 
chain of
- * decorator DataChannels.
- * 
- * @since 3.0
- */
-class DataDomainQuery implements Query, QueryMetadata {
-
-    public SQLAction createSQLAction(SQLActionVisitor visitor) {
-        throw new UnsupportedOperationException("Not an executable query.");
-    }
-
-    public QueryMetadata getMetaData(EntityResolver resolver) {
-        return this;
-    }
-
-    public List<Object> getResultSetMapping() {
-        return null;
-    }
-
-    /**
-     * @since 4.0
-     */
-    @Override
-    public boolean isSingleResultSetMapping() {
-        return false;
-    }
-
-    /**
-     * @since 4.0
-     */
-    public Query getOriginatingQuery() {
-        return null;
-    }
-
-    public void route(QueryRouter router, EntityResolver resolver, Query 
substitutedQuery) {
-    }
-
-    /**
-     * @since 4.0
-     */
-    public String getCacheGroup() {
-        return null;
-    }
-
-    public String getCacheKey() {
-        return null;
-    }
-
-    public Map<String, String> getPathSplitAliases() {
-        return null;
-    }
-
-    public QueryCacheStrategy getCacheStrategy() {
-        return null;
-    }
-
-    public DataMap getDataMap() {
-        return null;
-    }
-
-    public DbEntity getDbEntity() {
-        return null;
-    }
-
-    public int getFetchLimit() {
-        return 0;
-    }
-
-    public int getFetchOffset() {
-        return 0;
-    }
-
-    public ObjEntity getObjEntity() {
-        return null;
-    }
-
-    public ClassDescriptor getClassDescriptor() {
-        return null;
-    }
-
-    public int getPageSize() {
-        return 0;
-    }
-
-    public PrefetchTreeNode getPrefetchTree() {
-        return null;
-    }
-
-    public Procedure getProcedure() {
-        return null;
-    }
-
-    public boolean isFetchingDataRows() {
-        // must return true, otherwise the stack will attempt Persistent 
conversion
-        return true;
-    }
-
-    public boolean isRefreshingObjects() {
-        return false;
-    }
-
-    public boolean isResolvingInherited() {
-        return false;
-    }
-
-    public int getStatementFetchSize() {
-        return 0;
-    }
-
-    @Override
-    public int getQueryTimeout() {
-        return QueryMetadata.QUERY_TIMEOUT_DEFAULT;
-    }
-
-    @Override
-    public boolean isSuppressingDistinct() {
-        return false;
-    }
-}
diff --git 
a/cayenne/src/main/java/org/apache/cayenne/access/DataDomainQueryAction.java 
b/cayenne/src/main/java/org/apache/cayenne/access/DataDomainQueryAction.java
index ed842df51..a9a0826b2 100644
--- a/cayenne/src/main/java/org/apache/cayenne/access/DataDomainQueryAction.java
+++ b/cayenne/src/main/java/org/apache/cayenne/access/DataDomainQueryAction.java
@@ -137,9 +137,7 @@ class DataDomainQueryAction implements QueryRouter, 
OperationObserver {
                 if (interceptRelationshipQuery() != DONE) {
                     if (interceptRefreshQuery() != DONE) {
                         if (interceptSharedCache() != DONE) {
-                            if (interceptDataDomainQuery() != DONE) {
-                                runQueryInTransaction();
-                            }
+                            runQueryInTransaction();
                         }
                     }
                 }
@@ -200,15 +198,6 @@ class DataDomainQueryAction implements QueryRouter, 
OperationObserver {
         }
     }
 
-    private boolean interceptDataDomainQuery() {
-        if (query instanceof DataDomainQuery) {
-            response = new ListResponse(domain);
-            return DONE;
-        }
-
-        return !DONE;
-    }
-
     private boolean interceptOIDQuery() {
         if (query instanceof ObjectIdQuery oidQuery) {
 
diff --git a/cayenne/src/main/java/org/apache/cayenne/access/ObjectStore.java 
b/cayenne/src/main/java/org/apache/cayenne/access/ObjectStore.java
index 955036dc8..a9e57b84c 100644
--- a/cayenne/src/main/java/org/apache/cayenne/access/ObjectStore.java
+++ b/cayenne/src/main/java/org/apache/cayenne/access/ObjectStore.java
@@ -448,9 +448,9 @@ public class ObjectStore implements Serializable, 
SnapshotEventListener, GraphMa
      */
     public DataRow getCachedSnapshot(ObjectId oid) {
 
-        if (context != null && context.getChannel() != null) {
+        if (context != null && context.getParent() != null) {
             ObjectIdQuery query = new CachedSnapshotQuery(oid);
-            List<?> results = context.getChannel().onQuery(context, 
query).firstList();
+            List<?> results = context.getParent().onQuery(context, 
query).firstList();
             return results.isEmpty() ? null : (DataRow) results.get(0);
         }
         else {
@@ -468,9 +468,9 @@ public class ObjectStore implements Serializable, 
SnapshotEventListener, GraphMa
      */
     public synchronized DataRow getSnapshot(ObjectId oid) {
 
-        if (context != null && context.getChannel() != null) {
+        if (context != null && context.getParent() != null) {
             ObjectIdQuery query = new ObjectIdQuery(oid, true, 
ObjectIdQuery.CACHE);
-            List<?> results = context.getChannel().onQuery(context, 
query).firstList();
+            List<?> results = context.getParent().onQuery(context, 
query).firstList();
             return results.isEmpty() ? null : (DataRow) results.get(0);
         }
         else {
diff --git 
a/cayenne/src/main/java/org/apache/cayenne/access/flush/operation/GraphBasedDbRowOpSorter.java
 
b/cayenne/src/main/java/org/apache/cayenne/access/flush/operation/GraphBasedDbRowOpSorter.java
index 19037bef7..42c910677 100644
--- 
a/cayenne/src/main/java/org/apache/cayenne/access/flush/operation/GraphBasedDbRowOpSorter.java
+++ 
b/cayenne/src/main/java/org/apache/cayenne/access/flush/operation/GraphBasedDbRowOpSorter.java
@@ -272,7 +272,7 @@ public class GraphBasedDbRowOpSorter implements 
DbRowOpSorter {
 
         private Map<String, Object> getCachedSnapshot(Persistent object) {
             ObjectIdQuery query = new ObjectIdQuery(object.getObjectId(), 
true, ObjectIdQuery.CACHE);
-            QueryResponse response = 
object.getObjectContext().getChannel().onQuery(null, query);
+            QueryResponse response = 
object.getObjectContext().getParent().onQuery(null, query);
             @SuppressWarnings("unchecked")
             List<DataRow> result = (List<DataRow>) response.firstList();
             if (result == null || result.isEmpty()) {
diff --git 
a/cayenne/src/main/java/org/apache/cayenne/ashwood/AshwoodEntitySorter.java 
b/cayenne/src/main/java/org/apache/cayenne/ashwood/AshwoodEntitySorter.java
index 7a1ba2674..942f39b0a 100644
--- a/cayenne/src/main/java/org/apache/cayenne/ashwood/AshwoodEntitySorter.java
+++ b/cayenne/src/main/java/org/apache/cayenne/ashwood/AshwoodEntitySorter.java
@@ -319,7 +319,7 @@ public class AshwoodEntitySorter implements EntitySorter {
                }
 
                ObjectIdQuery query = new ObjectIdQuery(object.getObjectId(), 
true, ObjectIdQuery.CACHE);
-               QueryResponse response = context.getChannel().onQuery(null, 
query);
+               QueryResponse response = context.getParent().onQuery(null, 
query);
                List<?> result = response.firstList();
                if (result == null || result.size() == 0) {
                        return null;
diff --git 
a/cayenne/src/main/java/org/apache/cayenne/commitlog/CommitLogFilter.java 
b/cayenne/src/main/java/org/apache/cayenne/commitlog/CommitLogFilter.java
index 706ea2fe1..758cb4495 100644
--- a/cayenne/src/main/java/org/apache/cayenne/commitlog/CommitLogFilter.java
+++ b/cayenne/src/main/java/org/apache/cayenne/commitlog/CommitLogFilter.java
@@ -67,7 +67,7 @@ public class CommitLogFilter implements DataChannelSyncFilter 
{
 
                // passing DataDomain, not ObjectContext to speed things up
                // and avoid capturing changed state when fetching snapshots
-               DataChannel channel = originatingContext.getChannel();
+               DataChannel channel = originatingContext.getParent();
 
                beforeCommit(changes, channel, beforeDiff);
                GraphDiff afterDiff = filterChain.onSync(originatingContext, 
beforeDiff, syncType);
diff --git 
a/cayenne/src/main/java/org/apache/cayenne/graph/ChildDiffLoader.java 
b/cayenne/src/main/java/org/apache/cayenne/graph/ChildDiffLoader.java
index 790b51c99..a2f4bca35 100644
--- a/cayenne/src/main/java/org/apache/cayenne/graph/ChildDiffLoader.java
+++ b/cayenne/src/main/java/org/apache/cayenne/graph/ChildDiffLoader.java
@@ -276,7 +276,7 @@ public class ChildDiffLoader implements GraphChangeHandler {
 
                // skip context cache lookup, go directly to its channel
                Query query = new ObjectIdQuery((ObjectId) nodeId);
-               QueryResponse response = context.getChannel().onQuery(context, 
query);
+               QueryResponse response = context.getParent().onQuery(context, 
query);
                List<?> objects = response.firstList();
 
                if (objects.size() == 0) {
diff --git a/cayenne/src/main/java/org/apache/cayenne/tx/TransactionFilter.java 
b/cayenne/src/main/java/org/apache/cayenne/tx/TransactionFilter.java
index c8cd17c60..8e28ca212 100644
--- a/cayenne/src/main/java/org/apache/cayenne/tx/TransactionFilter.java
+++ b/cayenne/src/main/java/org/apache/cayenne/tx/TransactionFilter.java
@@ -41,7 +41,7 @@ public class TransactionFilter implements 
DataChannelSyncFilter {
     @Override
     public GraphDiff onSync(ObjectContext originatingContext, GraphDiff 
changes, int syncType, DataChannelSyncFilterChain filterChain) {
         DataChannelSyncCallbackAction callbackAction = 
DataChannelSyncCallbackAction.getCallbackAction(
-                
originatingContext.getChannel().getEntityResolver().getCallbackRegistry(),
+                
originatingContext.getParent().getEntityResolver().getCallbackRegistry(),
                 originatingContext.getGraphManager(),
                 changes,
                 syncType
diff --git 
a/cayenne/src/main/java/org/apache/cayenne/util/ObjectContextQueryAction.java 
b/cayenne/src/main/java/org/apache/cayenne/util/ObjectContextQueryAction.java
index 0efab27c0..05cbed1d1 100644
--- 
a/cayenne/src/main/java/org/apache/cayenne/util/ObjectContextQueryAction.java
+++ 
b/cayenne/src/main/java/org/apache/cayenne/util/ObjectContextQueryAction.java
@@ -321,7 +321,7 @@ public abstract class ObjectContextQueryAction {
                          * nested contexts).
                          */
                         if (((Persistent) object).getPersistenceState() == 
PersistenceState.NEW
-                                && !(actingContext.getChannel() instanceof 
ObjectContext)) {
+                                && !(actingContext.getParent() instanceof 
ObjectContext)) {
                             this.response = new ListResponse();
                             return DONE;
                         }
@@ -411,6 +411,6 @@ public abstract class ObjectContextQueryAction {
      * Fetches data from the channel.
      */
     protected void runQuery() {
-        this.response = actingContext.getChannel().onQuery(actingContext, 
query);
+        this.response = actingContext.getParent().onQuery(actingContext, 
query);
     }
 }
diff --git 
a/cayenne/src/main/java/org/apache/cayenne/util/RelationshipFault.java 
b/cayenne/src/main/java/org/apache/cayenne/util/RelationshipFault.java
index cc5ce408f..0ab58de8b 100644
--- a/cayenne/src/main/java/org/apache/cayenne/util/RelationshipFault.java
+++ b/cayenne/src/main/java/org/apache/cayenne/util/RelationshipFault.java
@@ -92,7 +92,7 @@ public abstract class RelationshipFault<E> {
          * Doing that to refresh query (see CAY-2509) while resolving 
RelationshipFault.
          * Refreshing query is used only for parent contexts.
          */
-        boolean refresh = relationshipOwner.getObjectContext().getChannel() 
instanceof DataDomain;
+        boolean refresh = relationshipOwner.getObjectContext().getParent() 
instanceof DataDomain;
         List<E> resolved = relationshipOwner.getObjectContext().performQuery(
                 new RelationshipQuery(relationshipOwner.getObjectId(), 
relationshipName, refresh));
 
diff --git a/cayenne/src/test/java/org/apache/cayenne/MockDataChannel.java 
b/cayenne/src/test/java/org/apache/cayenne/MockDataChannel.java
index 0319d9af0..d41be474c 100644
--- a/cayenne/src/test/java/org/apache/cayenne/MockDataChannel.java
+++ b/cayenne/src/test/java/org/apache/cayenne/MockDataChannel.java
@@ -72,6 +72,10 @@ public class MockDataChannel implements DataChannel {
         return null;
     }
 
+    public DataChannel getParent() {
+        return null;
+    }
+
     public void reset() {
         requestObjects.clear();
     }
diff --git 
a/cayenne/src/test/java/org/apache/cayenne/access/DataContextDecoratedStackIT.java
 
b/cayenne/src/test/java/org/apache/cayenne/access/DataContextDecoratedStackIT.java
index bf4d33543..9fad357c0 100644
--- 
a/cayenne/src/test/java/org/apache/cayenne/access/DataContextDecoratedStackIT.java
+++ 
b/cayenne/src/test/java/org/apache/cayenne/access/DataContextDecoratedStackIT.java
@@ -111,7 +111,7 @@ public class DataContextDecoratedStackIT {
             return channel.onSync(originatingContext, changes, syncType);
         }
 
-        public DataChannel getChannel() {
+        public DataChannel getParent() {
             return channel;
         }
 
diff --git 
a/cayenne/src/test/java/org/apache/cayenne/runtime/CayenneRuntimeTest.java 
b/cayenne/src/test/java/org/apache/cayenne/runtime/CayenneRuntimeTest.java
index 327b1e4b8..d324f11bb 100644
--- a/cayenne/src/test/java/org/apache/cayenne/runtime/CayenneRuntimeTest.java
+++ b/cayenne/src/test/java/org/apache/cayenne/runtime/CayenneRuntimeTest.java
@@ -104,6 +104,10 @@ public class CayenneRuntimeTest {
                 return null;
             }
 
+            public DataChannel getParent() {
+                return null;
+            }
+
             public QueryResponse onQuery(ObjectContext originatingContext, 
Query query) {
                 return null;
             }

Reply via email to