Class TwoPhaseCommitInterceptor
java.lang.Object
org.apache.catalina.tribes.group.ChannelInterceptorBase
org.apache.catalina.tribes.group.interceptors.TwoPhaseCommitInterceptor
- All Implemented Interfaces:
ChannelInterceptor, Heartbeat, MembershipListener
Two-phase commit interceptor. The sender transmits a confirmation message after each message. The receiver stores
each message and only passes it on when the matching confirmation message is received. There is no retransmission,
so a message whose confirmation is lost, or that arrives out of order, is dropped after the expiration time.
-
Nested Class Summary
Nested ClassesNested classes/interfaces inherited from interface ChannelInterceptor
ChannelInterceptor.InterceptorEvent -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected booleanWhether the confirmation message is deep cloned (true) or shallow cloned (false) before it is sent.protected longMessage expiration time in milliseconds.protected final Map<UniqueId, TwoPhaseCommitInterceptor.MapEntry> Map of pending messages keyed by their unique ID.protected static final StringManagerThe string manager for this package.Fields inherited from class ChannelInterceptorBase
optionFlag -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionbooleanReturns whether deep cloning is enabled.longReturns the message expiration time in milliseconds.voidTheheartbeat()method gets invoked periodically to allow interceptors to clean up resources, time out object and perform actions that are unrelated to sending/receiving data.voidThemessageReceivedis invoked when a message is received.voidsendMessage(Member[] destination, ChannelMessage msg, InterceptorPayload payload) ThesendMessagemethod is called when a message is being sent to one more destinations.voidsetDeepclone(boolean deepclone) Sets whether deep cloning should be used.voidsetExpire(long expire) Sets the message expiration time in milliseconds.Methods inherited from class ChannelInterceptorBase
fireInterceptorEvent, getChannel, getLocalMember, getMember, getMembers, getNext, getOptionFlag, getPrevious, hasMembers, memberAdded, memberDisappeared, okToProcess, setChannel, setNext, setOptionFlag, setPrevious, start, stop
-
Field Details
-
sm
The string manager for this package. -
messages
Map of pending messages keyed by their unique ID. -
expire
protected long expireMessage expiration time in milliseconds. -
deepclone
protected boolean deepcloneWhether the confirmation message is deep cloned (true) or shallow cloned (false) before it is sent. Messages that are stored for later delivery are always deep cloned.
-
-
Constructor Details
-
TwoPhaseCommitInterceptor
public TwoPhaseCommitInterceptor()Constructs a new TwoPhaseCommitInterceptor.
-
-
Method Details
-
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 invoking
getNext().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- Overrides:
sendMessagein classChannelInterceptorBase- 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:
-
messageReceived
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- Overrides:
messageReceivedin classChannelInterceptorBase- Parameters:
msg- ChannelMessage
-
getDeepclone
public boolean getDeepclone()Returns whether deep cloning is enabled.- Returns:
- true if deep cloning is enabled
-
getExpire
public long getExpire()Returns the message expiration time in milliseconds.- Returns:
- the expiration time
-
setDeepclone
public void setDeepclone(boolean deepclone) Sets whether deep cloning should be used.- Parameters:
deepclone- true to enable deep cloning
-
setExpire
public void setExpire(long expire) Sets the message expiration time in milliseconds.- Parameters:
expire- the expiration time
-
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- Overrides:
heartbeatin classChannelInterceptorBase
-