# 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`
`static final String`
`AFTER_MANAGERUNREGISTER_EVENT`
`static final String`
`AFTER_MEMBERREGISTER_EVENT`
`static final String`
`AFTER_MEMBERUNREGISTER_EVENT`
`static final String`
`BEFORE_MANAGERREGISTER_EVENT`
`static final String`
`BEFORE_MANAGERUNREGISTER_EVENT`
`static final String`
`BEFORE_MEMBERREGISTER_EVENT`
`static final String`
`BEFORE_MEMBERUNREGISTER_EVENT`
`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`
`protected final Map<String, ClusterManager>`
`managers`
The context name <-> manager association for distributed contexts.
`protected ClusterManager`
`managerTemplate`
`static final String`
`RECEIVE_MESSAGE_FAILURE_EVENT`
`static final String`
`SEND_MESSAGE_FAILURE_EVENT`
`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()`

## Method Summary

Modifier and Type
Method
Description
`boolean`
`accept(Serializable msg, Member sender)`
notify all listeners from receiving a new message is not ClusterMessage emit Failure Event to LifecycleListener
`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()`
`Manager`
`createManager(String name)`
Create a new manager which will use this cluster to replicate its sessions.
`protected void`
`destroyInternal()`
Subclasses implement this method to perform any instance destruction required.
`ClusterListener[]`
`findClusterListeners()`
Get the cluster listeners associated with this cluster.
`Channel`
`getChannel()`
`int`
`getChannelSendOptions()`
`String`
`getChannelSendOptionsName()`
returns the SendOptions as a comma separated list of names for use by JMX
`int`
`getChannelStartOptions()`
`ClusterDeployer`
`getClusterDeployer()`
`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()`
Method implemented by subclasses to identify the domain in which MBeans should be registered.
`Member`
`getLocalMember()`
`Manager`
`getManager(String name)`
Get Manager
`String`
`getManagerName(String name, Manager manager)`
Get a new cluster name for a manager.
`Map<String, ClusterManager>`
`getManagers()`
`ClusterManager`
`getManagerTemplate()`
`Member[]`
`getMembers()`
`protected String`
`getObjectNameKeyProperties()`
Allow subclasses to specify the key properties component of the `ObjectName` that will be used to register this component.
`Valve[]`
`getValves()`
`boolean`
`hasMembers()`
`protected void`
`initInternal()`
Subclasses implement this method to perform any instance initialisation required.
`boolean`
`isHeartbeatBackgroundEnabled()`
Return heartbeat enable flag (default false)
`boolean`
`isNotifyLifecycleListenerOnFailure()`
`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)`
`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)`
`void`
`setChannelSendOptions(String channelSendOptions)`
`void`
`setChannelStartOptions(int channelStartOptions)`
`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)`
enabled that container backgroundThread call heartbeat at channel
`void`
`setManagerTemplate(ClusterManager managerTemplate)`
`void`
`setNotifyLifecycleListenerOnFailure(boolean notifyListenerOnFailure)`
`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

### BEFORE_MEMBERREGISTER_EVENT

public static final String BEFORE_MEMBERREGISTER_EVENT

See Also:
  - Constant Field Values

### AFTER_MEMBERREGISTER_EVENT

public static final String AFTER_MEMBERREGISTER_EVENT

See Also:
  - Constant Field Values

### BEFORE_MANAGERREGISTER_EVENT

public static final String BEFORE_MANAGERREGISTER_EVENT

See Also:
  - Constant Field Values

### AFTER_MANAGERREGISTER_EVENT

public static final String AFTER_MANAGERREGISTER_EVENT

See Also:
  - Constant Field Values

### BEFORE_MANAGERUNREGISTER_EVENT

public static final String BEFORE_MANAGERUNREGISTER_EVENT

See Also:
  - Constant Field Values

### AFTER_MANAGERUNREGISTER_EVENT

public static final String AFTER_MANAGERUNREGISTER_EVENT

See Also:
  - Constant Field Values

### BEFORE_MEMBERUNREGISTER_EVENT

public static final String BEFORE_MEMBERUNREGISTER_EVENT

See Also:
  - Constant Field Values

### AFTER_MEMBERUNREGISTER_EVENT

public static final String AFTER_MEMBERUNREGISTER_EVENT

See Also:
  - Constant Field Values

### SEND_MESSAGE_FAILURE_EVENT

public static final String SEND_MESSAGE_FAILURE_EVENT

See Also:
  - Constant Field Values

### RECEIVE_MESSAGE_FAILURE_EVENT

public static final String RECEIVE_MESSAGE_FAILURE_EVENT

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

### clusterListeners

protected final List<ClusterListener> clusterListeners
Listeners of messages

### hasMembers

protected boolean hasMembers
has members

## Constructor Details

### SimpleTcpCluster

public SimpleTcpCluster()

## Method Details

### isHeartbeatBackgroundEnabled

public boolean isHeartbeatBackgroundEnabled()
Return heartbeat enable flag (default false)

Returns:
  the heartbeatBackgroundEnabled

### setHeartbeatBackgroundEnabled

public void setHeartbeatBackgroundEnabled(boolean heartbeatBackgroundEnabled)
enabled that container backgroundThread call heartbeat at channel

Parameters:
  `heartbeatBackgroundEnabled` - the heartbeatBackgroundEnabled to set

### setClusterName

public void setClusterName(String clusterName)
Description copied from interface: `Cluster`
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()
Description copied from interface: `Cluster`
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)
Description copied from interface: `Contained`
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()
Description copied from interface: `Contained`
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()

Returns:
  Returns the notifyLifecycleListenerOnFailure.

### setNotifyLifecycleListenerOnFailure

public void setNotifyLifecycleListenerOnFailure(boolean notifyListenerOnFailure)

Parameters:
  `notifyListenerOnFailure` - The notifyLifecycleListenerOnFailure to set.

### addValve

public void addValve(Valve valve)
Description copied from interface: `CatalinaCluster`
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()

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)
Description copied from interface: `CatalinaCluster`
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)
Description copied from interface: `CatalinaCluster`
Remove message listener and deregister Cluster from listener.

Specified by:
  `removeClusterListener` in interface `CatalinaCluster`
Parameters:
  `listener` - The listener to remove

### getClusterDeployer

public ClusterDeployer getClusterDeployer()

Specified by:
  `getClusterDeployer` in interface `CatalinaCluster`
Returns:
  the current Deployer

### setClusterDeployer

public void setClusterDeployer(ClusterDeployer clusterDeployer)
Description copied from interface: `CatalinaCluster`
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)
Description copied from interface: `CatalinaCluster`
Set the channel associated with the cluster.

Specified by:
  `setChannel` in interface `CatalinaCluster`
Parameters:
  `channel` - the channel

### setManagerTemplate

public void setManagerTemplate(ClusterManager managerTemplate)

### setChannelSendOptions

public void setChannelSendOptions(int channelSendOptions)

### setChannelSendOptions

public void setChannelSendOptions(String channelSendOptions)

### hasMembers

public boolean hasMembers()

Specified by:
  `hasMembers` in interface `CatalinaCluster`
Returns:
  `true` if the cluster has members.

### getMembers

public Member[] getMembers()

Specified by:
  `getMembers` in interface `CatalinaCluster`
Returns:
  an array containing all the members currently participating in the cluster.

### getLocalMember

public Member getLocalMember()

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

### getManagers

public Map<String, ClusterManager> getManagers()

Specified by:
  `getManagers` in interface `CatalinaCluster`
Returns:
  The map of managers

### getChannel

public Channel getChannel()

Specified by:
  `getChannel` in interface `CatalinaCluster`
Returns:
  the channel associated with the cluster

### getManagerTemplate

public ClusterManager getManagerTemplate()

### getChannelSendOptions

public int getChannelSendOptions()

### 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)
Description copied from interface: `Cluster`
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)
Description copied from interface: `Cluster`
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)
Description copied from interface: `Cluster`
Removes a manager from the cluster

Specified by:
  `removeManager` in interface `Cluster`
Parameters:
  `manager` - Manager

### getManagerName

public String getManagerName(String name, Manager manager)
Description copied from interface: `CatalinaCluster`
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)
Description copied from interface: `CatalinaCluster`
Get Manager

Specified by:
  `getManager` in interface `CatalinaCluster`
Parameters:
  `name` - The manager name
Returns:
  The manager

### backgroundProcess

public void backgroundProcess()
Description copied from interface: `Cluster`
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
Description copied from class: `LifecycleBase`
Subclasses implement this method to perform any instance initialisation required.

Overrides:
  `initInternal` in class `LifecycleMBeanBase`
Throws:
  `LifecycleException` - If the initialisation fails

### 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()

### 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
Description copied from class: `LifecycleBase`
Subclasses implement this method to perform any instance destruction required.

Overrides:
  `destroyInternal` in class `LifecycleMBeanBase`
Throws:
  `LifecycleException` - If the destruction fails

### toString

public String toString()

Overrides:
  `toString` in class `Object`

### send

public void send(ClusterMessage msg)
Description copied from interface: `CatalinaCluster`
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)
Description copied from interface: `CatalinaCluster`
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)
Description copied from interface: `CatalinaCluster`
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)
Description copied from interface: `MembershipListener`
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)
Description copied from interface: `MembershipListener`
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)
notify all listeners from receiving a new message is not ClusterMessage emit Failure Event to LifecycleListener

Specified by:
  `accept` in interface `ChannelListener`
Parameters:
  `msg` - received Message
  `sender` - Member
Returns:
  boolean

### messageReceived

public void messageReceived(Serializable message, Member sender)
Description copied from interface: `ChannelListener`
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)

### getChannelStartOptions

public int getChannelStartOptions()

### setChannelStartOptions

public void setChannelStartOptions(int channelStartOptions)

### getDomainInternal

protected String getDomainInternal()
Description copied from class: `LifecycleMBeanBase`
Method implemented by subclasses to identify the domain in which MBeans should be registered.

Specified by:
  `getDomainInternal` in class `LifecycleMBeanBase`
Returns:
  The name of the domain to use to register MBeans.

### getObjectNameKeyProperties

protected String getObjectNameKeyProperties()
Description copied from class: `LifecycleMBeanBase`
Allow subclasses to specify the key properties component of the `ObjectName` that will be used to register this component.

Specified by:
  `getObjectNameKeyProperties` in class `LifecycleMBeanBase`
Returns:
  The string representation of the key properties component of the desired `ObjectName`