class ClusteredChangeBus extends MessageConsumer<ChangeSet> implements ChangeBus {

    @Override
    public void notify( ChangeSet changeSet ) {
        if (changeSet == null) {
            return; // do nothing
        }
        if (!clusteringService.multipleMembersInCluster()) {
            // We are in clustered mode, but there is only one participant in the cluster (us).
            // So short-circuit the cluster and just notify the local observers ...
            consume(changeSet);
            return;
        }

        // There are multiple participants in the cluster, so send all changes out to JGroups,
        // letting JGroups do the ordering of messages...
        // note that JGroups will dispatch our own changeset *in a separate thread* (see below)
        logSendOperation(changeSet);
        clusteringService.sendMessage(changeSet);
    }

    public  ClusteredChangeBus( ChangeBus delegate,
                               ClusteringService clusteringService );

}