Java・J2EE・オープンソース Spring入門 ~より良いWebアプリケーションの設計と実装
- 作者: 長谷川裕一,伊藤清人,岩永寿来,大野渉,(株)豆蔵
- 出版社/メーカー: 技術評論社
- 発売日: 2005/04/16
- メディア: 単行本
- 購入: 2人 クリック: 55回
- この商品を含むブログ (46件) を見る
第1章 Webアプリケーション概論
2006年頃に、あるシステムのアーキテクチャやフレームワークを設計する上で、この章を何度も読み返した記憶がある。結局Springは使わなかったのでそのまま積読状態になってしまったが、この章だけでも買った価値があると思っていた。
第2章 Springの導入
セットアップ
- Eclipse3
http://archive.eclipse.org/eclipse/downloads/drops/R-3.0-200406251208/index.php
古いよね。今のバージョンだと当たり前に使える機能が色々使えなくてびっくりした。
- tomcatPluginV3.zip
http://www.eclipsetotale.com/tomcatPlugin.html#A3
- DbUnit
http://sourceforge.net/projects/dbunit/files/
5章のサンプルで使っていたので入手した。
Spring IDE
SpringIDE-Sampleプロジェクトの作成手順が書いてないので補ってみた。
- Javaプロジェクトとして作成。srcとbinは分離する設定。
- ソースはダウンロードしたファイルをコピー。
- ライブラリはspring-framework-1.1の中から必要なものをコピー。
第3章 DIコンテナ
感想など
- サンプル少なっ。しかも構築手順も自分で妄想して補う必要あり。
- BeanFactoryとApplicationContextの違いは、ApplicationContextがBeanFactoryを拡張したもの。実際、インタフェースレベルで継承関係が存在する。よって、BeanFactoryを利用することはないのでは?最初からApplicationContextの紹介だけでよい気がする。
- いまいちわかり辛いので、ネットで調べてみたが、ネットの情報も分かりにくいものばかり。みんな、Springを広めたいと思っていないのか?Seasar見た後だと余計に不親切に見える。
その他の情報
- Spring Framework-TECHSCORE-
http://www.techscore.com/tech/Others/Spring/index.html
一番書いてあるほうかも。ただし、バージョンが特定されておらず、環境構築手順も載っていないのが残念。
- @IT:Spring Frameworkで理解するDI(1)
http://www.atmarkit.co.jp/fjava/rensai3/springdi01/springdi01_1.html
Sprin1系。概念中心。アーキテクチャとかフレームワーク論とか設計思想的な部分は厚め。具体的な使い方よりも導入するメリットについて書かれている。
- 今必要な人のための速習Spring Framework---目次 - 今必要な人のための速習 Spring Framework:ITpro
http://itpro.nikkeibp.co.jp/article/COLUMN/20070717/277593/
Spring2系。DIに関しては説明は少ないが、扱っているテーマは多いので、ひと通り眺めてみてもよさそう。ソースは実行環境を明記しており試せる。
- 付属のリファレンスは英語だが一番充実しているかも。
第4章 アスペクト指向プログラミング――AOP(Aspect Oriented Programming)
Introduction
- AOPの対象となるオブジェクトに任意のインタフェースを追加し合成させる機能。
- ProxyFactoryを利用する。
- 通常はProxyを利用するが、これにはインタフェースが必要になる。しかし、ValueObjectにインタフェースは過剰なため、CG-LIBによって動的にインタフェースを抽出する機能もある。これを利用することでインタフェースを作成しなくともProxyを利用できる。
第5章 DBアクセスとトランザクション管理
DAOの作成
- FindOwnerPetQueryとかUpdatePetUpdateにstaticをつけているのはなぜ?staticがなくても普通に動いた。JavaTutorialsに Static Nested Classes に関する記述はあったが、やはりよく分からない。http://java.sun.com/docs/books/tutorial/java/javaOO/nested.html
サンプルの実行
- dbunit-2.1.jarが必要。
http://sourceforge.net/projects/dbunit/files/ - HSQLDB1.7.1もダウンロードした。
http://sourceforge.net/projects/hsqldb/files/ - HSQLDBをin-memoryモードで実行しようとしたが、Dbunitでテーブルを作る方法が分からず断念。バージョンによってJDBCの接続文字列が異なるので注意。hsqlGuide.htmlで確認できる。
- 最終的にServerモードで起動して、DatabaseManagerからDDLを流した。手順はhsqlGuide.htmlに書いてある。
java -cp ../lib/hsqldb.jar org.hsqldb.Server -database mydb
-
- DatabaseManagerの起動
java -cp ../lib/hsqldb.jar org.hsqldb.util.DatabaseManager
-
- binにmydbのデータファイル等が出来る。
- demoのrunServer.batとrunManager.batの方が楽に出来てよいかも。
- 停止はDatabaseManagerからshutdownコマンドを発行すればよかったはず。Ctrl+Cでもいいけどね。
第6章 MVCフレームワーク
感想など
- コンポーネントやレイヤーの境界が明確化されているのはよいかな。ただし、実際問題として個々のレイヤーの利用技術を変更することってあるのだろうか?この柔軟性を実現するため、クラス数も増えるしわかり難くなっている気がする。
- リソース層については利用技術を変更する可能性はあるかも。OracleからDB2とか。SalesForceはメタデータを利用することでリソース層の抽象化に成功しているし、.NETのEntityFrameworkも概念モデルを利用することで抽象化している。なのでデータアクセス層のレイヤは明確化したほうがよいかも。
- プレゼンとビジネス層という観点では、Webサービスとかバッチでビジネス層を再利用することを考えると分離しておいた方が無難かな。
- 以上からレイヤー分けは重要だけど、利用技術を交換可能にすることはそこまで重要ではない気がする。まぁ、人によって使いたいものがことなるので広くサポートするに越したことはないだろうが、トレードオフとして複雑で巨大なものになってしまう。単一のフレームワークで全て交換可能にするのではなく、Seasarのようにレイヤー毎にフレームワークを用意して結合する方が複雑さを減らすことが出来るのだろうか。結局フルスタックで考えると似たようなものになるので、プロジェクトのテンプレートを生成するようなツール(Eclipseプラグイン)を提供する方が重要なのかな。
- 単純な遷移や検索/更新処理、Formの処理といった単位でControllerが提供されている。場合分けが規定されていて標準化しやすくてよいかも。慣れれば使いやすそう。