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


Seam の最もパワフルな機能として、その対話スコープや対話が生きている間 EntityManager をオープンにしておくという機能があります。 これによりエンティティの分離や再併合に関連する多くの問題が解消され、LazyInitializationException の発生を軽減できます。 Spring は単一の Web 要求 (OpenEntityManagerInViewFilter) のスコープを越えて永続コンテキストを管理する方法は提供していません。
Spring 開発者が Spring 提供の JPA ツールで Seam 管理永続コンテキストにアクセスできるようにすることで、Seam は対話スコープの永続コンテキストの機能を Spring アプリケーションにもたらしました (PersistenceAnnotationBeanPostProcessorJpaTemplate など)。
この統合により次のような機能を実現します。
  • Spring 提供のツールを使った Seam 管理永続コンテキストへの透過的なアクセス
  • Web 要求以外での Seam 対話スコープ永続コンテキストへのアクセス (非同期の Quartz ジョブなど)
  • Spring 管理トランザクションで Seam 管理永続コンテキストを使用する機能 (手作業による永続コンテキストのフラッシュが必要)
Spring の永続コンテキスト伝播モデルは EntityManagerFactory ごとに 1 つのオープン EntityManager しか可能でないため、 Seam 統合は EntityManagerFactory を Seam 管理永続コンテキストでラップすることで動作します。
<bean id="seamEntityManagerFactory" 
    class="org.jboss.seam.ioc.spring.SeamManagedEntityManagerFactoryBean"> 
  <property name="persistenceContextName" value="entityManager"/> 
</bean>
Copy to Clipboard Toggle word wrap
persistenceContextName は Seam 管理永続コンテキストコンポーネントの名前です。 デフォルトではこの EntityManagerFactory には Seam コンポーネント名と同等の unitName があります。この場合は entityManager です。 別の unitName を与えたい場合は次のようにして persistenceUnitName を与えることができます。
<bean id="seamEntityManagerFactory" 
    class="org.jboss.seam.ioc.spring.SeamManagedEntityManagerFactoryBean">
  <property name="persistenceContextName" value="entityManager"/>
  <property name="persistenceUnitName" value="bookingDatabase:extended"/>
</bean>
Copy to Clipboard Toggle word wrap
これでこの EntityManagerFactory をいずれの Spring 提供のツールでも使用することができます。この場合は、Spring の PersistenceAnnotationBeanPostProcessor を Spring で使用するのと同じように使用することができます。
<bean class="org.springframework.orm.jpa.support
             .PersistenceAnnotationBeanPostProcessor"/>
Copy to Clipboard Toggle word wrap
実際の EntityManagerFactory を Spring で定義するが Seam 管理永続コンテキストを使用したい場合は、 defaultPersistenceUnitName プロパティを指定してデフォルトで使用したい persistenctUnitNamePersistenceAnnotationBeanPostProcessor に指示することができます。
applicationContext.xml は次に似たようなものになります。
<bean id="entityManagerFactory" 
      class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
  <property name="persistenceUnitName" value="bookingDatabase"/>
</bean>
<bean id="seamEntityManagerFactory" 
    class="org.jboss.seam.ioc.spring.SeamManagedEntityManagerFactoryBean">
  <property name="persistenceContextName" value="entityManager"/>
  <property name="persistenceUnitName" value="bookingDatabase:extended"/>
</bean>
<bean class="org.springframework.orm.jpa
             .support.PersistenceAnnotationBeanPostProcessor">
  <property name="defaultPersistenceUnitName" 
            value="bookingDatabase:extended"/>
</bean>
Copy to Clipboard Toggle word wrap
component.xml は次に似たようなものになります。
<persistence:managed-persistence-context name="entityManager" 
    auto-create="true" entity-manager-factory="#{entityManagerFactory}"/>
Copy to Clipboard Toggle word wrap
JpaTemplate および JpaDaoSupport は Spring ベースの永続コンテキストと通常の Seam 管理永続コンテキストではまったく同じ構成になります。
<bean id="bookingService" 
      class="org.jboss.seam.example.spring.BookingService"> 
  <property name="entityManagerFactory" ref="seamEntityManagerFactory"/> 
</bean>
Copy to Clipboard Toggle word wrap
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2025 Red Hat