第13章 Seam アプリケーションフレームワーク
Seam はアノテートされた純粋な Java クラスで簡単にアプリケーションを作成することができます。設定や拡張により再利用できる既成のコンポーネントのセットを提供することで一般的なプログラミングタスクをさらに簡単にできます。
Seam Application Framework では Web アプリケーションで基本的なデータベースアクセスを行う場合に Hibernate または JPA を使用することにより記述しなければならないコード量を少なくすることができます。 フレームワークには理解しやすく必要に応じ拡張しやすいシンプルなクラスの一部が含まれています。
13.1. はじめに リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Seam Application Framework が提供するコンポーネントは、2 つの方法いずれかで利用することができます。1 つ目の方法は、 他の Seam の組み込みコンポーネントと同様に、
components.xml でコンポーネントのインスタンスをインストールし、設定する方法です。 たとえば、 以下の components.xml 設定の一部では Person エンティティに対する基本的な CRUD 操作を実行する 1 コンポーネントをインストールします。
<framework:entity-home name="personHome" entity-class="eg.Person"
entity-manager="#{personDatabase}">
<framework:id>#{param.personId}</framework:id>
</framework:entity-home>
<framework:entity-home name="personHome" entity-class="eg.Person"
entity-manager="#{personDatabase}">
<framework:id>#{param.personId}</framework:id>
</framework:entity-home>
あまり XML に依存したくない場合は拡張により行うこともできます。
2 つ目の方法の主要な利点はフレームワークのクラスが機能拡張やカスタマイズ向けに設計されているという点であり、 これにより機能の追加や組み込み機能の無効化が容易になります。
もうひとつの利点として、 クラスとして EJB ステートフルセッション Bean (または 純粋の JavaBean コンポーネント) を使うオプションもあります。
@Stateful
@Name("personHome")
public class PersonHome extends EntityHome<Person>
implements LocalPersonHome { }
@Stateful
@Name("personHome")
public class PersonHome extends EntityHome<Person>
implements LocalPersonHome { }
クラスをステートレスセッション Bean にすることもできます。 この場合、 その名前が
entityManager であってもインジェクションを使って永続コンテキストを提供 しなければなりません。
現時点で、Seam Application Framework は CRUD 用に
EntityHome と HibernateEntityHome、またクエリ用にEntityQuery と HibernateEntityQuery の 4 つの主要な組み込みコンポーネントを提供しています。
Home と Query コンポーネントはセッションスコープ、イベントスコープ、または対話スコープで機能するように作成されています。 どのスコープを使用するかは、アプリケーションで使用する状態モデルによります。
Seam Application Framework は Seam 管理永続コンテキストでのみ動作します。 デフォルトでは、コンポーネントは
entityManager という名前の永続コンテキストを期待します。