org.springframework.integration.aggregator
Class ResequencingMessageBarrier

java.lang.Object
  extended by org.springframework.integration.aggregator.AbstractMessageBarrier
      extended by org.springframework.integration.aggregator.ResequencingMessageBarrier
All Implemented Interfaces:
MessageBarrier

public class ResequencingMessageBarrier
extends AbstractMessageBarrier

MessageBarrier implementation for resequencing. It can either release partial sequences as messages arrive, or the full sequence.

Author:
Marius Bogoevici

Field Summary
private  int lastReleasedSequenceNumber
           
private  boolean releasePartialSequences
           
private  java.util.Comparator<Message<?>> resequencingComparator
           
 
Fields inherited from class org.springframework.integration.aggregator.AbstractMessageBarrier
messages
 
Constructor Summary
ResequencingMessageBarrier(boolean releasePartialSequences)
           
 
Method Summary
protected  void addMessage(Message<?> message)
           
protected  boolean hasReceivedAllMessages()
          Subclasses must implement this method to indicate if all possible messages that could be received by a given barrier have already been received (e.g.
protected  java.util.List<Message<?>> releaseAvailableMessages()
          Subclasses must implement this method to return the messages that can be released by this barrier after the receipt of a given message.
 
Methods inherited from class org.springframework.integration.aggregator.AbstractMessageBarrier
addAndRelease, getMessages, getTimestamp, isComplete
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

lastReleasedSequenceNumber

private int lastReleasedSequenceNumber

resequencingComparator

private final java.util.Comparator<Message<?>> resequencingComparator

releasePartialSequences

private final boolean releasePartialSequences
Constructor Detail

ResequencingMessageBarrier

public ResequencingMessageBarrier(boolean releasePartialSequences)
Parameters:
releasePartialSequences - specifies whether partial sequences should be released as they arrive, or the resequencer
Method Detail

addMessage

protected void addMessage(Message<?> message)
Overrides:
addMessage in class AbstractMessageBarrier

hasReceivedAllMessages

protected boolean hasReceivedAllMessages()
Description copied from class: AbstractMessageBarrier
Subclasses must implement this method to indicate if all possible messages that could be received by a given barrier have already been received (e.g. all messages from a given sequence).

Specified by:
hasReceivedAllMessages in class AbstractMessageBarrier

releaseAvailableMessages

protected java.util.List<Message<?>> releaseAvailableMessages()
Description copied from class: AbstractMessageBarrier
Subclasses must implement this method to return the messages that can be released by this barrier after the receipt of a given message. It might be possible that a number of messages are released before the barrier has ended its work (partial release) and this depends completely on the implementation of the barrier. However, once hasReceivedAllMessages() is deemed true, only one call to releaseAvailableMessages() shall yield results.

Specified by:
releaseAvailableMessages in class AbstractMessageBarrier