# Class TcpPingInterceptor

java.lang.Object
org.apache.catalina.tribes.group.ChannelInterceptorBase
org.apache.catalina.tribes.group.interceptors.TcpPingInterceptor

All Implemented Interfaces:
  `ChannelInterceptor, TcpPingInterceptorMBean, Heartbeat, MembershipListener`

public class TcpPingInterceptor extends ChannelInterceptorBase implements TcpPingInterceptorMBean
Sends periodic TCP pings to cluster members for health monitoring.

## Nested Class Summary

Nested Classes
Modifier and Type
Class
Description
`protected class`
`TcpPingInterceptor.PingThread`
Background thread that sends periodic pings.

### Nested classes/interfaces inherited from interface ChannelInterceptor

`ChannelInterceptor.InterceptorEvent`

## Field Summary

Fields
Modifier and Type
Field
Description
`protected static final AtomicInteger`
`cnt`
Counter for naming ping threads.
`protected long`
`interval`
Ping interval in milliseconds.
`protected boolean`
`running`
Whether the ping thread is currently running.
`protected static final StringManager`
`sm`
The string manager for this package.
`protected boolean`
`staticOnly`
Whether to ping only static members.
`protected static final byte[]`
`TCP_PING_DATA`
Test payload sent during ping checks.
`protected TcpPingInterceptor.PingThread`
`thread`
The background ping thread.
`protected boolean`
`useThread`
Whether to use a dedicated thread for pinging.

### Fields inherited from class ChannelInterceptorBase

`optionFlag`

## Constructor Summary

Constructors
Constructor
Description
`TcpPingInterceptor()`
Constructs a new TcpPingInterceptor.

## Method Summary

Modifier and Type
Method
Description
`long`
`getInterval()`
Returns the ping interval in milliseconds.
`boolean`
`getStaticOnly()`
Returns whether static-only mode is enabled.
`boolean`
`getUseThread()`
Returns whether a dedicated ping thread is used.
`void`
`heartbeat()`
The `heartbeat()` method gets invoked periodically to allow interceptors to clean up resources, time out object and perform actions that are unrelated to sending/receiving data.
`void`
`messageReceived(ChannelMessage msg)`
The `messageReceived` is invoked when a message is received.
`protected void`
`sendPing()`
Sends a ping to cluster members.
`protected void`
`sendPingMessage(Member[] members)`
Sends a ping message to the specified members.
`void`
`setInterval(long interval)`
Sets the ping interval in milliseconds.
`void`
`setStaticOnly(boolean staticOnly)`
Sets whether to ping only static members.
`void`
`setUseThread(boolean useThread)`
Sets whether to use a dedicated thread for pinging.
`void`
`start(int svc)`
Starts up the channel.
`void`
`stop(int svc)`
Shuts down the channel.

### Methods inherited from class ChannelInterceptorBase

`fireInterceptorEvent, getChannel, getLocalMember, getMember, getMembers, getNext, getOptionFlag, getPrevious, hasMembers, memberAdded, memberDisappeared, okToProcess, sendMessage, setChannel, setNext, setOptionFlag, setPrevious`

### Methods inherited from class Object

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

### Methods inherited from interface TcpPingInterceptorMBean

`getOptionFlag`

## Field Details

### sm

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

### TCP_PING_DATA

protected static final byte[] TCP_PING_DATA
Test payload sent during ping checks.

### interval

protected long interval
Ping interval in milliseconds.

### useThread

protected boolean useThread
Whether to use a dedicated thread for pinging.

### staticOnly

protected boolean staticOnly
Whether to ping only static members.

### running

protected volatile boolean running
Whether the ping thread is currently running.

### thread

protected TcpPingInterceptor.PingThread thread
The background ping thread.

### cnt

protected static final AtomicInteger cnt
Counter for naming ping threads.

## Constructor Details

### TcpPingInterceptor

public TcpPingInterceptor()
Constructs a new TcpPingInterceptor.

