Class TwoPhaseCommitInterceptor
- java.lang.Object
-
- org.apache.catalina.tribes.group.ChannelInterceptorBase
-
- org.apache.catalina.tribes.group.interceptors.TwoPhaseCommitInterceptor
-
- All Implemented Interfaces:
ChannelInterceptor,Heartbeat,MembershipListener
public class TwoPhaseCommitInterceptor extends ChannelInterceptorBase
Two-phase commit interceptor that ensures reliable message delivery.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classTwoPhaseCommitInterceptor.MapEntry-
Nested classes/interfaces inherited from interface org.apache.catalina.tribes.ChannelInterceptor
ChannelInterceptor.InterceptorEvent
-
-
Field Summary
Fields Modifier and Type Field Description protected booleandeepcloneWhether to deep clone messages before storage.protected longexpireMessage expiration time in milliseconds.protected java.util.Map<UniqueId,TwoPhaseCommitInterceptor.MapEntry>messagesMap of pending messages keyed by their unique ID.protected static StringManagersmThe string manager for this package.-
Fields inherited from class org.apache.catalina.tribes.group.ChannelInterceptorBase
optionFlag
-
-
Constructor Summary
Constructors Constructor Description TwoPhaseCommitInterceptor()Constructs a new TwoPhaseCommitInterceptor.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description booleangetDeepclone()Returns whether deep cloning is enabled.longgetExpire()Returns the message expiration time in milliseconds.voidheartbeat()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.voidmessageReceived(ChannelMessage msg)ThemessageReceivedis 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 org.apache.catalina.tribes.group.ChannelInterceptorBase
fireInterceptorEvent, getChannel, getLocalMember, getMember, getMembers, getNext, getOptionFlag, getPrevious, hasMembers, memberAdded, memberDisappeared, okToProcess, setChannel, setNext, setOptionFlag, setPrevious, start, stop
-
-
-
-
Field Detail
-
sm
protected static final StringManager sm
The string manager for this package.
-
messages
protected final java.util.Map<UniqueId,TwoPhaseCommitInterceptor.MapEntry> messages
Map of pending messages keyed by their unique ID.
-
expire
protected long expire
Message expiration time in milliseconds.
-
deepclone
protected boolean deepclone
Whether to deep clone messages before storage.
-
-
Method Detail
-
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:
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- 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
-
-