実証実験

1年程前から作ろうと思って、作っていない WebFW (http://d.hatena.ne.jp/NetPenguin/20050309) についてですが、考えている方法で本当に実現可能なのかと思い、実験してみました。

実験用なので、動くだけのコードで手っ取り早く試しました。
下記のコードを、実際に動作させてみました。

package demo;
import java.io.Serializable;

public class DemoLogic implements Serializable {
    public void execute(FlowContext context) throws InterruptedException {
        System.out.println("1: フロー開始");
        int value = 1;

        System.out.println("2: クライアントに処理戻す");
        context.suspend("フロー開始直後(value: "+value+")"); // (1)
        System.out.println("3: 処理復帰");
        
        value *= 2;
        System.out.println("4: クライアントに処理戻す");
        context.suspend("フロー処理1実行後(value: "+value+")"); // (2)
        System.out.println("5: 処理復帰");
        
        value *= 2;
        System.out.println("6: クライアントに処理戻す");
        context.suspend("フロー処理2実行後(value: "+value+")"); // (3)
        System.out.println("7: 処理復帰");
        
        System.out.println("8: フロー終了");
    }
}

上記ロジックの、context.suspend メソッド呼び出し箇所で、ロジックの実行を一時停止し、ブラウザにレスポンスとして、context.suspend メソッドの引数に渡されたメッセージを含む画面を返しています。
ブラウザから再びリクエストが発生すると、一時停止していた context.suspend メソッドの直後から処理が再開します。

ブラウザから4回リクエストを送信したときの、それぞれの画面は以下のようになりました。

--- 一回目 ( (1) の箇所 ) ---
メッセージ: フロー開始直後(value: 1)
--- 二回目 ( (2) の箇所 ) ---
メッセージ: フロー処理1実行後(value: 2)
--- 三回目 ( (3) の箇所 ) ---
メッセージ: フロー処理2実行後(value: 4)
--- 四回目 ---
メッセージ: フロー処理完了

順次処理が行なわれて、リクエスト毎に異なる値が画面に表示されることを確認できました。
ロジックが完了した場合は、コントローラ側の処理で、完了メッセージが表示されるようにしています。そのため、四回目の画面は完了メッセージが表示されています。
また、ローカル変数である value の値が保持&更新されることも確認できています。

動くことは確認できたので、次の課題は下記かな・・・

View には Wicket か、JSF を使おうかと思っています。