SimpleTcpCluster (Apache Tomcat 9.0.119 API Documentation)
Description: declaration: package: org.apache.catalina.ha.tcp, class: SimpleTcpCluster

# Class SimpleTcpCluster

java.lang.Object
org.apache.catalina.util.LifecycleBase
org.apache.catalina.util.LifecycleMBeanBase
org.apache.catalina.ha.tcp.SimpleTcpCluster

All Implemented Interfaces:
  `MBeanRegistration, Cluster, Contained, CatalinaCluster, JmxEnabled, Lifecycle, ChannelListener, MembershipListener`

public class SimpleTcpCluster extends LifecycleMBeanBase implements CatalinaCluster, MembershipListener, ChannelListener
A Cluster implementation using simple multicast. Responsible for setting up a cluster and provides callers with a valid multicast receiver/sender.

- ## Nested Class Summary

  ### Nested classes/interfaces inherited from interface Lifecycle

  `Lifecycle.SingleUse`

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `static final String`
  `AFTER_MANAGERREGISTER_EVENT`
  Lifecycle event fired after a manager is registered.
  `static final String`
  `AFTER_MANAGERUNREGISTER_EVENT`
  Lifecycle event fired after a manager is unregistered.
  `static final String`
  `AFTER_MEMBERREGISTER_EVENT`
  Lifecycle event fired after a member is registered.
  `static final String`
  `AFTER_MEMBERUNREGISTER_EVENT`
  Lifecycle event fired after a member is unregistered.
  `static final String`
  `BEFORE_MANAGERREGISTER_EVENT`
  Lifecycle event fired before a manager is registered.
  `static final String`
  `BEFORE_MANAGERUNREGISTER_EVENT`
  Lifecycle event fired before a manager is unregistered.
  `static final String`
  `BEFORE_MEMBERREGISTER_EVENT`
  Lifecycle event fired before a member is registered.
  `static final String`
  `BEFORE_MEMBERUNREGISTER_EVENT`
  Lifecycle event fired before a member is unregistered.
  `protected Channel`
  `channel`
  Group channel.
  `protected final List<ClusterListener>`
  `clusterListeners`
  Listeners of messages
  `protected String`
  `clusterName`
  The cluster name to join
  `protected Container`
  `container`
  The Container associated with this Cluster.
  `protected boolean`
  `hasMembers`
  has members
  `protected boolean`
  `heartbeatBackgroundEnabled`
  call Channel.heartbeat() at container background thread
  `static final Log`
  `log`
  Logger for this class.
  `protected final Map<String, ClusterManager>`
  `managers`
  The context name <-> manager association for distributed contexts.
  `protected ClusterManager`
  `managerTemplate`
  Template used to create new cluster managers for contexts.
  `static final String`
  `RECEIVE_MESSAGE_FAILURE_EVENT`
  Lifecycle event fired when receiving a message fails.
  `static final String`
  `SEND_MESSAGE_FAILURE_EVENT`
  Lifecycle event fired when sending a message fails.
  `protected static final StringManager`
  `sm`
  The string manager for this package.
  `protected final PropertyChangeSupport`
  `support`
  The property change support for this component.

  ### Fields inherited from class LifecycleMBeanBase

  `mserver`

  ### Fields inherited from interface Lifecycle

  `AFTER_DESTROY_EVENT, AFTER_INIT_EVENT, AFTER_START_EVENT, AFTER_STOP_EVENT, BEFORE_DESTROY_EVENT, BEFORE_INIT_EVENT, BEFORE_START_EVENT, BEFORE_STOP_EVENT, CONFIGURE_START_EVENT, CONFIGURE_STOP_EVENT, PERIODIC_EVENT, START_EVENT, STOP_EVENT`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `SimpleTcpCluster()`
  Creates a new SimpleTcpCluster instance.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `boolean`
  `accept(Serializable msg, Member sender)`
  Invoked by the channel to determine if the listener will process this message or not.
  `void`
  `addClusterListener(ClusterListener listener)`
  Add cluster message listener and register cluster to this listener.
  `void`
  `addValve(Valve valve)`
  Add cluster valve.
  `void`
  `backgroundProcess()`
  Execute a periodic task, such as reloading, etc.
  `protected void`
  `checkDefaults()`
  Sets default values for cluster listeners, valves, deployer, and channel when they have not been configured explicitly.
  `Manager`
  `createManager(String name)`
  Create a new manager which will use this cluster to replicate its sessions.
  `protected void`
  `destroyInternal()`
  Destroys the cluster component and unregisters JMX MBeans.
  `ClusterListener[]`
  `findClusterListeners()`
  Get the cluster listeners associated with this cluster.
  `Channel`
  `getChannel()`
  Returns the channel associated with the cluster.
  `int`
  `getChannelSendOptions()`
  Returns the channel send options as an integer flag value.
  `String`
  `getChannelSendOptionsName()`
  returns the SendOptions as a comma separated list of names for use by JMX
  `int`
  `getChannelStartOptions()`
  Returns the channel start options.
  `ClusterDeployer`
  `getClusterDeployer()`
  Returns the current Deployer.
  `String`
  `getClusterName()`
  Return the name of the cluster that this Server is currently configured to operate within.
  `Container`
  `getContainer()`
  Get the `Container` with which this instance is associated.
  `protected String`
  `getDomainInternal()`
  Returns the JMX domain for this cluster, derived from the associated container.
  `Member`
  `getLocalMember()`
  Returns the member that represents this node.
  `Manager`
  `getManager(String name)`
  Get Manager
  `String`
  `getManagerName(String name, Manager manager)`
  Get a new cluster name for a manager.
  `Map<String, ClusterManager>`
  `getManagers()`
  Returns the map of managers.
  `ClusterManager`
  `getManagerTemplate()`
  Returns the manager template used to create new cluster managers.
  `Member[]`
  `getMembers()`
  Returns all the members currently participating in the cluster.
  `protected String`
  `getObjectNameKeyProperties()`
  Returns the key properties used to build the JMX ObjectName for this cluster.
  `Valve[]`
  `getValves()`
  Returns the current cluster valves.
  `boolean`
  `hasMembers()`
  Checks if the cluster has members.
  `protected void`
  `initInternal()`
  Initializes the cluster component and registers the cluster deployer with JMX.
  `boolean`
  `isHeartbeatBackgroundEnabled()`
  Returns whether the heartbeat background thread is enabled.
  `boolean`
  `isNotifyLifecycleListenerOnFailure()`
  Return whether the lifecycle listener should be notified on failure.
  `void`
  `memberAdded(Member member)`
  A member was added to the group
  `void`
  `memberDisappeared(Member member)`
  A member was removed from the group
  If the member left voluntarily, the Member.getCommand will contain the Member.SHUTDOWN_PAYLOAD data
  `void`
  `messageReceived(Serializable message, Member sender)`
  Receive a message from the channel
  `void`
  `messageReceived(ClusterMessage message)`
  Processes a received cluster message by dispatching it to registered cluster listeners.
  `protected void`
  `registerClusterValve()`
  register all cluster valve to host or engine
  `void`
  `registerManager(Manager manager)`
  Register a manager with the cluster.
  `void`
  `removeClusterListener(ClusterListener listener)`
  Remove message listener and deregister Cluster from listener.
  `void`
  `removeManager(Manager manager)`
  Removes a manager from the cluster
  `void`
  `send(ClusterMessage msg)`
  Sends a message to all the members in the cluster
  `void`
  `send(ClusterMessage msg, Member dest)`
  Sends a message to a specific member in the cluster.
  `void`
  `send(ClusterMessage msg, Member dest, int sendOptions)`
  Sends a message with the specified sendOptions to a specific member in the cluster.
  `void`
  `setChannel(Channel channel)`
  Set the channel associated with the cluster.
  `void`
  `setChannelSendOptions(int channelSendOptions)`
  Sets the channel send options as an integer flag value.
  `void`
  `setChannelSendOptions(String channelSendOptions)`
  Sets the channel send options as a comma-separated string of option names.
  `void`
  `setChannelStartOptions(int channelStartOptions)`
  Sets the channel start options.
  `void`
  `setClusterDeployer(ClusterDeployer clusterDeployer)`
  Set a new Deployer, must be set before the cluster started.
  `void`
  `setClusterName(String clusterName)`
  Set the name of the cluster to join, if no cluster with this name is present create one.
  `void`
  `setContainer(Container container)`
  Set the `Container` with which this instance is associated.
  `void`
  `setHeartbeatBackgroundEnabled(boolean heartbeatBackgroundEnabled)`
  Enables or disables the heartbeat background thread that calls heartbeat on the channel.
  `void`
  `setManagerTemplate(ClusterManager managerTemplate)`
  Sets the manager template used to create new cluster managers.
  `void`
  `setNotifyLifecycleListenerOnFailure(boolean notifyListenerOnFailure)`
  Set whether the lifecycle listener should be notified on failure.
  `protected void`
  `startInternal()`
  Start Cluster and implement the requirements of `LifecycleBase.startInternal()`.
  `protected void`
  `stopInternal()`
  Stop Cluster and implement the requirements of `LifecycleBase.stopInternal()`.
  `String`
  `toString()`
  `protected void`
  `unregisterClusterValve()`
  unregister all cluster valve to host or engine

  ### Methods inherited from class LifecycleMBeanBase

  `getDomain, getObjectName, postDeregister, postRegister, preDeregister, preRegister, register, setDomain, unregister, unregister`

  ### Methods inherited from class LifecycleBase

  `addLifecycleListener, destroy, findLifecycleListeners, fireLifecycleEvent, getState, getStateName, getThrowOnFailure, init, removeLifecycleListener, setState, setState, setThrowOnFailure, start, stop`

  ### Methods inherited from class Object

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

