# Class StaticMembershipProvider

java.lang.Object
org.apache.catalina.tribes.membership.MembershipProviderBase
org.apache.catalina.tribes.membership.StaticMembershipProvider

All Implemented Interfaces:
  `ChannelListener, RpcCallback, Heartbeat, MembershipProvider`

public class StaticMembershipProvider extends MembershipProviderBase implements RpcCallback, ChannelListener, Heartbeat
Provider that manages static membership for a cluster.

- ## Nested Class Summary

  Nested Classes
  Modifier and Type
  Class
  Description
  `static class`
  `StaticMembershipProvider.MemberMessage`
  Message sent between membership providers to coordinate membership state.
  `protected class`
  `StaticMembershipProvider.PingThread`
  Background thread that periodically sends ping messages to cluster members.

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `protected Channel`
  `channel`
  The channel associated with this provider.
  `protected int`
  `connectTimeout`
  Socket connection timeout in milliseconds.
  `protected long`
  `expirationTime`
  Time in milliseconds after which a member is considered expired.
  `protected long`
  `pingInterval`
  Interval between ping messages in milliseconds.
  `protected RpcChannel`
  `rpcChannel`
  RPC channel for sending messages.
  `protected long`
  `rpcTimeout`
  RPC operation timeout in milliseconds.
  `protected boolean`
  `running`
  Whether the ping thread is currently running.
  `protected int`
  `sendOptions`
  Send options flag for channel messages.
  `protected static final StringManager`
  `sm`
  String manager for this class.
  `protected int`
  `startLevel`
  Current start level bitmask.
  `protected ArrayList<StaticMember>`
  `staticMembers`
  List of static members for this cluster.
  `protected StaticMembershipProvider.PingThread`
  `thread`
  Background ping thread instance.
  `protected boolean`
  `useThread`
  Whether to use a background thread for pinging.

  ### Fields inherited from class MembershipProviderBase

  `executor, membership, membershipListener, service`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `StaticMembershipProvider()`
  Default constructor.

- ## 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.
  `protected void`
  `checkExpired()`
  Checks for and removes expired members.
  `void`
  `heartbeat()`
  Heartbeat invocation for resources cleanup etc
  `void`
  `init(Properties properties)`
  Initialize the membership provider with the specified configuration.
  `void`
  `leftOver(Serializable msg, Member sender)`
  If the reply has already been sent to the requesting thread, the rpc callback can handle any data that comes in after the fact.
  `protected void`
  `memberAdded(Member member)`
  Handles the addition of a new member to the cluster.
  `protected void`
  `memberAlive(Member member)`
  Updates the alive status of a member.
  `protected void`
  `memberDisappeared(Member member)`
  Handles the disappearance of a member from the cluster.
  `void`
  `messageReceived(Serializable msg, Member sender)`
  Receive a message from the channel
  `protected void`
  `ping()`
  Sends ping messages to all static members and checks for expired members.
  `Serializable`
  `replyRequest(Serializable msg, Member sender)`
  Allows sending a response to a received message.
  `void`
  `setChannel(Channel channel)`
  Sets the channel for this provider.
  `void`
  `setStaticMembers(ArrayList<StaticMember> staticMembers)`
  Sets the static members for this cluster.
  `protected Member`
  `setupMember(Member mbr)`
  Sets up a member after it joins.
  `void`
  `start(int level)`
  Start the membership provider.
  `protected void`
  `startMembership(Member[] members)`
  Sends start messages to the given members.
  `boolean`
  `stop(int level)`
  Stop the membership provider.
  `protected void`
  `stopMembership(Member[] members)`
  Sends stop messages to the given members.

  ### Methods inherited from class MembershipProviderBase

  `getMember, getMembers, hasMembers, setMembershipListener, setMembershipService`

  ### Methods inherited from class Object

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

- ## Field Details

  - ### sm

    protected static final StringManager sm
    String manager for this class.

  - ### channel

    protected Channel channel
    The channel associated with this provider.

  - ### rpcChannel

    protected RpcChannel rpcChannel
    RPC channel for sending messages.

  - ### staticMembers

    protected ArrayList<StaticMember> staticMembers
    List of static members for this cluster.

  - ### sendOptions

    protected int sendOptions
    Send options flag for channel messages.

  - ### expirationTime

    protected long expirationTime
    Time in milliseconds after which a member is considered expired.

  - ### connectTimeout

    protected int connectTimeout
    Socket connection timeout in milliseconds.

  - ### rpcTimeout

    protected long rpcTimeout
    RPC operation timeout in milliseconds.

  - ### startLevel

    protected int startLevel
    Current start level bitmask.

  - ### useThread

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

  - ### pingInterval

    protected long pingInterval
    Interval between ping messages in milliseconds.

  - ### running

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

  - ### thread

    protected StaticMembershipProvider.PingThread thread
    Background ping thread instance.

