Hibernateのファウンダーとして知られるGavin King氏。現在はRed HatにてJBossフェローを務める

18日、レッドハット主催による開発者向けイベント「JBoss COMPASS Tokyo」が開催された。同イベントの目玉は、HibernateやSeamといった"超メジャー"フレームワークの創設者であるGavin King氏によるテクニカルセッションである。同氏は基調講演にも登壇し、自身がスペックリードを務める「JSR 299 Web Beans」の紹介を行った。本稿では基調講演で同氏が語った情報をもとに、Web Beansの概要やメリットを簡単に説明したい。

Web Beansとは、Gavin King氏が開発を主導するアプリケーションフレームワーク「JBoss Seam」から着想を得て、現在JCP内で標準化が進められている仕様だ。Java EEの次期メジャーバージョンである「Java EE 6」にも含まれることが予定されている。

Web Beansのコンセプトは、Java EE環境に「統合されたコンポーネントモデルを提供する」ことだ。ご存じの方も多いと思うが、現在のJava EE 5ではJSFにおけるManaged BeanやEJBにおけるステートレス/ステートフルセッションビーンなど、異なるコンポーネントモデルが別個に存在している。そのため、これらの仕様を組み合わせて使おうとすると、それぞれのコンポーネントモデルに準拠した形でクラスを複数作らねばならない、と言う問題がある。Web Beansを使うとこうした問題をスマートに解決できる。

具体的にはWeb Beansにおけるコンポーネントとは、「@Component」のようなアノテーションを付与されたクラスだ。こうしてWeb Beansコンポーネントとしてマークされたクラスは、EJBであろうとも通常のJava Beanであろうとも、同じくコンポーネントとして扱うことができる。Web Beansとは、こうした機能を持つコンテナの仕様である。

Web BeansはSeamやGuiceなど、他の多くのDIコンテナから着想を得ており、以下のように先進的な機能を提供する。

  • ステートフルで、コンテキストに応じた振る舞いを行うコンポーネントを、EJBやJava Beansと言った標準仕様を利用して作成可能
  • 拡張可能なコンテキスト
  • コンポーネントのルックアップとインジェクション、そしてEL内での利用
  • 対話 (Conversation) コンテキスト
  • ライフサイクルとメソッドのインターセプト
  • イベント通知モデル
  • 楽観的トランザクションのための永続コンテキスト管理
  • デプロイ時に行うコンポーネントのオーバーライドとコンフィグレーション
  • JSF、サーブレット、JPA、共通アノテーションとの統合