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 that ensures reliable message delivery.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic final recordEntry that holds a message, its ID, and the timestamp of arrival.Nested classes/interfaces inherited from interface ChannelInterceptor
ChannelInterceptor.InterceptorEvent -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected booleanWhether to deep clone messages before storage.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 to deep clone messages before storage.
-
-
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
-