[nanocontainer] nanocontainerってどんなもの?

気になる…。しらべよう。

http://docs.codehaus.org/display/NANO/NanoContainer+NanoWeb
ここのページの下のほうにCVSからとってきて自分でビルドしろって書いてある。
CVSでソースを取得した後にbuildするにはMavenをつかわなければいけない。Mave初めてつかったけどすごいなこれ。得たいの知れないjarファイルをたくさんダウンロードしてくれた。Mavenを実行してから終わるまで10分くらいかかった。

http://www.picocontainer.org/Source+Repositories 
CVS Repositories。ここに書いてあるコマンドをコピペしてコマンドプロンプトにはりつけたらソースがダウンロードできた。CVSって使い方わからなくてもダウンロードぐらいはできるのね。

http://nanocontainer.codehaus.org/download.html
このページからはダウンロードできなかった。

mavenを実行したらsample-nanowebというフォルダ以下にnanocontainer-sample-nanoweb.warが出来た模様。なんか種類多すぎてどれを見たらいいのかわからないけど、sampleとつくのはこれともうひとつsample-webworkというフォルダだけなので「nano」とつくしnanocontainer-sample-nanoweb.warを動かせということだとおもう。

asm-util-1.4.1.jarがなくて動かないのでWEB-INF/libに追加。
groovyがgroovy-1.0-beta-4.jarでがコンソールに表示されるのでbeta-5に変更。

サンプルを動かすためのurlがわからなくって困ったけどテストケースのプログラムに書いてあった。
http://localhost:8080/nanosample/game/play.nanoとしてやっと動いた。(コンテキストルートはあまりに長いので変更)。http://localhost:8080/nanosample/game/play.groovyでもいい。

なんかややこしいのだけどplay.groovyというファイルがあるわけではない。game.groovyにGameクラスが定義されていてそのGameクラスはpalyメソッドをもつ。このurlはGameクラスのplayメソッドを呼び出している。

ModelがGroovyで、ViewがVelocityで、ControllerがServlet + NanoContainer(PicoContainer)?多分そんな感じ。ContainerがGameクラスに依存を注入するのだけどその注入物はJavaで定義したクラス。なにを注入するかの定義はweb.xmlスクリプトで書いてある。

流れとしてはふつうにサーブレット。Clientからのリクエスト → Controller → ContainerによるModelの生成と依存の注入 → Modelの実行 → Viewの決定 → ControllerによるViewのDispatch → Clientへのレスポンス。

思ったことなど

  • コンポーネント(依存を注入される側)をあらかじめコンテナに登録しておく必要がない。
  • どのコンポーネントになにを注入するのかをどうやって決定しているかはもっと調べないとわからん。
  • 注入物となるものはインタフェースをもってたほうがいいが、注入される側は型を持っている必要がないのかーとおもった。JavaとGroovyの適材適所。
  • GroovletでViewをやるのはおろかか?見にくいし。
  • Velocityってはじめてさわった。velocity-tools-view-1.0.jarっていうのは普通のvelocityとどう違うのか?
  • スクリプトにはGroovy以外にもいろいろつかえる。けど1つ覚えれば十分だよね。もうこれ以上はいっぱいいっぱい。