Class TwoPhaseCommitInterceptor

  • All Implemented Interfaces:
    ChannelInterceptor, Heartbeat, MembershipListener

    public class TwoPhaseCommitInterceptor
    extends ChannelInterceptorBase
    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.
    • Field Detail

      • sm

        protected static final StringManager sm
        The string manager for this package.
      • expire

        protected long expire
        Message expiration time in milliseconds.
      • deepclone

        protected boolean deepclone
        Whether 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 Detail

      • TwoPhaseCommitInterceptor

        public TwoPhaseCommitInterceptor()
        Constructs a new TwoPhaseCommitInterceptor.
    • Method Detail

      • sendMessage

        public void sendMessage​(Member[] destination,
                                ChannelMessage msg,
                                InterceptorPayload payload)
                         throws ChannelException
        Description copied from interface: ChannelInterceptor
        The sendMessage method 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 invoking getNext().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:
        sendMessage in interface ChannelInterceptor
        Overrides:
        sendMessage in class ChannelInterceptorBase
        Parameters:
        destination - Member[] - the destination for this message
        msg - ChannelMessage - the message to be sent
        payload - 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
      • 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