## Method Details

### start

public void start(int svc) throws ChannelException
Description copied from interface: `ChannelInterceptor`
Starts up the channel. This can be called multiple times for individual services to start The svc parameter can be the logical or value of any constants

Specified by:
  `start` in interface `ChannelInterceptor`
Overrides:
  `start` in class `ChannelInterceptorBase`
Parameters:
  `svc` - one of:
  - Channel.DEFAULT - will start all services
  - Channel.MBR_RX_SEQ - starts the membership receiver
  - Channel.MBR_TX_SEQ - starts the membership broadcaster
  - Channel.SND_TX_SEQ - starts the replication transmitter
  - Channel.SND_RX_SEQ - starts the replication receiver
Throws:
  `ChannelException` - if a startup error occurs or the service is already started.
See Also:
  - `Channel`

### stop

public void stop(int svc) throws ChannelException
Description copied from interface: `ChannelInterceptor`
Shuts down the channel. This can be called multiple times for individual services to shut down. The svc parameter can be the logical or value of any constants

Specified by:
  `stop` in interface `ChannelInterceptor`
Overrides:
  `stop` in class `ChannelInterceptorBase`
Parameters:
  `svc` - one of:
  - Channel.DEFAULT - will shut down all services
  - Channel.MBR_RX_SEQ - stops the membership receiver
  - Channel.MBR_TX_SEQ - stops the membership broadcaster
  - Channel.SND_TX_SEQ - stops the replication transmitter
  - Channel.SND_RX_SEQ - stops the replication receiver
Throws:
  `ChannelException` - if a startup error occurs or the service is already started.
See Also:
  - `Channel`

### heartbeat

public void heartbeat()
Description copied from interface: `ChannelInterceptor`
The `heartbeat()` method gets invoked periodically to allow interceptors to clean up resources, time out object and perform actions that are unrelated to sending/receiving data.

Specified by:
  `heartbeat` in interface `ChannelInterceptor`
Specified by:
  `heartbeat` in interface `Heartbeat`
Overrides:
  `heartbeat` in class `ChannelInterceptorBase`

### getInterval

public long getInterval()
Description copied from interface: `TcpPingInterceptorMBean`
Returns the ping interval in milliseconds.

Specified by:
  `getInterval` in interface `TcpPingInterceptorMBean`
Returns:
  the ping interval

### setInterval

public void setInterval(long interval)
Sets the ping interval in milliseconds.

Parameters:
  `interval` - the interval in milliseconds

### setUseThread

public void setUseThread(boolean useThread)
Sets whether to use a dedicated thread for pinging.

Parameters:
  `useThread` - true to use a dedicated thread

### setStaticOnly

public void setStaticOnly(boolean staticOnly)
Sets whether to ping only static members.

Parameters:
  `staticOnly` - true to ping only static members

### getUseThread

public boolean getUseThread()
Description copied from interface: `TcpPingInterceptorMBean`
Returns whether a dedicated ping thread is used.

Specified by:
  `getUseThread` in interface `TcpPingInterceptorMBean`
Returns:
  true if a dedicated thread is used

### getStaticOnly

public boolean getStaticOnly()
Returns whether static-only mode is enabled.

Returns:
  true if only static members are pinged

### sendPing

protected void sendPing()
Sends a ping to cluster members.

### sendPingMessage

protected void sendPingMessage(Member[] members)
Sends a ping message to the specified members.

Parameters:
  `members` - the members to ping

### messageReceived

public void messageReceived(ChannelMessage msg)
Description copied from interface: `ChannelInterceptor`
The `messageReceived` is invoked when a message is received. `ChannelMessage.getAddress()` is the sender, or the reply-to address if it has been overwritten.

Specified by:
  `messageReceived` in interface `ChannelInterceptor`
Overrides:
  `messageReceived` in class `ChannelInterceptorBase`
Parameters:
  `msg` - ChannelMessage