WebBeansからCDI、そしてSeam 3へ

まず、用語の説明をちょっと。

 JSR-299: CDI (Contexts and Dependency Injection 1.0)
 Weld:    CDI 参照実装
 Seamn 3: CDI上に構築されるパッケージ集

従来のWeb Beansは仕様書としてはCDIへ、参照実装としてはWeldに改名になりました(Weld 1.0.0はリリース済み)。

Seam 3はCDI実装上で動作するパッケージ集として開発が進められています。このパッケージはCDIで定義されたPortable ExtensionsというCDIの機能を拡張するための仕様の上に作られるので、任意のCDI上で動作するはずです。CDIフレームワークを統合するための仕様で、Portable Extensionsは外部フレームワークとの統合コードを実現するための標準的なプラグイン仕様という訳です。

Seam 2までは、新しいフレームワークを統合するたびにSeam実装が肥大化していきました。Seam 3ではコアがCDIとして標準化され、その上の統合ライブラリはCDI Portable Extensionsという標準のプラグインモジュールとしてコアからは分離されました。今後はこれらのプラグインモジュールの着脱や用途に応じたスリム化は従来よりも格段に容易になるでしょう。

このようなSeam 3のアーキテクチャが意味することは、Seamを拡張することが従来よりも簡単になるということです。自社フレームワークSeamフレームワークで統合したいと思っても、アノテーションを追加するなどのSeamの拡張ではありませんでした。素晴らしいのは、こうして作った自社拡張モジュールがCDIという標準の上で移植性を保ったまま開発することができるということです。