アットウィキロゴ

top

はじめに

Webアプリケーション構築についての備忘録です。 Struts1.x + AspectJ + iBatisを使用します。

今さら「Strtus1.x」感はあるかと思いますが。 本当は、SAStrtusを採用したかったのですが、SAStrutsほど高機能でなくてもよいかなと思いました。

とにかく、フレームワーク(制御の逆転パターン)はStruts1.xだけにして、その他は、クラスライブラリで実装できれば思っています。 (aspectJは、クロージャーと思い込んでます。DIコンテナより理解しやすいかなと。) フレームワークは難しいです。

Struts1.x

これまでに経験したWebフレームワークは次です。

・ASP.NET WebForm
・Teeda(少しだけ)
・MyFaces(少しだけ)
・Struts1.xベース独自フレームワーク(重量級)

どれも高機能なフレームワークだと思いますが、 高機能なWebページを作るための道具ではないかな、と感じていたます。 WebForm GridViewの生成するHTMLを予想して、javascriptを書くのはもうこりごりです。 このごろリリースされた「ASP.NET MVC」でも、Webページを作成するには、

・HTTPプロトコルの理解。
・HTMLの理解。

とうたっていたと思います。

上記を理解するなら、フレームワークはそれをサポートするだけで十分ではないかな、と思います。Ajax通信なんかもStruts1.xで十分です。 ASP.NET MVCが最強かもしれませんが、やっぱり、慣れ親しんだStrtus1.xが・・・ Struts1.xというよりも、BeanUtils#populateが理解しやすいかと思います。 気合入れてstrtus-config.xmlを書きます!(これは書きたくない。。)

iBatis

プロジェクトの成功のカギは「SQLの数」だと思います。 「SQLの数」が少なければ、品質のよいアプリが作成できるのではないでしょうか。 SQLは集合を操作します。集合をテストするのは手間がかかります。 SQLが多いと、テスト工数が膨大になります(テストしないと品質が低下します) 画面のイベント単位でSQLが発行されると、テスト工数は爆発します。

その解決策が(シンプル)O/Rマッピングです(ER図をbeanにマップするもの) ユースケースに関連するテーブルデータすべてをbeanとして取得します。 しかし、O/Rマッピングのほとんどが、lazy load方式だと思います。lazy loadはまた難しい。。 そこでiBatisです。lazy load以外でO/Rマッピングを実現します(他ツールも可能と思いますが) iBatisは、ユースケースに関連するテーブルデータをすべて結合して1SQLで取得します。 (絞り込み条件は可変長にして自由に取得します。oder byも指定可能に) 取得したデータは重複項目があるのでDISTINCTします(iBatisがbeanに詰める際に!!) hibernateは難しかったですが、iBatisなら扱えそうです。

AspectJ

DBを操作するので、トランザクション処理が必要です。「分散トランザクション」ではありませんが、コネクションの引き回しが不要だと助かります。 AspectJで、トランザクションの開始、コミット、ロールバックを差込ます。 また、トランザクション開始の際、すでにトランザクションが開始されている場合は、それを引き継ぐこととしてます(TransactionOption.Required) これだけの機能であれば、DIコンテナも不要かなと思います。

あとは、アクションの開始と終了にも処理を差込みます。 例えば、log4jのNDCにユーザ識別子をセットします。 ログの出力は、このユーザ識別子も出力することとします。 また、DBの共通フッター(登録ユーザーID、更新ユーザーID)もユーザ識別子をセットします(・・・セットしたいです)

最後に

システム全体を考えると、ASP.NET MVCが安価かと思います。 ActiveDirectryと連携した「プロトコルトランジション」による、統合されたシステム構築が可能です。 「プロトコルトランジション」については、tomcatとActiveDirectryを連携させ、かつ、SQLServer用JDBCドライバを用い Keroberos認証を行えば実現できるかもしれません。 シンプルなStruts1.xで高機能なWebアプリケーションが作成できればと思います。

※
Struts1.x、iBatis - apache foundation、AspectJ - Eclipse Foundationと完全オープンソースなプロダクトです。
企業への導入も安心です。3年目以降からサポート料発生なんてことはありません。
(sun javaは問題ですが・・ openJDKに期待です!)
最終更新:2010年02月13日 00:05