- ## Field Details

  - ### log

    public static final Log log
    Logger for this class.

  - ### BEFORE_MEMBERREGISTER_EVENT

    public static final String BEFORE_MEMBERREGISTER_EVENT
    Lifecycle event fired before a member is registered.
    See Also:
      - Constant Field Values

  - ### AFTER_MEMBERREGISTER_EVENT

    public static final String AFTER_MEMBERREGISTER_EVENT
    Lifecycle event fired after a member is registered.
    See Also:
      - Constant Field Values

  - ### BEFORE_MANAGERREGISTER_EVENT

    public static final String BEFORE_MANAGERREGISTER_EVENT
    Lifecycle event fired before a manager is registered.
    See Also:
      - Constant Field Values

  - ### AFTER_MANAGERREGISTER_EVENT

    public static final String AFTER_MANAGERREGISTER_EVENT
    Lifecycle event fired after a manager is registered.
    See Also:
      - Constant Field Values

  - ### BEFORE_MANAGERUNREGISTER_EVENT

    public static final String BEFORE_MANAGERUNREGISTER_EVENT
    Lifecycle event fired before a manager is unregistered.
    See Also:
      - Constant Field Values

  - ### AFTER_MANAGERUNREGISTER_EVENT

    public static final String AFTER_MANAGERUNREGISTER_EVENT
    Lifecycle event fired after a manager is unregistered.
    See Also:
      - Constant Field Values

  - ### BEFORE_MEMBERUNREGISTER_EVENT

    public static final String BEFORE_MEMBERUNREGISTER_EVENT
    Lifecycle event fired before a member is unregistered.
    See Also:
      - Constant Field Values

  - ### AFTER_MEMBERUNREGISTER_EVENT

    public static final String AFTER_MEMBERUNREGISTER_EVENT
    Lifecycle event fired after a member is unregistered.
    See Also:
      - Constant Field Values

  - ### SEND_MESSAGE_FAILURE_EVENT

    public static final String SEND_MESSAGE_FAILURE_EVENT
    Lifecycle event fired when sending a message fails.
    See Also:
      - Constant Field Values

  - ### RECEIVE_MESSAGE_FAILURE_EVENT

    public static final String RECEIVE_MESSAGE_FAILURE_EVENT
    Lifecycle event fired when receiving a message fails.
    See Also:
      - Constant Field Values

  - ### channel

    protected Channel channel
    Group channel.

  - ### sm

    protected static final StringManager sm
    The string manager for this package.

  - ### clusterName

    protected String clusterName
    The cluster name to join

  - ### heartbeatBackgroundEnabled

    protected boolean heartbeatBackgroundEnabled
    call Channel.heartbeat() at container background thread
    See Also:
      - `GroupChannel.heartbeat()`

  - ### container

    protected Container container
    The Container associated with this Cluster.

  - ### support

    protected final PropertyChangeSupport support
    The property change support for this component.

  - ### managers

    protected final Map<String, ClusterManager> managers
    The context name <-> manager association for distributed contexts.

  - ### managerTemplate

    protected ClusterManager managerTemplate
    Template used to create new cluster managers for contexts.

  - ### clusterListeners

    protected final List<ClusterListener> clusterListeners
    Listeners of messages

  - ### hasMembers

    protected boolean hasMembers
    has members

