Package org.apache.catalina.tribes.group
Class ChannelInterceptorBase
- java.lang.Object
-
- org.apache.catalina.tribes.group.ChannelInterceptorBase
-
- All Implemented Interfaces:
ChannelInterceptor,Heartbeat,MembershipListener
- Direct Known Subclasses:
ChannelCoordinator,DomainFilterInterceptor,EncryptInterceptor,FragmentationInterceptor,GroupChannel,GzipInterceptor,MessageDispatchInterceptor,NonBlockingCoordinator,OrderInterceptor,SimpleCoordinator,StaticMembershipInterceptor,TcpFailureDetector,TcpPingInterceptor,ThroughputInterceptor,TwoPhaseCommitInterceptor
public abstract class ChannelInterceptorBase extends Object implements ChannelInterceptor
Abstract class for the interceptor base class.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface org.apache.catalina.tribes.ChannelInterceptor
ChannelInterceptor.InterceptorEvent
-
-
Field Summary
Fields Modifier and Type Field Description protected intoptionFlag
-
Constructor Summary
Constructors Constructor Description ChannelInterceptorBase()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidfireInterceptorEvent(ChannelInterceptor.InterceptorEvent event)ChannelgetChannel()Return the channel that is related to this interceptorMembergetLocalMember(boolean incAlive)Return the member that represents this node.MembergetMember(Member mbr)Intercepts theChannel.getMember(Member)methodMember[]getMembers()Get all current cluster membersChannelInterceptorgetNext()Retrieve the next interceptor in the listintgetOptionFlag()An interceptor can react to a message based on a set bit on the message options.ChannelInterceptorgetPrevious()Retrieve the previous interceptor in the listbooleanhasMembers()has membersvoidheartbeat()Theheartbeat()method gets invoked periodically to allow interceptors to clean up resources, time out object and perform actions that are unrelated to sending/receiving data.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(ChannelMessage msg)themessageReceivedis invoked when a message is received.booleanokToProcess(int messageFlags)voidsendMessage(Member[] destination, ChannelMessage msg, InterceptorPayload payload)ThesendMessagemethod is called when a message is being sent to one more destinations.voidsetChannel(Channel channel)Set the channel that is related to this interceptorvoidsetNext(ChannelInterceptor next)Set the next interceptor in the list of interceptorsvoidsetOptionFlag(int optionFlag)Sets the option flagvoidsetPrevious(ChannelInterceptor previous)Set the previous interceptor in the listvoidstart(int svc)Starts up the channel.voidstop(int svc)Shuts down the channel.
-
-
-
Method Detail
-
okToProcess
public boolean okToProcess(int messageFlags)
-
setNext
public final void setNext(ChannelInterceptor next)
Description copied from interface:ChannelInterceptorSet the next interceptor in the list of interceptors- Specified by:
setNextin interfaceChannelInterceptor- Parameters:
next- ChannelInterceptor
-
getNext
public final ChannelInterceptor getNext()
Description copied from interface:ChannelInterceptorRetrieve the next interceptor in the list- Specified by:
getNextin interfaceChannelInterceptor- Returns:
- ChannelInterceptor - returns the next interceptor in the list or null if no more interceptors exist
-
setPrevious
public final void setPrevious(ChannelInterceptor previous)
Description copied from interface:ChannelInterceptorSet the previous interceptor in the list- Specified by:
setPreviousin interfaceChannelInterceptor- Parameters:
previous- ChannelInterceptor
-
setOptionFlag
public void setOptionFlag(int optionFlag)
Description copied from interface:ChannelInterceptorSets the option flag- Specified by:
setOptionFlagin interfaceChannelInterceptor- Parameters:
optionFlag- int- See Also:
ChannelInterceptor.getOptionFlag()
-
getPrevious
public final ChannelInterceptor getPrevious()
Description copied from interface:ChannelInterceptorRetrieve the previous interceptor in the list- Specified by:
getPreviousin interfaceChannelInterceptor- Returns:
- ChannelInterceptor - returns the previous interceptor in the list or null if no more interceptors exist
-
getOptionFlag
public int getOptionFlag()
Description copied from interface:ChannelInterceptorAn interceptor can react to a message based on a set bit on the message options.
When a message is sent, the options can be retrieved from ChannelMessage.getOptions() and if the bit is set, this interceptor will react to it.
A simple evaluation if an interceptor should react to the message would be:
boolean react = (getOptionFlag() == (getOptionFlag() & ChannelMessage.getOptions()));
The default option is 0, meaning there is no way for the application to trigger the interceptor. The interceptor itself will decide.- Specified by:
getOptionFlagin interfaceChannelInterceptor- Returns:
- int
- See Also:
ChannelMessage.getOptions()
-
sendMessage
public void sendMessage(Member[] destination, ChannelMessage msg, InterceptorPayload payload) throws ChannelException
Description copied from interface:ChannelInterceptorThesendMessagemethod is called when a message is being sent to one more destinations. The interceptor can modify any of the parameters and then pass on the message down the stack by invokinggetNext().sendMessage(destination,msg,payload)
Alternatively the interceptor can stop the message from being sent by not invokinggetNext().sendMessage(destination,msg,payload)
If the message is to be sent asynchronous the application can be notified of completion and errors by passing in an error handler attached to a payload object.
The ChannelMessage.getAddress contains Channel.getLocalMember, and can be overwritten to simulate a message sent from another node.- Specified by:
sendMessagein interfaceChannelInterceptor- Parameters:
destination- Member[] - the destination for this messagemsg- ChannelMessage - the message to be sentpayload- InterceptorPayload - the payload, carrying an error handler and future useful data, can be null- Throws:
ChannelException- if a serialization error happens.- See Also:
ErrorHandler,InterceptorPayload
-
messageReceived
public void messageReceived(ChannelMessage msg)
Description copied from interface:ChannelInterceptorthemessageReceivedis invoked when a message is received.ChannelMessage.getAddress()is the sender, or the reply-to address if it has been overwritten.- Specified by:
messageReceivedin interfaceChannelInterceptor- Parameters:
msg- ChannelMessage
-
memberAdded
public void memberAdded(Member member)
Description copied from interface:MembershipListenerA member was added to the group- Specified by:
memberAddedin interfaceMembershipListener- Parameters:
member- Member - the member that was added
-
memberDisappeared
public void memberDisappeared(Member member)
Description copied from interface:MembershipListenerA 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
-
heartbeat
public void heartbeat()
Description copied from interface:ChannelInterceptorTheheartbeat()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:
heartbeatin interfaceChannelInterceptor- Specified by:
heartbeatin interfaceHeartbeat
-
hasMembers
public boolean hasMembers()
has members- Specified by:
hasMembersin interfaceChannelInterceptor- Returns:
- boolean - if the channel has members in its membership group
- See Also:
Channel.hasMembers()
-
getMembers
public Member[] getMembers()
Get all current cluster members- Specified by:
getMembersin interfaceChannelInterceptor- Returns:
- all members or empty array
- See Also:
Channel.getMembers()
-
getMember
public Member getMember(Member mbr)
Description copied from interface:ChannelInterceptorIntercepts theChannel.getMember(Member)method- Specified by:
getMemberin interfaceChannelInterceptor- Parameters:
mbr- Member- Returns:
- Member
- See Also:
Channel.getMember(Member)
-
getLocalMember
public Member getLocalMember(boolean incAlive)
Return the member that represents this node.- Specified by:
getLocalMemberin interfaceChannelInterceptor- Parameters:
incAlive- boolean- Returns:
- Member
- See Also:
Channel.getLocalMember(boolean)
-
start
public void start(int svc) throws ChannelExceptionStarts 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:
startin interfaceChannelInterceptor- Parameters:
svc- int value of
DEFAULT - will start all services
MBR_RX_SEQ - starts the membership receiver
MBR_TX_SEQ - starts the membership broadcaster
SND_TX_SEQ - starts the replication transmitter
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 ChannelExceptionShuts down the channel. This can be called multiple times for individual services to shutdown The svc parameter can be the logical or value of any constants- Specified by:
stopin interfaceChannelInterceptor- Parameters:
svc- int value of
DEFAULT - will shutdown all services
MBR_RX_SEQ - stops the membership receiver
MBR_TX_SEQ - stops the membership broadcaster
SND_TX_SEQ - stops the replication transmitter
SND_RX_SEQ - stops the replication receiver- Throws:
ChannelException- if a startup error occurs or the service is already started.- See Also:
Channel
-
fireInterceptorEvent
public void fireInterceptorEvent(ChannelInterceptor.InterceptorEvent event)
- Specified by:
fireInterceptorEventin interfaceChannelInterceptor
-
getChannel
public Channel getChannel()
Return the channel that is related to this interceptor- Specified by:
getChannelin interfaceChannelInterceptor- Returns:
- Channel
-
setChannel
public void setChannel(Channel channel)
Set the channel that is related to this interceptor- Specified by:
setChannelin interfaceChannelInterceptor- Parameters:
channel- The channel
-
-