Seam3の概要
Seam3: CDI拡張モジュール
CDIでは、コンテキストによるインジェクションのためのアノテーションやAPIを提供していますが、それに加えてアプリケーションが新規のアノテーションや新規のコンテキストを追加するなど、CDI自身の機能を拡張するためのPortable Extension SPIを提供しています。
Portable Extensionを使うと、特定のJavaクラスのインスタンスをサーバー起動時にCDIコンテナに登録することや、インジェクションが起こるときに、それをトリガーにして何か処理をするようなことも可能です。Portable Extensionで作られた拡張モジュールはjarファイルとしてパッケージ化しますので、開発者がアプリケーションが必要なものだけを選択して使うことが可能です。
SeamFramework.orgプロジェクトでは、オープンソースでSeamフレームワークを開発しています。現在は、従来のSeam2と並行して、CDIの標準実装であるWeld、そして次期バージョンのSeam3を開発しています(Seamは「糸で紡いでつなぐ」という意味ですが、Weldは「金属を溶接してつなぎ合わせる」という意味になります)。Seam3は、CDI Portable Extensionを使ってJava EE APIをCDIベースで簡単に使えるように各種拡張ライブラリを提供します。
図2:Weld、CDI、Seam3の関係 |
現在開発中のSeamモジュール一覧とそのリリーススケジュールはこのページで確認できます。Seam3では、各モジュールは別々に管理され配布されるので、利用者は使いたいモジュールだけをアプリケーションに取り込むことができます。
CDI Portable Extensionは、Java EEの各種APIを横軸に横断した共通プラグインフレームワークととらえることも可能でしょう。そしてこの仕組みを使うことで、Java EEの上にさらに使いやすい機能群を構築できるようになります。今まで、必ずしもAPI間の連携がうまくいっていなかったJava EEですが、CDIの登場によって、より一層の開発生産性の向上が見込めます。それから、業務システムの基盤モジュールの様なものも、Portable Extensionで作ることで新規機能を開発することも可能です。このような拡張性は非常に魅力です。
Seam3のモジュールはJava EE 標準であるCDI上に作られているので、CDIの拡張モジュールは異なるアプリケーションサーバー上でも動作することが可能になります。新しいモジュールのアイデアがあれば、それをオープンソースとして公開することで、誰でも利用し、改善できるようになります。オープンソース開発による、使いやすく、カスタマイズできるJava EE環境の構築。これがSeamが目指している姿です。
次回は、実際にCDIの参照実装Weldのサンプルプログラムを動かしながらCDIの基本についてご紹介します。