今年 Google Guice と SpringSource は,依存性注入(dependency injection)に使用するアノテーションの標準セット定義に関して共同作業を行うと発表し,その成果を JSR-330 として提案した。このアノテーションが JSR-299 の提案内容と一致していなかったことが論争を巻き起こしたが,JSR-330 アノテーションを JSR-299 に適用すること,2つの JSR をともに Java EE 6 に採用することにより,この問題も現在は解決されている。
2つの提案の不一致に関しては,当初から次のような意見や議論があった。
- Gavin King 氏: 意味的にも対象とする問題も 299 とまったく同じである第2のアノテーションセットを導入するのは,大きな誤りだと思う。
- Bob Lee 氏: 299は小規模なEEアプリケーションやちょっとした例題に対しては有効だが,その全体的な構成や分かりにくさから,我々が Google で扱っているような数百万規模の接続を扱うアプリケーションには不向きである。299 形式の構成を Guice 上でサポートするのは容易だが,299 では Guice のすべての動作を行うことはできない。我々には切り替えるべき理由がないのだ。個人的には,299は革新的なことを狙いすぎていて,ユーザコードのメンテナンス性の意味が十分理解できていないのではないかと思っている。
- Alex Miller 氏: "これ(JSR-330)は JSR299 の領域を侵しかねないものだ。"
- Antonio Goncalves 氏: "Java モジュール(JSR 277)とモジュラリティサポート(JSR 294)との間で行われたような,新たな戦いの幕開けでないことを願いたい。"
- Rickard Öberg 氏(アプローチ方法に賛同しない): どんな意味にも解釈できるゆえに何ら意味をなさない @Inject アノテーションのような総称的なものではなく,ターゲットとするオブジェクトのスコープを特定できるようなアノテーションを我々は選択する。
JSR-330 は JSR レビュー投票をパスしたが,投票者の多くはこの2つの仕様間の調和の必要性を強調している。
- Sun: この観点から 本 JSR と JSR-299 がそれぞれの成果の調整を図り,SEとEEプラットフォームに対して単一かつ一貫性・包括性のある依存性注入の標準が提供されるよう要求する。調整のための作業は公開レビュー以前に実施されるべきである。
- Red Hat: 当社は本提案をサポートするコミュニティの存在を認識しており,それゆえ専門家グループが公開ドラフトを作成するまで最終的な結論表明は差し控えたい。本 JSR と JSR-299 がある水準の一致点に到達することができるならば,依存性注入に関する真に可搬性のあるモデルを定義し得る JSR に対して,更なる賛意を示したいと思う。成果達成のため,Rea Hat は自らの役割を果たすことをここに約束する。
- Ericsson: 当社は Java SE に関する依存性注入標準化への努力を支持するが,Java SE と EE の一貫したソリューション実現のために,JSR 299 との調整の重要性を強く主張したい。
- IBM: IBM は,SEアプリケーションの依存性注入に関する仕様定義の必要性については同意する。しかし提案されている注入パターンは EE プラットフォームに関して定義済あるいは現在定義中のものと一致していない。SE/EEのインジェクション・プログラミング・モデルは,SE向けに機能のコアセットを定義し,EE機能を拡張部分とするような,拡張性のあるプログラミングモデルに統一されるべきである。このような調整なくしては,IBM としては JSR 299,300 ともに最終段階への移行を支持することはできない。
- Oracle: 本 JSR を支持するにあたり Oracle は,前述した提案内容の完全性に加えて,JSR299 との乖離を引き起こしかねない重大な状況に関しても大きな懸念を持っている。これはプラットフォームの分化という重大な問題に結びつくものだ。それゆえ当社は,本 JSR の公開レビューに先立って 本 JSR と JSR299 間の調整作業が実施されることを希望する。また当社は DI関連のアノテーションについて,JSR 250 のリビジョンあるいはメンテナンスリリースが適切な配布方法であると確信している。このような調整の努力が,すべてのニーズを満足する標準的な依存性注入の機構を提供する上で,SEとEEプラットフォームに渡る一貫性の実現という形で結実することを希望し,期待する。
2つの仕様間にあった矛盾はすでに解決されている。JSR-330 "Java の依存性注入"と JSR-299 "Java EE プラットフォームにおけるコンテキストと依存性注入"の調整作業が実施され,JSR-299 への JSR-330 アノテーション適用,ともに Java エンタープライズエディション6への採用が予定されている。現時点では,コミュニティからの反応も概ね良好のようだ(Matt Corey氏, Jeremy Norris氏, Jeremy Norris, Alex Miller 氏, Oliver Gierki 氏, Niklas Gustavsson 氏)。