- ## Constructor Details

  - ### SimpleTcpCluster

    public SimpleTcpCluster()
    Creates a new SimpleTcpCluster instance.

- ## Method Details

  - ### isHeartbeatBackgroundEnabled

    public boolean isHeartbeatBackgroundEnabled()
    Returns whether the heartbeat background thread is enabled.
    Returns:
      `true` if heartbeat is enabled in the background

  - ### setHeartbeatBackgroundEnabled

    public void setHeartbeatBackgroundEnabled(boolean heartbeatBackgroundEnabled)
    Enables or disables the heartbeat background thread that calls heartbeat on the channel.
    Parameters:
      `heartbeatBackgroundEnabled` - `true` to enable background heartbeat

  - ### setClusterName

    public void setClusterName(String clusterName)
    Set the name of the cluster to join, if no cluster with this name is present create one.
    Specified by:
      `setClusterName` in interface `Cluster`
    Parameters:
      `clusterName` - The clustername to join

  - ### getClusterName

    public String getClusterName()
    Return the name of the cluster that this Server is currently configured to operate within.
    Specified by:
      `getClusterName` in interface `Cluster`
    Returns:
      The name of the cluster associated with this server

  - ### setContainer

    public void setContainer(Container container)
    Set the `Container` with which this instance is associated.
    Specified by:
      `setContainer` in interface `Contained`
    Parameters:
      `container` - The Container instance with which this instance is to be associated, or `null` to disassociate this instance from any Container

  - ### getContainer

    public Container getContainer()
    Get the `Container` with which this instance is associated.
    Specified by:
      `getContainer` in interface `Contained`
    Returns:
      The Container with which this instance is associated or `null` if not associated with a Container

  - ### isNotifyLifecycleListenerOnFailure

    public boolean isNotifyLifecycleListenerOnFailure()
    Return whether the lifecycle listener should be notified on failure.
    Returns:
      `true` if the lifecycle listener should be notified on failure

  - ### setNotifyLifecycleListenerOnFailure

    public void setNotifyLifecycleListenerOnFailure(boolean notifyListenerOnFailure)
    Set whether the lifecycle listener should be notified on failure.
    Parameters:
      `notifyListenerOnFailure` - `true` to notify the lifecycle listener on failure

  - ### addValve

    public void addValve(Valve valve)
    Add cluster valve. Cluster Valves are only add to container when cluster is started.
    Specified by:
      `addValve` in interface `CatalinaCluster`
    Parameters:
      `valve` - The new cluster Valve.

  - ### getValves

    public Valve[] getValves()
    Returns the current cluster valves.
    Specified by:
      `getValves` in interface `CatalinaCluster`
    Returns:
      the current cluster valves

  - ### findClusterListeners

    public ClusterListener[] findClusterListeners()
    Get the cluster listeners associated with this cluster. If this Array has no listeners registered, a zero-length array is returned.
    Returns:
      the listener array

  - ### addClusterListener

    public void addClusterListener(ClusterListener listener)
    Add cluster message listener and register cluster to this listener.
    Specified by:
      `addClusterListener` in interface `CatalinaCluster`
    Parameters:
      `listener` - The new listener

  - ### removeClusterListener

    public void removeClusterListener(ClusterListener listener)
    Remove message listener and deregister Cluster from listener.
    Specified by:
      `removeClusterListener` in interface `CatalinaCluster`
    Parameters:
      `listener` - The listener to remove

  - ### getClusterDeployer

    public ClusterDeployer getClusterDeployer()
    Returns the current Deployer.
    Specified by:
      `getClusterDeployer` in interface `CatalinaCluster`
    Returns:
      the current Deployer

  - ### setClusterDeployer

    public void setClusterDeployer(ClusterDeployer clusterDeployer)
    Set a new Deployer, must be set before the cluster started.
    Specified by:
      `setClusterDeployer` in interface `CatalinaCluster`
    Parameters:
      `clusterDeployer` - The associated deployer

  - ### setChannel

    public void setChannel(Channel channel)
    Set the channel associated with the cluster.
    Specified by:
      `setChannel` in interface `CatalinaCluster`
    Parameters:
      `channel` - the channel

  - ### setManagerTemplate

    public void setManagerTemplate(ClusterManager managerTemplate)
    Sets the manager template used to create new cluster managers.
    Parameters:
      `managerTemplate` - the manager template

  - ### setChannelSendOptions

    public void setChannelSendOptions(int channelSendOptions)
    Sets the channel send options as an integer flag value.
    Parameters:
      `channelSendOptions` - the send options

  - ### setChannelSendOptions

    public void setChannelSendOptions(String channelSendOptions)
    Sets the channel send options as a comma-separated string of option names.
    Parameters:
      `channelSendOptions` - the send options as a string

  - ### hasMembers

    public boolean hasMembers()
    Checks if the cluster has members.
    Specified by:
      `hasMembers` in interface `CatalinaCluster`
    Returns:
      `true` if the cluster has members.

  - ### getMembers

    public Member[] getMembers()
    Returns all the members currently participating in the cluster.
    Specified by:
      `getMembers` in interface `CatalinaCluster`
    Returns:
      an array containing all the members currently participating in the cluster.

  - ### getLocalMember

    public Member getLocalMember()
    Returns the member that represents this node.
    Specified by:
      `getLocalMember` in interface `CatalinaCluster`
    Returns:
      the member that represents this node.

  - ### getManagers

    public Map<String, ClusterManager> getManagers()
    Returns the map of managers.
    Specified by:
      `getManagers` in interface `CatalinaCluster`
    Returns:
      The map of managers

  - ### getChannel

    public Channel getChannel()
    Returns the channel associated with the cluster.
    Specified by:
      `getChannel` in interface `CatalinaCluster`
    Returns:
      the channel associated with the cluster

  - ### getManagerTemplate

    public ClusterManager getManagerTemplate()
    Returns the manager template used to create new cluster managers.
    Returns:
      the manager template

  - ### getChannelSendOptions

    public int getChannelSendOptions()
    Returns the channel send options as an integer flag value.
    Returns:
      the channel send options

  - ### getChannelSendOptionsName

    public String getChannelSendOptionsName()
    returns the SendOptions as a comma separated list of names for use by JMX
    Returns:
      a comma separated list of the option names

  - ### createManager

    public Manager createManager(String name)
    Create a new manager which will use this cluster to replicate its sessions.
    Specified by:
      `createManager` in interface `Cluster`
    Parameters:
      `name` - Name (key) of the application with which the manager is associated
    Returns:
      The newly created Manager instance

  - ### registerManager

    public void registerManager(Manager manager)
    Register a manager with the cluster. If the cluster is not responsible for creating a manager, then the container will at least notify the cluster that this manager is participating in the cluster.
    Specified by:
      `registerManager` in interface `Cluster`
    Parameters:
      `manager` - Manager

  - ### removeManager

    public void removeManager(Manager manager)
    Removes a manager from the cluster
    Specified by:
      `removeManager` in interface `Cluster`
    Parameters:
      `manager` - Manager

  - ### getManagerName

    public String getManagerName(String name, Manager manager)
    Get a new cluster name for a manager.
    Specified by:
      `getManagerName` in interface `CatalinaCluster`
    Parameters:
      `name` - Override name (optional)
      `manager` - The manager
    Returns:
      the manager name in the cluster

  - ### getManager

    public Manager getManager(String name)
    Get Manager
    Specified by:
      `getManager` in interface `CatalinaCluster`
    Parameters:
      `name` - The manager name
    Returns:
      The manager

  - ### backgroundProcess

    public void backgroundProcess()
    Execute a periodic task, such as reloading, etc. This method will be invoked inside the classloading context of this container. Unexpected throwables will be caught and logged.
    Specified by:
      `backgroundProcess` in interface `Cluster`

  - ### initInternal

    protected void initInternal() throws LifecycleException
    Initializes the cluster component and registers the cluster deployer with JMX.
    Overrides:
      `initInternal` in class `LifecycleMBeanBase`
    Throws:
      `LifecycleException` - if an initialization error occurs

  - ### startInternal

    protected void startInternal() throws LifecycleException
    Start Cluster and implement the requirements of `LifecycleBase.startInternal()`.
    Specified by:
      `startInternal` in class `LifecycleBase`
    Throws:
      `LifecycleException` - if this component detects a fatal error that prevents this component from being used

  - ### checkDefaults

    protected void checkDefaults()
    Sets default values for cluster listeners, valves, deployer, and channel when they have not been configured explicitly.

  - ### registerClusterValve

    protected void registerClusterValve()
    register all cluster valve to host or engine

  - ### unregisterClusterValve

    protected void unregisterClusterValve()
    unregister all cluster valve to host or engine

  - ### stopInternal

    protected void stopInternal() throws LifecycleException
    Stop Cluster and implement the requirements of `LifecycleBase.stopInternal()`.
    Specified by:
      `stopInternal` in class `LifecycleBase`
    Throws:
      `LifecycleException` - if this component detects a fatal error that prevents this component from being used

  - ### destroyInternal

    protected void destroyInternal() throws LifecycleException
    Destroys the cluster component and unregisters JMX MBeans.
    Overrides:
      `destroyInternal` in class `LifecycleMBeanBase`
    Throws:
      `LifecycleException` - if a destruction error occurs

  - ### toString

    public String toString()
    Overrides:
      `toString` in class `Object`

  - ### send

    public void send(ClusterMessage msg)
    Sends a message to all the members in the cluster
    Specified by:
      `send` in interface `CatalinaCluster`
    Parameters:
      `msg` - ClusterMessage

  - ### send

    public void send(ClusterMessage msg, Member dest)
    Sends a message to a specific member in the cluster.
    Specified by:
      `send` in interface `CatalinaCluster`
    Parameters:
      `msg` - ClusterMessage
      `dest` - Member

  - ### send

    public void send(ClusterMessage msg, Member dest, int sendOptions)
    Sends a message with the specified sendOptions to a specific member in the cluster.
    Specified by:
      `send` in interface `CatalinaCluster`
    Parameters:
      `msg` - ClusterMessage
      `dest` - Member
      `sendOptions` - sendOptions

  - ### memberAdded

    public void memberAdded(Member member)
    A member was added to the group
    Specified by:
      `memberAdded` in interface `MembershipListener`
    Parameters:
      `member` - Member - the member that was added

  - ### memberDisappeared

    public void memberDisappeared(Member member)
    A member was removed from the group
    If the member left voluntarily, the Member.getCommand will contain the Member.SHUTDOWN_PAYLOAD data
    Specified by:
      `memberDisappeared` in interface `MembershipListener`
    Parameters:
      `member` - Member
    See Also:
      - `Member.SHUTDOWN_PAYLOAD`

  - ### accept

    public boolean accept(Serializable msg, Member sender)
    Invoked by the channel to determine if the listener will process this message or not.
    Specified by:
      `accept` in interface `ChannelListener`
    Parameters:
      `msg` - Serializable
      `sender` - Member
    Returns:
      boolean

  - ### messageReceived

    public void messageReceived(Serializable message, Member sender)
    Receive a message from the channel
    Specified by:
      `messageReceived` in interface `ChannelListener`
    Parameters:
      `message` - Serializable
      `sender` - - the source of the message

  - ### messageReceived

    public void messageReceived(ClusterMessage message)
    Processes a received cluster message by dispatching it to registered cluster listeners.
    Parameters:
      `message` - the cluster message that was received

  - ### getChannelStartOptions

    public int getChannelStartOptions()
    Returns the channel start options.
    Returns:
      the channel start options

  - ### setChannelStartOptions

    public void setChannelStartOptions(int channelStartOptions)
    Sets the channel start options.
    Parameters:
      `channelStartOptions` - the channel start options

  - ### getDomainInternal

    protected String getDomainInternal()
    Returns the JMX domain for this cluster, derived from the associated container.
    Specified by:
      `getDomainInternal` in class `LifecycleMBeanBase`
    Returns:
      the JMX domain, or `null` if no container is set

  - ### getObjectNameKeyProperties

    protected String getObjectNameKeyProperties()
    Returns the key properties used to build the JMX ObjectName for this cluster.
    Specified by:
      `getObjectNameKeyProperties` in class `LifecycleMBeanBase`
    Returns:
      the key properties string for JMX registration