Created: 2011-07-12 04:32
Updated: 2013-10-12 23:15
License: mit


Simple implementation of chain of responsibility design pattern using annotations


  • Annotations to mark classes as chains and methods as chain steps

  • Annotation to mark a method as a validator of chain step

  • Possibility to stop the chain when errors occur or a step is invalid (breakOnErrors, breakOnInvalid attributes)

  • Marking a method as Ensure, ensure method run when the chain breaks on errors


Defining the chain:

package my.package.chain;

public class MyChain {

    @ChainStep(order = 1, breakOnErrors = true)
    public void addOneToParameterOne(ChainContext context) {
	    Integer parameter1 = (Integer) context.get("myparameter1");

	    context.set("myparameter1", ++parameter1);

    @ChainStep(order = 2, breakOnInvalid = true)
    public void addPostfixToParameterTwo(ChainContext context) {
	    String parameter2 = (String) context.get("myparameter2");
	    String newString = parameter2 + "myPostfix";
	    context.set("myparameter2", newString);
	public boolean invalidMethodValidator(ChainContext context) {
		return true;

	public void ensure(ChainContext context) {
		context.set("ensure", "Ensure method run always on errors!");


Invoking the chain:

public void runMyChain() {
	ChainFactory factory = ChainFactory.instance();
	Chain chain = factory.create(MyChain.class);
	ChainContext context =
	chain.setParameter("myParameter1", 1)
		.setParameter("myParameter2", "myString")
	// Do something with the context...

To Do

  • Add todo tasks


Copyright (c) 2011 Jorge Luis PĂ©rez ( See LICENSE for details.

Cookies help us deliver our services. By using our services, you agree to our use of cookies Learn more