Class 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.
  • 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:
    • AFTER_MEMBERREGISTER_EVENT

      public static final String AFTER_MEMBERREGISTER_EVENT
      Lifecycle event fired after a member is registered.
      See Also:
    • BEFORE_MANAGERREGISTER_EVENT

      public static final String BEFORE_MANAGERREGISTER_EVENT
      Lifecycle event fired before a manager is registered.
      See Also:
    • AFTER_MANAGERREGISTER_EVENT

      public static final String AFTER_MANAGERREGISTER_EVENT
      Lifecycle event fired after a manager is registered.
      See Also:
    • BEFORE_MANAGERUNREGISTER_EVENT

      public static final String BEFORE_MANAGERUNREGISTER_EVENT
      Lifecycle event fired before a manager is unregistered.
      See Also:
    • AFTER_MANAGERUNREGISTER_EVENT

      public static final String AFTER_MANAGERUNREGISTER_EVENT
      Lifecycle event fired after a manager is unregistered.
      See Also:
    • BEFORE_MEMBERUNREGISTER_EVENT

      public static final String BEFORE_MEMBERUNREGISTER_EVENT
      Lifecycle event fired before a member is unregistered.
      See Also:
    • AFTER_MEMBERUNREGISTER_EVENT

      public static final String AFTER_MEMBERUNREGISTER_EVENT
      Lifecycle event fired after a member is unregistered.
      See Also:
    • SEND_MESSAGE_FAILURE_EVENT

      public static final String SEND_MESSAGE_FAILURE_EVENT
      Lifecycle event fired when sending a message fails.
      See Also:
    • RECEIVE_MESSAGE_FAILURE_EVENT

      public static final String RECEIVE_MESSAGE_FAILURE_EVENT
      Lifecycle event fired when receiving a message fails.
      See Also:
    • 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:
    • 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:
    • 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