Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
Javaでも。
[go: Go Back, main page]

■Jakarta Commons Chain version1.0 - Filter

Filter とは

ということで、いきなりですが 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 に関する特徴をは次の通り。