`"org.apache.cayenne.DataChannel"` is an abstraction of Cayenne persistence stack. It is very simple - it defines only 4 methods, two for actually performing persistent operations, one to access metadata, and one - to access EventManager:

DataChannel.java

    public interface DataChannel {

        QueryResponse onQuery(ObjectContext originatingContext, Query query);

        GraphDiff onSync(ObjectContext originatingContext, GraphDiff changes, int syncType);

        EventManager getEventManager();

        EntityResolver getEntityResolver();
    }

DataChannel is rarely used by the application directly. Instead ObjectContexts use it internally as an abstract persistent store. There are few kinds of DataChannels in Cayenne:

- DataDomain (the most commonly used DataChannel) connects to one or more databases via DataNodes.
- DataContext can serve as a DataChannel for other DataContexts
- ClientChannel is a DataChannel that connects to a remote Cayenne service.