Package org.apache.catalina.ha.tcp
Class SimpleTcpCluster
- java.lang.Object
-
- org.apache.catalina.util.LifecycleBase
-
- org.apache.catalina.util.LifecycleMBeanBase
-
- org.apache.catalina.ha.tcp.SimpleTcpCluster
-
- All Implemented Interfaces:
javax.management.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 org.apache.catalina.Lifecycle
Lifecycle.SingleUse
-
-
Field Summary
Fields Modifier and Type Field Description static java.lang.StringAFTER_MANAGERREGISTER_EVENTLifecycle event fired after a manager is registered.static java.lang.StringAFTER_MANAGERUNREGISTER_EVENTLifecycle event fired after a manager is unregistered.static java.lang.StringAFTER_MEMBERREGISTER_EVENTLifecycle event fired after a member is registered.static java.lang.StringAFTER_MEMBERUNREGISTER_EVENTLifecycle event fired after a member is unregistered.static java.lang.StringBEFORE_MANAGERREGISTER_EVENTLifecycle event fired before a manager is registered.static java.lang.StringBEFORE_MANAGERUNREGISTER_EVENTLifecycle event fired before a manager is unregistered.static java.lang.StringBEFORE_MEMBERREGISTER_EVENTLifecycle event fired before a member is registered.static java.lang.StringBEFORE_MEMBERUNREGISTER_EVENTLifecycle event fired before a member is unregistered.protected ChannelchannelGroup channel.protected java.util.List<ClusterListener>clusterListenersListeners of messagesprotected java.lang.StringclusterNameThe cluster name to joinprotected ContainercontainerThe Container associated with this Cluster.protected booleanhasMembershas membersprotected booleanheartbeatBackgroundEnabledcall Channel.heartbeat() at container background threadstatic LoglogLogger for this class.protected java.util.Map<java.lang.String,ClusterManager>managersThe context name <-> manager association for distributed contexts.protected ClusterManagermanagerTemplateTemplate used to create new cluster managers for contexts.static java.lang.StringRECEIVE_MESSAGE_FAILURE_EVENTLifecycle event fired when receiving a message fails.static java.lang.StringSEND_MESSAGE_FAILURE_EVENTLifecycle event fired when sending a message fails.protected static StringManagersmThe string manager for this package.protected java.beans.PropertyChangeSupportsupportThe property change support for this component.-
Fields inherited from interface org.apache.catalina.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
All Methods Instance Methods Concrete Methods Modifier and Type Method Description booleanaccept(java.io.Serializable msg, Member sender)Invoked by the channel to determine if the listener will process this message or not.voidaddClusterListener(ClusterListener listener)Add cluster message listener and register cluster to this listener.voidaddValve(Valve valve)Add cluster valve.voidbackgroundProcess()Execute a periodic task, such as reloading, etc.protected voidcheckDefaults()Sets default values for cluster listeners, valves, deployer, and channel when they have not been configured explicitly.ManagercreateManager(java.lang.String name)Create a new manager which will use this cluster to replicate its sessions.protected voiddestroyInternal()Destroys the cluster component and unregisters JMX MBeans.ClusterListener[]findClusterListeners()Get the cluster listeners associated with this cluster.ChannelgetChannel()Returns the channel associated with the cluster.intgetChannelSendOptions()Returns the channel send options as an integer flag value.java.lang.StringgetChannelSendOptionsName()returns the SendOptions as a comma separated list of names for use by JMXintgetChannelStartOptions()Returns the channel start options.ClusterDeployergetClusterDeployer()Returns the current Deployer.java.lang.StringgetClusterName()Return the name of the cluster that this Server is currently configured to operate within.ContainergetContainer()Get theContainerwith which this instance is associated.protected java.lang.StringgetDomainInternal()Returns the JMX domain for this cluster, derived from the associated container.MembergetLocalMember()Returns the member that represents this node.ManagergetManager(java.lang.String name)Get Managerjava.lang.StringgetManagerName(java.lang.String name, Manager manager)Get a new cluster name for a manager.java.util.Map<java.lang.String,ClusterManager>getManagers()Returns the map of managers.ClusterManagergetManagerTemplate()Returns the manager template used to create new cluster managers.Member[]getMembers()Returns all the members currently participating in the cluster.protected java.lang.StringgetObjectNameKeyProperties()Returns the key properties used to build the JMX ObjectName for this cluster.Valve[]getValves()Returns the current cluster valves.booleanhasMembers()Checks if the cluster has members.protected voidinitInternal()Initializes the cluster component and registers the cluster deployer with JMX.booleanisHeartbeatBackgroundEnabled()Returns whether the heartbeat background thread is enabled.booleanisNotifyLifecycleListenerOnFailure()Return whether the lifecycle listener should be notified on failure.voidmemberAdded(Member member)A member was added to the groupvoidmemberDisappeared(Member member)A member was removed from the group
If the member left voluntarily, the Member.getCommand will contain the Member.SHUTDOWN_PAYLOAD datavoidmessageReceived(java.io.Serializable message, Member sender)Receive a message from the channelvoidmessageReceived(ClusterMessage message)Processes a received cluster message by dispatching it to registered cluster listeners.protected voidregisterClusterValve()register all cluster valve to host or enginevoidregisterManager(Manager manager)Register a manager with the cluster.voidremoveClusterListener(ClusterListener listener)Remove message listener and deregister Cluster from listener.voidremoveManager(Manager manager)Removes a manager from the clustervoidsend(ClusterMessage msg)Sends a message to all the members in the clustervoidsend(ClusterMessage msg, Member dest)Sends a message to a specific member in the cluster.voidsend(ClusterMessage msg, Member dest, int sendOptions)Sends a message with the specified sendOptions to a specific member in the cluster.voidsetChannel(Channel channel)Set the channel associated with the cluster.voidsetChannelSendOptions(int channelSendOptions)Sets the channel send options as an integer flag value.voidsetChannelSendOptions(java.lang.String channelSendOptions)Sets the channel send options as a comma-separated string of option names.voidsetChannelStartOptions(int channelStartOptions)Sets the channel start options.voidsetClusterDeployer(ClusterDeployer clusterDeployer)Set a new Deployer, must be set before the cluster started.voidsetClusterName(java.lang.String clusterName)Set the name of the cluster to join, if no cluster with this name is present create one.voidsetContainer(Container container)Set theContainerwith which this instance is associated.voidsetHeartbeatBackgroundEnabled(boolean heartbeatBackgroundEnabled)Enables or disables the heartbeat background thread that calls heartbeat on the channel.voidsetManagerTemplate(ClusterManager managerTemplate)Sets the manager template used to create new cluster managers.voidsetNotifyLifecycleListenerOnFailure(boolean notifyListenerOnFailure)Set whether the lifecycle listener should be notified on failure.protected voidstartInternal()Start Cluster and implement the requirements ofLifecycleBase.startInternal().protected voidstopInternal()Stop Cluster and implement the requirements ofLifecycleBase.stopInternal().java.lang.StringtoString()protected voidunregisterClusterValve()unregister all cluster valve to host or engine-
Methods inherited from class org.apache.catalina.util.LifecycleMBeanBase
getDomain, getObjectName, postDeregister, postRegister, preDeregister, preRegister, register, setDomain, unregister, unregister
-
Methods inherited from class org.apache.catalina.util.LifecycleBase
addLifecycleListener, destroy, findLifecycleListeners, fireLifecycleEvent, getState, getStateName, getThrowOnFailure, init, removeLifecycleListener, setState, setState, setThrowOnFailure, start, stop
-
-
-
-
Field Detail
-
log
public static final Log log
Logger for this class.
-
BEFORE_MEMBERREGISTER_EVENT
public static final java.lang.String BEFORE_MEMBERREGISTER_EVENT
Lifecycle event fired before a member is registered.- See Also:
- Constant Field Values
-
AFTER_MEMBERREGISTER_EVENT
public static final java.lang.String AFTER_MEMBERREGISTER_EVENT
Lifecycle event fired after a member is registered.- See Also:
- Constant Field Values
-
BEFORE_MANAGERREGISTER_EVENT
public static final java.lang.String BEFORE_MANAGERREGISTER_EVENT
Lifecycle event fired before a manager is registered.- See Also:
- Constant Field Values
-
AFTER_MANAGERREGISTER_EVENT
public static final java.lang.String AFTER_MANAGERREGISTER_EVENT
Lifecycle event fired after a manager is registered.- See Also:
- Constant Field Values
-
BEFORE_MANAGERUNREGISTER_EVENT
public static final java.lang.String BEFORE_MANAGERUNREGISTER_EVENT
Lifecycle event fired before a manager is unregistered.- See Also:
- Constant Field Values
-
AFTER_MANAGERUNREGISTER_EVENT
public static final java.lang.String AFTER_MANAGERUNREGISTER_EVENT
Lifecycle event fired after a manager is unregistered.- See Also:
- Constant Field Values
-
BEFORE_MEMBERUNREGISTER_EVENT
public static final java.lang.String BEFORE_MEMBERUNREGISTER_EVENT
Lifecycle event fired before a member is unregistered.- See Also:
- Constant Field Values
-
AFTER_MEMBERUNREGISTER_EVENT
public static final java.lang.String AFTER_MEMBERUNREGISTER_EVENT
Lifecycle event fired after a member is unregistered.- See Also:
- Constant Field Values
-
SEND_MESSAGE_FAILURE_EVENT
public static final java.lang.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 java.lang.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 java.lang.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 java.beans.PropertyChangeSupport support
The property change support for this component.
-
managers
protected final java.util.Map<java.lang.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 java.util.List<ClusterListener> clusterListeners
Listeners of messages
-
hasMembers
protected boolean hasMembers
has members
-
-
Method Detail
-
isHeartbeatBackgroundEnabled
public boolean isHeartbeatBackgroundEnabled()
Returns whether the heartbeat background thread is enabled.- Returns:
trueif 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-trueto enable background heartbeat
-
setClusterName
public void setClusterName(java.lang.String clusterName)
Set the name of the cluster to join, if no cluster with this name is present create one.- Specified by:
setClusterNamein interfaceCluster- Parameters:
clusterName- The clustername to join
-
getClusterName
public java.lang.String getClusterName()
Return the name of the cluster that this Server is currently configured to operate within.- Specified by:
getClusterNamein interfaceCluster- Returns:
- The name of the cluster associated with this server
-
setContainer
public void setContainer(Container container)
Set theContainerwith which this instance is associated.- Specified by:
setContainerin interfaceContained- Parameters:
container- The Container instance with which this instance is to be associated, ornullto disassociate this instance from any Container
-
getContainer
public Container getContainer()
Get theContainerwith which this instance is associated.- Specified by:
getContainerin interfaceContained- Returns:
- The Container with which this instance is associated or
nullif not associated with a Container
-
isNotifyLifecycleListenerOnFailure
public boolean isNotifyLifecycleListenerOnFailure()
Return whether the lifecycle listener should be notified on failure.- Returns:
trueif 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-trueto 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:
addValvein interfaceCatalinaCluster- Parameters:
valve- The new cluster Valve.
-
getValves
public Valve[] getValves()
Returns the current cluster valves.- Specified by:
getValvesin interfaceCatalinaCluster- 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:
addClusterListenerin interfaceCatalinaCluster- Parameters:
listener- The new listener
-
removeClusterListener
public void removeClusterListener(ClusterListener listener)
Remove message listener and deregister Cluster from listener.- Specified by:
removeClusterListenerin interfaceCatalinaCluster- Parameters:
listener- The listener to remove
-
getClusterDeployer
public ClusterDeployer getClusterDeployer()
Returns the current Deployer.- Specified by:
getClusterDeployerin interfaceCatalinaCluster- Returns:
- the current Deployer
-
setClusterDeployer
public void setClusterDeployer(ClusterDeployer clusterDeployer)
Set a new Deployer, must be set before the cluster started.- Specified by:
setClusterDeployerin interfaceCatalinaCluster- Parameters:
clusterDeployer- The associated deployer
-
setChannel
public void setChannel(Channel channel)
Set the channel associated with the cluster.- Specified by:
setChannelin interfaceCatalinaCluster- 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(java.lang.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:
hasMembersin interfaceCatalinaCluster- Returns:
trueif the cluster has members.
-
getMembers
public Member[] getMembers()
Returns all the members currently participating in the cluster.- Specified by:
getMembersin interfaceCatalinaCluster- 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:
getLocalMemberin interfaceCatalinaCluster- Returns:
- the member that represents this node.
-
getManagers
public java.util.Map<java.lang.String,ClusterManager> getManagers()
Returns the map of managers.- Specified by:
getManagersin interfaceCatalinaCluster- Returns:
- The map of managers
-
getChannel
public Channel getChannel()
Returns the channel associated with the cluster.- Specified by:
getChannelin interfaceCatalinaCluster- 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 java.lang.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(java.lang.String name)
Create a new manager which will use this cluster to replicate its sessions.- Specified by:
createManagerin interfaceCluster- 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:
registerManagerin interfaceCluster- Parameters:
manager- Manager
-
removeManager
public void removeManager(Manager manager)
Removes a manager from the cluster- Specified by:
removeManagerin interfaceCluster- Parameters:
manager- Manager
-
getManagerName
public java.lang.String getManagerName(java.lang.String name, Manager manager)Get a new cluster name for a manager.- Specified by:
getManagerNamein interfaceCatalinaCluster- Parameters:
name- Override name (optional)manager- The manager- Returns:
- the manager name in the cluster
-
getManager
public Manager getManager(java.lang.String name)
Get Manager- Specified by:
getManagerin interfaceCatalinaCluster- 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:
backgroundProcessin interfaceCluster
-
initInternal
protected void initInternal() throws LifecycleExceptionInitializes the cluster component and registers the cluster deployer with JMX.- Overrides:
initInternalin classLifecycleMBeanBase- Throws:
LifecycleException- if an initialization error occurs
-
startInternal
protected void startInternal() throws LifecycleExceptionStart Cluster and implement the requirements ofLifecycleBase.startInternal().- Specified by:
startInternalin classLifecycleBase- 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 LifecycleExceptionStop Cluster and implement the requirements ofLifecycleBase.stopInternal().- Specified by:
stopInternalin classLifecycleBase- Throws:
LifecycleException- if this component detects a fatal error that prevents this component from being used
-
destroyInternal
protected void destroyInternal() throws LifecycleExceptionDestroys the cluster component and unregisters JMX MBeans.- Overrides:
destroyInternalin classLifecycleMBeanBase- Throws:
LifecycleException- if a destruction error occurs
-
toString
public java.lang.String toString()
- Overrides:
toStringin classjava.lang.Object
-
send
public void send(ClusterMessage msg)
Sends a message to all the members in the cluster- Specified by:
sendin interfaceCatalinaCluster- Parameters:
msg- ClusterMessage
-
send
public void send(ClusterMessage msg, Member dest)
Sends a message to a specific member in the cluster.- Specified by:
sendin interfaceCatalinaCluster- Parameters:
msg- ClusterMessagedest- 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:
sendin interfaceCatalinaCluster- Parameters:
msg- ClusterMessagedest- MembersendOptions- sendOptions
-
memberAdded
public void memberAdded(Member member)
A member was added to the group- Specified by:
memberAddedin interfaceMembershipListener- 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:
memberDisappearedin interfaceMembershipListener- Parameters:
member- Member- See Also:
Member.SHUTDOWN_PAYLOAD
-
accept
public boolean accept(java.io.Serializable msg, Member sender)Invoked by the channel to determine if the listener will process this message or not.- Specified by:
acceptin interfaceChannelListener- Parameters:
msg- Serializablesender- Member- Returns:
- boolean
-
messageReceived
public void messageReceived(java.io.Serializable message, Member sender)Receive a message from the channel- Specified by:
messageReceivedin interfaceChannelListener- Parameters:
message- Serializablesender- - 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 java.lang.String getDomainInternal()
Returns the JMX domain for this cluster, derived from the associated container.- Specified by:
getDomainInternalin classLifecycleMBeanBase- Returns:
- the JMX domain, or
nullif no container is set
-
getObjectNameKeyProperties
protected java.lang.String getObjectNameKeyProperties()
Returns the key properties used to build the JMX ObjectName for this cluster.- Specified by:
getObjectNameKeyPropertiesin classLifecycleMBeanBase- Returns:
- the key properties string for JMX registration
-
-