A commons-chains clone with steroids
We use apache commons-chains project in a platform at Bemobi and at some point it become a pain to maintain a catalog with hundreds of lines. Here comes main idea behind the chainable project, to improve configurability, maintenability, to be less verbose, to ease the integration between our chains codebase with Spring and give a few tweaks.
Excerpt from apache commons-chains project page:
A popular technique for organizing the execution of complex processing flows is the "Chain of Responsibility" pattern, as described (among many other places) in the classic "Gang of Four" design patterns book. Although the fundamental API contracts required to implement this design patten are extremely simple, it is useful to have a base API that >facilitates using the pattern, and (more importantly) encouraging composition of command implementations >from multiple diverse sources.
In this scenario we have stateless commands executing logic and modifying the state of a context which will be shared along the chain.
A common pattern is to have warm-up and clean up code to be executed before and afterwards the execution of a chain, so we have a special type of command called Filter which implements the Pipelines and filters where at the beginning and end of any chain we are given the chance to execute some computation needed.
An in memory store is bundled - with a size of (Commands * k) where k is the revisions to be kept in memory - as optional. The RevisionGenerator is responsible to maintain snapshots -or diffs- of context changes. It eases the time to undo some command executed earlier on using the Memento Pattern.
You can find more about the components and the inner working of the chainable on the WIKI