ということで、いきなりですが Filter とは何か。
Filter は Command の特殊なものです。
具体的に Filter と Command ではどこが違うのか。それは次の1点につきます。
postprocess(Context, Exception) メソッドの実行タイミングは次のようになっています。
つまり、
Filter1 → Filter2 → Filter3
という具合に Chain に Filter が登録されていた場合には
Filter1.execute → Filter2.execute → Filter3.execute → Filter3.postprocess → Filter2.postprocess → Filter1.postprocess
の順番で通常各メソッドが実行されるということです。
execute(Context) メソッド実行中に例外が発生した場合、postprocess(Context, Exception) メソッドの引数に発生した例外オブジェクトが渡されます。
postprocess(Context, Exception) メソッドは戻り値としてこの例外を処理したかどうかを boolean 値として返す。
例外を処理した(true を返した)場合、発生した例外は Chain の実行元にスローされない。
そうでない場合は呼び出し元に発生した例外がスローされる。
Filter を使ったサンプルということで単純にフィルターを呼び出していくだけのコードです。
postprocess(Context, Exception) メソッドの呼ばれる順番など確認できると思います。
・フィルターのクラス
package javademo.chain;
import org.apache.commons.chain.Context;
import org.apache.commons.chain.Filter;
public class Filter1 implements Filter {
    public boolean postprocess(Context arg0, Exception arg1) {
        System.out.println("Filter1 postprocess method");
        return false;
    }
    public boolean execute(Context arg0) throws Exception {
        System.out.println("Filter1 execute method.");
        return false;
    }
}
package javademo.chain;
import org.apache.commons.chain.Context;
import org.apache.commons.chain.Filter;
public class Filter2 implements Filter {
    public boolean postprocess(Context arg0, Exception arg1) {
        System.out.println("Filter2 postprocess method");
        return false;
    }
    public boolean execute(Context arg0) throws Exception {
        System.out.println("Filter2 execute method.");
        return false;
    }
}
・実行クラス
package javademo.chain;
import org.apache.commons.chain.Command;
import org.apache.commons.chain.impl.ChainBase;
import org.apache.commons.chain.impl.ContextBase;
public class Run {
    public static void main(String[] args) {
        ChainBase chain = new ChainBase();
        chain.addCommand(new Filter1());
        chain.addCommand(new Filter2());
        
        try {
            ContextBase context = new ContextBase();
            chain.execute(context);
        } catch (Exception e) {
            e.printStackTrace();
        }
        
    }
}
Filter に関する特徴をは次の通り。