"org.objectstyle.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.