10.3. Seam 管理永続コンテキスト


Seam を Java EE 5 環境外で使用している場合、 コンテナによる永続コンテキストのライフサイクルの管理は期待できません。EE 5 環境であっても、複雑なアプリケーションの疎結合コンポーネント間で永続コンテキストを伝播することは容易ではなく、エラーが発生しやすいことがあります。
この場合、 コンポーネントで 管理永続コンテキスト (JPA 用) または 管理セッション (Hibernate 用) のいずれかを使用する必要があります。 Seam 管理永続コンテキストは単に対話コンテキストの EntityManager または Session のインスタンスを管理する組み込みの Seam コンポーネントです。 @In でインジェクトすることができます。
Seam 管理永続コンテキストはクラスタ環境で非常に効率的です。Seam は EJB3 の仕様ではできないコンテナ管理永続コンテキストの最適化を実行することができます。 ノード間の永続コンテキストの状態を複製することなく拡張永続コンテキストの透過的なフェールオーバーをサポートします (この点については、EJB 仕様の次回のリビジョンで修正したいと考えています)。

10.3.1. JPA での Seam 管理永続コンテキストの使用

管理永続コンテキストの設定は簡単です。 components.xml 内に次のように記述します。
<persistence:managed-persistence-context name="bookingDatabase" 
   auto-create="true" 
   persistence-unit-jndi-name="java:/EntityManagerFactories/bookingData"/>
Copy to Clipboard Toggle word wrap
この設定により対話スコープの bookingDatabase という名前の Seam コンポーネントが作成され、 JNDI 名 java:/EntityManagerFactories/bookingData を持つ永続ユニット (EntityManagerFactory インスタンス) の EntityManager インスタンスの寿命を管理します。
EntityManagerFactory を JNDI にバインドする必要があります。これを行うには JBoss では、 次のプロパティ設定を persistence.xml に追加します。
<property name="jboss.entity.manager.factory.jndi.name" 
          value="java:/EntityManagerFactories/bookingData"/>
Copy to Clipboard Toggle word wrap
これで以下のように EntityManager をインジェクトできます。
@In EntityManager bookingDatabase;
Copy to Clipboard Toggle word wrap
EJB 3 を使用していてクラスまたはメソッドに @TransactionAttribute(REQUIRES_NEW) をマークすると、トランザクションと永続コンテキストはこのオブジェクトでのメソッド呼び出しには伝播されないはずです。 ただし、 Seam 管理永続コンテキストは対話内のいずれのコンポーネントにも伝播されるため REQUIRES_NEW とマークされたメソッドに伝播されます。 したがって、 メソッドに REQUIRES_NEW をマークする場合は @PersistenceContext を使ってエンティティマネージャにアクセスしてください。
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat