かつのりの日記2

わんくまでは珍しいJavaを中心とした日記です

目次

Blog 利用状況

書庫

日記カテゴリ

いろいろリンク

Strutsのカスタム

最近思うのですが、Strutsのstruts-config.xmlを書くのは非常に馬鹿らしいと思います。そこで、極力設定ファイルを書かずに済む方法を考えるわけですが、ふと気づいたのが、StrutsのRequestProcessorのprocessMappingをオーバーライドすれば好きなように出来るんじゃ・・・?ってこと。

パスからアクションクラスをprocessMapping内で解決して動的に設定した結果を返してやれば、いくらでも設定ファイルなんて書かずに済むのでは・・・と思って試し中。

タイル定義も書かずに済む方法も見つけたので、スコープが2種類しかない点を除けばいくらでも寿命は延ばせそうな感じ。今時はPOJOフォームにPOJOアクションで設定ファイルレスが人気ですから。スコープのサポートだけはどうにかしたいところですね。

最近のスコープの流行を言うと、Application/Session/Requestだけじゃはっきりいって少ないです。他にもConversationスコープやリダイレクト間も有効なスコープなどが欲しいところ。Conversationスコープは、一覧・選択・更新などの一連のフロー内でのみ有効なスコープです。

投稿日時 : 2007年7月24日 1:25

Feedback

# re: Strutsのカスタム 2007/07/24 10:30 nagise

読んで爆笑してしまいましたw

しかしまぁ、標準的な使いかたしている限り、設定ファイルで特殊な記述がいらないとなれば、設定ファイルの存在意義を疑うのは正しい処方のように思えます。
フレームワークのセッティングなんて、アーキテクトレベルで固めてしまったら一般の開発者はいじることないわけですからね。
その時点で考えて「設定」する必要がなくなっていて、自動設定ですむんじゃないか、というのはなるほどと思わさせられます。

# re: Strutsのカスタム 2007/07/24 10:39 かつのり

実際設定ファイルを修正するたびに再起動って話がよくありますが、
Class#forNameでパスからクラスを探すように変更すれば、
いくらでも再起動なしでアクションの追加が可能です。

ルールを複数のプロパティで構成するのもありなんですが、
パスもモジュール名を元にアクションマッピングを返すハンドラのようなものがあれば、
簡単にコードでルール化できて楽なんですね。

# re: Strutsのカスタム 2007/07/24 10:52 nagise

ClassLoaderのあたりまで手を伸ばせば再起動なしでの機能追加や差し替えが可能になるのかな。

# re: Strutsのカスタム 2007/07/24 11:53 かつのり

多分いけますね。でもコレって地味に難しいのです。
DIとの連携した場合と連携しない場合で、
全く書くコードが違ってくるでしょう・・・

DIと連携しないのであれば、アクションクラス単位で
別々のクラスローダで読むようにすればOKなはず。

DIと連携するとアクションに対するインジェクションがきついかも。

# re: Strutsのカスタム 2007/07/24 13:12 nagise

あー。DIとは相性悪そうですね。

しかし、逆転の発想なのですが、DIってのがインスタンス生成後にsetterを使ってフィールドにオブジェクトを注入するわけですけども、
コンストラクタ引数を使って同じことをやる仕組みを作ったらどうなんでしょうか?
これだとClassLoaderでごにょごにょしたら処理できちゃうかも。

無茶は承知w

# re: Strutsのカスタム 2007/07/24 13:40 かつのり

コンストラクタでもあまり変わらないですねw
DIコンテナに直接アクションを管理させないで、
Struts側からDIコンテナのAPI経由で
アクションにインジェクションするのがいいのかな。

POJOアクションとかやるなら、わざわざアクションクラスを
シングルトンにする必要もないので、DIに管理させない方式なら
好き勝手にできそうですね。

# re: Strutsのカスタム 2007/07/24 15:12 nagise

あー。勘違いしていました。ClassLoaderではコンストラクタ云々は手が出せないのか。
やるとしたら、アスペクトを利用して、ClassLoaderが返すClassクラスの挙動をいじってやればDIするClassLoaderが作れるのか。
バイトコードをハックしないといけないんで厳しいところだなぁ。

# re: Strutsのカスタム 2007/07/24 15:14 nagise

ん?DIとアスペクトってもしかして近しい概念なのか?
インスタンス生成へのアスペクトがDI?

# re: Strutsのカスタム 2007/07/24 15:27 かつのり

DIとアスペクトは近いというより相性がいいってところですね。

DIと連動させるなら、比較的ゆるい結合でいいかなと思うのですが、
Strutsのリクエストプロセッサーで、
アクションのインスタンスを取得する部分を拡張して、
そこでDIさせるだけかな。
そのときに、アクションごとにクラスローダを変えて、
ロードしなおせば大丈夫だと思いますよ。
で、そのときにDIし直す感じ。

それだと、DIする部分だけ抽象化しておけば、
SpringでもSeasar2でもGuiceでも何でも対応できそう。

# re: Strutsのカスタム 2007/07/24 15:49 nagise

ふむふむ。今回の話題ではそういう実装でいけそうな感じですね。

個人的にはCClassLoaderの拡張でDIって路線をちょっと突っ込んで見たいと思います。用途は後から考えるw

タイトル
名前
Url
コメント