DI標準化戦争? on JSR

DIコンテナ共通のアノテーション仕様を新たなJSRとして提案している
Guice・Spring陣営、JSFEJB3を接続することに重点を置いた
仕様であるWebBeans(JSR299)を主導して策定中のJBoss陣営、両者の
関心のある領域が異なるので、一概に戦争とは呼べないのでは
ないかと思う。


Guice・Spring陣営はWebBeansがJSFEJB3を接続することに
重点を置いたDI機能のためのアノテーション仕様を内包しており、
そのアノテーション仕様がJSRのお墨付きをえてDIコンテナ共通の
アノテーション仕様であるかのように扱われかねない状況にある
ので、DIコンテナ共通のアノテーション仕様はWebBeansのような
特定の用途に特化した仕様のなかで規定するのではなく
DIコンテナ共通のアノテーション仕様単体で仕様化されるべきである
という判断で新たなJSRを提案したと思われる。


Gavin King氏の新たなJSRに対する「WebBeansで規定したアノテーション
被っている」という批判は的を射ていない。
Guice・Spring陣営は「WebBeansでDIコンテナ共通のアノテーション仕様
を規定するのは間違っている、DIコンテナ共通のアノテーション仕様は単体
の仕様として存在すべきである」という信念に基づいて新たなJSRを
提案しているため新たなJSRはWebBeansからDIコンテナ共通のアノテーション
仕様のみを抽出したような仕様となっている、WebBeansと被っていて当たり前。


(GuiceのファウンダであるBob Lee氏はWebBeansの仕様策定に参加しているので、
新たなJSRがWebBeansのアノテーション仕様に似ている事に何の不思議もない。)


議論すべきは「DIコンテナ共通のアノテーション仕様をWebBeans仕様内で規定
すべきか否か」である。穿った見方をすれば、Gavin King氏は新たなJSRに対して
見当違いの批判をすることで論点を曖昧にして(ずらして?)この議論を避けたい
のかもしれない。


落としどころとしては、DIコンテナ共通のアノテーション仕様を新たなJSRに
一本化して、WebBeansは新たなJSRで規定されていないJSFEJB3を接続すること
に特化したアノテーションを追加で規定、という方向に落ち着くのではない
だろうか?


新たなJSRの中でWebBeansを率いるJBossの案とGuice・Spring陣営の案を突き合わせ、
DIコンテナ共通のアノテーション仕様として何がベストなのかを議論し直せば良い。
新たなJSRの草案としてGuice・Spring陣営が提示いる仕様は叩き台として申し分ない
のではないかと思う。


[6/11 追記]
JSR 330 (Dependency Injection for Java) として JCP に受理されました。