org.apache.commons.chain
Interface Chain

All Superinterfaces:
Command
All Known Implementing Classes:
ChainBase

public interface Chain
extends Command

A Chain represents a configured list of Commands that will be executed in order to perform processing on a specified Context. Each included Command will be executed in turn, until either one of them returns true, one of the executed Commands throws an exception, or the end of the chain has been reached. The Chain itself will return the return value of the last Command that was executed (if no exception was thrown), or rethrow the thrown exception.

Note that Chain extends Command, so that the two can be used interchangeably when a Command is expected. This makes it easy to assemble workflows in a hierarchical manner by combining subchains into an overall processing chain.

To protect applications from evolution of this interface, specialized implementations of Chain should generally be created by extending the provided base class ChainBase) rather than directly implementing this interface.

Chain implementations should be designed in a thread-safe manner, suitable for execution on multiple threads simultaneously. In general, this implies that the state information identifying which Command is currently being executed should be maintained in a local variable inside the execute() method, rather than in an instance variable. The Commands in a Chain may be configured (via calls to addCommand()) at any time before the execute() method of the Chain is first called. After that, the configuration of the Chain is frozen.

Version:
$Revision: 480477 $ $Date: 2006-11-29 08:34:52 +0000 (Wed, 29 Nov 2006) $
Author:
Craig R. McClanahan

Field Summary
 
Fields inherited from interface org.apache.commons.chain.Command
CONTINUE_PROCESSING, PROCESSING_COMPLETE
 
Method Summary
 void addCommand(Command command)
          Add a Command to the list of Commands that will be called in turn when this Chain's execute() method is called.
 boolean execute(Context context)
          Execute the processing represented by this Chain according to the following algorithm.
 

Method Detail

addCommand

void addCommand(Command command)

Add a Command to the list of Commands that will be called in turn when this Chain's execute() method is called. Once execute() has been called at least once, it is no longer possible to add additional Commands; instead, an exception will be thrown.

Parameters:
command - The Command to be added
Throws:
IllegalArgumentException - if command is null
IllegalStateException - if this Chain has already been executed at least once, so no further configuration is allowed

execute

boolean execute(Context context)
                throws Exception

Execute the processing represented by this Chain according to the following algorithm.

Specified by:
execute in interface Command
Parameters:
context - The Context to be processed by this Chain
Returns:
true if the processing of this Context has been completed, or false if the processing of this Context should be delegated to a subsequent Command in an enclosing Chain
Throws:
Exception - if thrown by one of the Commands in this Chain but not handled by a postprocess() method of a Filter
IllegalArgumentException - if context is null


Copyright 2003-2008 The Apache Software Foundation. All Rights Reserved.