Interface Chain
-
- All Superinterfaces:
Command
- All Known Implementing Classes:
ChainBase
public interface Chain extends Command
A
Chainrepresents a configured list ofCommands that will be executed in order to perform processing on a specifiedContext. Each includedCommandwill be executed in turn, until either one of them returnstrue, one of the executedCommands throws an exception, or the end of the chain has been reached. TheChainitself will return the return value of the lastCommandthat was executed (if no exception was thrown), or rethrow the thrown exception.Note that
ChainextendsCommand, so that the two can be used interchangeably when aCommandis 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
Chainshould generally be created by extending the provided base classChainBase) rather than directly implementing this interface.Chainimplementations should be designed in a thread-safe manner, suitable for execution on multiple threads simultaneously. In general, this implies that the state information identifying whichCommandis currently being executed should be maintained in a local variable inside theexecute()method, rather than in an instance variable. TheCommands in aChainmay be configured (via calls toaddCommand()) at any time before theexecute()method of theChainis first called. After that, the configuration of theChainis 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
All Methods Instance Methods Abstract Methods Modifier and Type Method Description voidaddCommand(Command command)booleanexecute(Context context)Execute the processing represented by thisChainaccording to the following algorithm.
-
-
-
Method Detail
-
addCommand
void addCommand(Command command)
-
execute
boolean execute(Context context) throws java.lang.Exception
Execute the processing represented by this
Chainaccording to the following algorithm.- If there are no configured
Commands in theChain, returnfalse. - Call the
execute()method of eachCommandconfigured on this chain, in the order they were added via calls to theaddCommand()method, until the end of the configuredCommands is encountered, or until one of the executedCommands returnstrueor throws an exception. - Walk backwards through the
Commands whoseexecute()methods, starting with the last one that was executed. If thisCommandinstance is also aFilter, call itspostprocess()method, discarding any exception that is thrown. - If the last
Commandwhoseexecute()method was called threw an exception, rethrow that exception. - Otherwise, return the value returned by the
execute()method of the lastCommandthat was executed. This will betrueif the lastCommandindicated that processing of thisContexthas been completed, orfalseif none of the calledCommands returnedtrue.
- Specified by:
executein interfaceCommand- Parameters:
context- TheContextto be processed by thisChain- Returns:
trueif the processing of thisContexthas been completed, orfalseif the processing of thisContextshould be delegated to a subsequentCommandin an enclosingChain- Throws:
java.lang.Exception- if thrown by one of theCommands in thisChainbut not handled by apostprocess()method of aFilterjava.lang.IllegalArgumentException- ifcontextisnull
- If there are no configured
-
-