org.springframework.integration.aggregator
Class AbstractMessageBarrier

java.lang.Object
  extended by org.springframework.integration.aggregator.AbstractMessageBarrier
All Implemented Interfaces:
MessageBarrier
Direct Known Subclasses:
AggregationBarrier, ResequencingMessageBarrier

public abstract class AbstractMessageBarrier
extends java.lang.Object
implements MessageBarrier

Default implementation for a MessageBarrier.

Author:
Marius Bogoevici

Field Summary
private  boolean complete
           
private  java.util.concurrent.locks.ReentrantLock lock
           
private  org.apache.commons.logging.Log logger
           
protected  java.util.List<Message<?>> messages
           
private  long timestamp
           
 
Constructor Summary
AbstractMessageBarrier()
           
 
Method Summary
 java.util.List<Message<?>> addAndRelease(Message<?> message)
          Adds a message to the aggregation group and releases if available.
protected  void addMessage(Message<?> message)
           
 java.util.List<Message<?>> getMessages()
           
 long getTimestamp()
          Returns the creation time of this barrier as the number of milliseconds since January 1, 1970.
protected abstract  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  boolean isComplete()
           
protected abstract  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 java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

logger

private final org.apache.commons.logging.Log logger

messages

protected final java.util.List<Message<?>> messages

complete

private volatile boolean complete

lock

private final java.util.concurrent.locks.ReentrantLock lock

timestamp

private final long timestamp
Constructor Detail

AbstractMessageBarrier

public AbstractMessageBarrier()
Method Detail

getTimestamp

public long getTimestamp()
Returns the creation time of this barrier as the number of milliseconds since January 1, 1970.

Specified by:
getTimestamp in interface MessageBarrier
See Also:
System.currentTimeMillis()

isComplete

protected boolean isComplete()

addAndRelease

public java.util.List<Message<?>> addAndRelease(Message<?> message)
Adds a message to the aggregation group and releases if available. Otherwise, the return value will be null.

Specified by:
addAndRelease in interface MessageBarrier

addMessage

protected void addMessage(Message<?> message)

getMessages

public java.util.List<Message<?>> getMessages()
Specified by:
getMessages in interface MessageBarrier

hasReceivedAllMessages

protected abstract 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. all messages from a given sequence).


releaseAvailableMessages

protected abstract 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. 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.