[server-application:77] Re: WebWork

Masataka Kurihara kurihara @ seasar.org
2005年 11月 23日 (水) 14:42:36 JST


栗原です。

  別件社内圧力もあって、WEBミドルの設計をはじめました。
いいものができるかわからないし、本当に作るかもわかりませ
んし、ましてやGusukuに採用できるかという点でもどうか、で
す。。。結構面白いですけどね。
  作るのであれば、オープンソースソフトウェアとして作りたいと
思いますが、Seasarプロダクトにチャレンジするかは微妙。ファ
ウンデーションはS2JSFおよびTeedaでAll in One構想を推
進してますので。

  今は仮組みでcom.gluegent.ikushipe.*でやってます。今、
名づけました。ikushipe=イクシペ、はアイヌ語で「柱」つまりは
Strutsです(笑。本当に作ったうえ、いいものになってきたら
Gusukuに採用してもらえるよう、お見せします。そうしたら
ファウンデーション入りさせてもらって、沖縄名に改名します。

コンセプトはまだ荒削りですが。。。

public interface ActionPage<T extends PageModel> {
    @Target({ METHOD })
    public @interface BeforeRender { }
    @Target({ METHOD })
    public @interface Action { String value() default ""; }
    String getPageName();
    PageController getPageController();
    DIContainer getDIContainer();
    void setPageModel(T pageModel);
    T getPageModel();
}

というようなページのインターフェイスがあって、

@PageBinding("/index.html")
public abstract class IndexPage
        implements ActionPage<IndexModel> {
    @BeforeRender
    public void prepare() {
        IndexModel model = getPageModel();
        model.clearErrorMessages();
    }
    @Action("login")
    public void doLogin() {
        IndexModel model = getPageModel();
        PageController controller = getPageController();
        DIContainer container = getDIContainer();
        UserManager manager = container.getComponent(UserManager.class);   
        if(manager.login(model.getUserName(), model.getPassword())) {
            ActionPage page = controller.findActionPage("NextPage");
            controller.stackPage(page);
        } else {
            model.addErrorMessage("invalid username-password");
        }
    }
}

こういう抽象クラスを実装するとOKな感じ。未実装メソッドはJavassistもしくは
Antタスクでコードジェネレーションして自動に補わせようと考えています。
TapestryとStrutsとXWork、JSFからいろいろアイディアをパクってます。

-------------------------------------
特定非営利活動法人Seasarファウンデーション
代表理事 栗原 傑享(くりはら まさたか)
Mail: kurihara @ seasar.org
URL: http://www.seasar.org
-------------------------------------



server-application メーリングリストの案内