- ## Constructor Details

  - ### StaticMembershipProvider

    public StaticMembershipProvider()
    Default constructor.

- ## Method Details

  - ### init

    public void init(Properties properties) throws Exception
    Description copied from interface: `MembershipProvider`
    Initialize the membership provider with the specified configuration.
    Specified by:
      `init` in interface `MembershipProvider`
    Overrides:
      `init` in class `MembershipProviderBase`
    Parameters:
      `properties` - configuration
    Throws:
      `Exception` - if an error occurs

  - ### start

    public void start(int level) throws Exception
    Description copied from interface: `MembershipProvider`
    Start the membership provider.
    Specified by:
      `start` in interface `MembershipProvider`
    Parameters:
      `level` - the readiness level
      - Channel.DEFAULT - will start all services
      - Channel.MBR_RX_SEQ - starts the membership receiver
      - Channel.MBR_TX_SEQ - starts the membership broadcaster
    Throws:
      `Exception` - if an error occurs

  - ### stop

    public boolean stop(int level) throws Exception
    Description copied from interface: `MembershipProvider`
    Stop the membership provider.
    Specified by:
      `stop` in interface `MembershipProvider`
    Parameters:
      `level` - the readiness level
      - Channel.DEFAULT - will stop all services
      - Channel.MBR_RX_SEQ - stops the membership receiver
      - Channel.MBR_TX_SEQ - stops the membership broadcaster
    Returns:
      `true` if successful
    Throws:
      `Exception` - if an error occurs

  - ### startMembership

    protected void startMembership(Member[] members) throws ChannelException
    Sends start messages to the given members.
    Parameters:
      `members` - the members to notify
    Throws:
      `ChannelException` - if sending fails

  - ### setupMember

    protected Member setupMember(Member mbr)
    Sets up a member after it joins. Override for customization.
    Parameters:
      `mbr` - the member to set up
    Returns:
      the configured member

  - ### memberAdded

    protected void memberAdded(Member member)
    Handles the addition of a new member to the cluster.
    Parameters:
      `member` - the member that was added

  - ### memberDisappeared

    protected void memberDisappeared(Member member)
    Handles the disappearance of a member from the cluster.
    Parameters:
      `member` - the member that disappeared

  - ### memberAlive

    protected void memberAlive(Member member)
    Updates the alive status of a member.
    Parameters:
      `member` - the member to update

  - ### stopMembership

    protected void stopMembership(Member[] members)
    Sends stop messages to the given members.
    Parameters:
      `members` - the members to notify

  - ### messageReceived

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

  - ### accept

    public boolean accept(Serializable msg, Member sender)
    Description copied from interface: `ChannelListener`
    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

  - ### replyRequest

    public Serializable replyRequest(Serializable msg, Member sender)
    Description copied from interface: `RpcCallback`
    Allows sending a response to a received message.
    Specified by:
      `replyRequest` in interface `RpcCallback`
    Parameters:
      `msg` - The message
      `sender` - Member
    Returns:
      Serializable object, `null` if no reply should be sent

  - ### leftOver

    public void leftOver(Serializable msg, Member sender)
    Description copied from interface: `RpcCallback`
    If the reply has already been sent to the requesting thread, the rpc callback can handle any data that comes in after the fact.
    Specified by:
      `leftOver` in interface `RpcCallback`
    Parameters:
      `msg` - The message
      `sender` - Member

  - ### heartbeat

    public void heartbeat()
    Description copied from interface: `Heartbeat`
    Heartbeat invocation for resources cleanup etc
    Specified by:
      `heartbeat` in interface `Heartbeat`

  - ### ping

    protected void ping() throws ChannelException
    Sends ping messages to all static members and checks for expired members.
    Throws:
      `ChannelException` - if pinging fails

  - ### checkExpired

    protected void checkExpired()
    Checks for and removes expired members.

  - ### setChannel

    public void setChannel(Channel channel)
    Sets the channel for this provider.
    Parameters:
      `channel` - the channel

  - ### setStaticMembers

    public void setStaticMembers(ArrayList<StaticMember> staticMembers)
    Sets the static members for this cluster.
    Parameters:
      `staticMembers` - the list of static members