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