Package org.apache.cayenne.remote

# Class ClientChannel

java.lang.Object
org.apache.cayenne.remote.ClientChannel

All Implemented Interfaces:
  `DataChannel`

public class ClientChannel extends Object implements DataChannel
A `DataChannel` implementation that accesses a remote server via a ClientConnection.

Since:
  1.2

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `protected boolean`
  `channelEventsEnabled`
  `protected ClientConnection`
  `connection`
  `protected GraphDiffCompressor`
  `diffCompressor`
  `protected EntityResolver`
  `entityResolver`
  `protected EventManager`
  `eventManager`

  ### Fields inherited from interface org.apache.cayenne.DataChannel

  `FLUSH_CASCADE_SYNC, FLUSH_NOCASCADE_SYNC, GRAPH_CHANGED_SUBJECT, GRAPH_FLUSHED_SUBJECT, GRAPH_ROLLEDBACK_SUBJECT, ROLLBACK_CASCADE_SYNC`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `ClientChannel(ClientConnection connection, boolean channelEventsEnabled, EventManager eventManager, boolean remoteEventsOptional)`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `ClientConnection`
  `getConnection()`
  `EntityResolver`
  `getEntityResolver()`
  Returns EntityResolver obtained from the server.
  `EventManager`
  `getEventManager()`
  Returns an EventManager associated with this channel.
  `boolean`
  `isChannelEventsEnabled()`
  `QueryResponse`
  `onQuery(ObjectContext context, Query query)`
  Executes a query, using provided context to register persistent objects if query returns any objects.
  `GraphDiff`
  `onSync(ObjectContext originatingContext, GraphDiff changes, int syncType)`
  Processes synchronization request from a child ObjectContext, returning a GraphDiff that describes changes to objects made on the receiving end as a result of synchronization.
  `protected <T> T`
  `send(org.apache.cayenne.remote.ClientMessage message, Class<T> resultClass)`
  Sends a message via connector, getting a result as an instance of a specific class.
  `protected boolean`
  `setupRemoteChannelListener()`
  Starts up an EventBridge to listen for remote updates.

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Field Details

  - ### connection

    protected ClientConnection connection

  - ### eventManager

    protected EventManager eventManager

  - ### entityResolver

    protected EntityResolver entityResolver

  - ### channelEventsEnabled

    protected boolean channelEventsEnabled

  - ### diffCompressor

    protected GraphDiffCompressor diffCompressor

- ## Constructor Details

  - ### ClientChannel

    public ClientChannel(ClientConnection connection, boolean channelEventsEnabled, EventManager eventManager, boolean remoteEventsOptional) throws CayenneRuntimeException
    Parameters:
      `remoteEventsOptional` - if true, failure to start an EventBridge will not result in an exception.
    Throws:
      `CayenneRuntimeException`
    Since:
      3.0

- ## Method Details

  - ### getConnection

    public ClientConnection getConnection()
    Since:
      3.1

  - ### isChannelEventsEnabled

    public boolean isChannelEventsEnabled()
    Since:
      3.1

  - ### getEventManager

    public EventManager getEventManager()
    Description copied from interface: `DataChannel`
    Returns an EventManager associated with this channel. Channel may return null if EventManager is not available for any reason.
    Specified by:
      `getEventManager` in interface `DataChannel`

  - ### onQuery

    public QueryResponse onQuery(ObjectContext context, Query query)
    Description copied from interface: `DataChannel`
    Executes a query, using provided context to register persistent objects if query returns any objects.
    Specified by:
      `onQuery` in interface `DataChannel`
    Parameters:
      `context` - an ObjectContext that originated the query, used to register result objects.
    Returns:
      a generic response object that encapsulates result of the execution.

  - ### onSync

    public GraphDiff onSync(ObjectContext originatingContext, GraphDiff changes, int syncType)
    Description copied from interface: `DataChannel`
    Processes synchronization request from a child ObjectContext, returning a GraphDiff that describes changes to objects made on the receiving end as a result of synchronization.
    Specified by:
      `onSync` in interface `DataChannel`
    Parameters:
      `originatingContext` - an ObjectContext that initiated the sync. Can be null.
      `changes` - diff from the context that initiated the sync.
      `syncType` - One of `DataChannel.FLUSH_NOCASCADE_SYNC`, `DataChannel.FLUSH_CASCADE_SYNC`, `DataChannel.ROLLBACK_CASCADE_SYNC`.

  - ### getEntityResolver

    public EntityResolver getEntityResolver()
    Returns EntityResolver obtained from the server. On first access, this method sends a message to the server to retrieve the EntityResolver. On subsequent calls locally cached resolver is used.
    Specified by:
      `getEntityResolver` in interface `DataChannel`

  - ### setupRemoteChannelListener

    protected boolean setupRemoteChannelListener() throws CayenneRuntimeException
    Starts up an EventBridge to listen for remote updates. Returns true if the listener was setup, false if not. False can be returned if the underlying connection doesn't support events of if there is no EventManager available.
    Throws:
      `CayenneRuntimeException`

  - ### send

    protected <T> T send(org.apache.cayenne.remote.ClientMessage message, Class<T> resultClass)
    Sends a message via connector, getting a result as an instance of a specific class.
    Throws:
      `CayenneRuntimeException` - if an underlying connector exception occurred, or a result is not of expected type.