protected void checkDefaults() {
   if (clusterListeners.size() == 0) {
     addClusterListener(new ClusterSessionListener());
   }
   if (valves.size() == 0) {
     addValve(new JvmRouteBinderValve());
     addValve(new ReplicationValve());
   }
   if (clusterDeployer != null) clusterDeployer.setCluster(this);
   if (channel == null) channel = new GroupChannel();
   if (channel instanceof GroupChannel && !((GroupChannel) channel).getInterceptors().hasNext()) {
     channel.addInterceptor(new MessageDispatch15Interceptor());
     channel.addInterceptor(new TcpFailureDetector());
   }
 }
  /**
   * Stop Cluster and implement the requirements of {@link
   * org.apache.catalina.util.LifecycleBase#stopInternal()}.
   *
   * @exception LifecycleException if this component detects a fatal error that prevents this
   *     component from being used
   */
  @Override
  protected void stopInternal() throws LifecycleException {

    setState(LifecycleState.STOPPING);

    unregisterMember(channel.getLocalMember(false));
    if (clusterDeployer != null) clusterDeployer.stop();
    this.managers.clear();
    try {
      if (clusterDeployer != null) clusterDeployer.setCluster(null);
      channel.stop(channelStartOptions);
      channel.removeChannelListener(this);
      channel.removeMembershipListener(this);
      this.unregisterClusterValve();
    } catch (Exception x) {
      log.error(sm.getString("simpleTcpCluster.stopUnable"), x);
    }
  }