JBoss Seamを触ってみて

Getting Started with JBoss Seamに従ってJBoss Seam 1.0 beta1ホテル予約サンプル(booking)を動かしてみました。リファレンス・マニュアルを読んだだけでは良くわからなかったのですが、サンプルのソースを実際に見てみるうちに何が言いたいのかが理解できてきました。

SeamとはJSFのバッキング・ビーンのような感じでEJB 3.0コンポーネントを使えるフレームワークです。ここでEJBコンポーネントの種類が生きます。アプリケーションはセッションの処理中のステートをStateful Session Beanで保持できます(ステートがなければStateless)。永続オブジェクトなら、もちろんEntity Beanの登場です。これらコンポーネントSeamに用意されたさまざまなスコープのコンテキスト(Context)上で管理されます。

複数のBeanとViewが連携する(ViewからBeanへの値の伝播 or BeanからViewへの反映)ためには、それらの間の参照関係を解決する必要が生じますが、このために@In, @OutというInjectionのアノテーションが導入されています。これをSeamではbijectionと呼んでいます。

@Inはコンテキストから属性値をBeanに設定するアノテーション。@OutはBeanの属性値をコンテキストへ反映させるためのアノテーションです。例えば、ユーザ登録Stateful SessionBeanの変数userにUser EntityBeanが@Inで自動的にInjectされるといった感じです。

SeamJBossサーバ以外の環境でも動作させることができます(Configuring Seamの図参照)。上ではEJB 3.0コンポーネントと書きましたがEJBですら必須ではなく、Transactionが必要ないのであれば、普通のJavaBeanとHibernateがあれば動くようです。