2012年12月10日月曜日

CDIについて書こうとしたら、JSRを読み始めて、結果JSR330を実装してみようとしてみた件について

Advent Calendarをダブルブッキングしたミケです。

こっちはJavaEE Advent Calendarの方の記事になります。

昨日は@yamadamnさんの「WebLogic Server 12.1.1 on Mac OS X」でした。


Contexts and Dependency Injection (CDI/JSR-299)


今日はJavaEEのCDIの話をしようと思いましたが、

JavaEEとかよくわかってないんで、

いろいろと調べているうちに、

全然別のDependency Injection(JSR-330)の方向に進んでいってしまいました。

まあ、すこしは関係あるので、いいかな…


一応、JSR-299とJSR-330の簡単な関係を…


元々のJSR-299に対してgoogleのボブ・リーがこれじゃちょっとみたいな感じで

ロッド・ジョンソンとともに提案したのがJSR-330ですね。

で、JSR-299はJSR-330の上のレイヤーで動作するという感じになっています。

こちらを参考


tckを通してみよう


さて、CDIとDIを使ってなんか遊んでみようと思って、

Maven Repositoryを漁っていたら、

javax.injectのtckを発見しました。

ということで、急遽JSR-330を実装してみることにしました。

(終わってないけどね…)


プロジェクトの作成


恥ずかしながら僕はpom.xmlが書けないので、

build.gradleはこんな感じです。





tckの実行


最初、tckのソースも読まずにテストをやろうとして、

いろいろと粘っていましたが、

テストはこうやって書けよとtckのjavadoc

書いてありました。





Carというクラスはtckの中で書かれているインターフェースです。

で、tckにCarのインスタンスを渡せば、

テストしてくれるようです。


TDD?


テストを先に書いたので、org.mikeneck.inject.Injectorなんてのは存在しません。

だから、コンパイルが通るように適当に実装を書いています。





まあ、当然ですが、ヌルポです。




実装についての説明もtckに書いてあります


tckのjavadocを読むと、

Carクラスの実装はConvertibleクラスだそうです。

また、他にもインターフェースと実装の指定が書いてあり、

それらを参考にしながら実装することになるようです。


昨日からやり始めたことなんで、

まあ、ちょっとやそっとではできなそうですね。

適当に時間の合間を縫って実装してみたいと思います。

(かなり難しい気がする…)


なお、Google Code上にあるWikiによると、

tckを通った実装が、5つあるようです。



おしまい


なんかJavaEEとほとんど関係のない話になってしまいました。

すんません。


きっと、明日(2012/12/11)記事を書いてくださる@matsumanaさんが

話をいい方向に戻してくださると思います。

0 件のコメント:

コメントを投稿