第26章 Spring Framework 統合


Spring Framework は Seam inversion-of-control (IoC) モジュールの一部です。 これにより Spring ベースのプロジェクトを Seam に移行しやすくなり、 Spring アプリケーションで Seam の主要な機能となる対話や高度な永続コンテキスト管理を利用できます。

注記

Spring 統合コードは jboss-seam-ioc ライブラリに含まれています。 これは本章に記載されているすべての Seam と Spring の統合技術に必要となる依存ライブラリです。
Spring に対し Seam は次のような機能を提供します。
  • Seam コンポーネントを Spring Bean にインジェクトする
  • Spring Bean を Seam コンポーネントにインジェクトする
  • Spring Bean を Seam コンポーネントに変換する
  • Spring Bean を Seam コンテキストに配置できるようにする
  • Seam コンポーネントで Spring WebApplicationContext を起動できるようにする
  • Seam ベースのアプリケーションで Spring PlatformTransactionManagement の使用をサポートする
  • Spring の OpenEntityManagerInViewFilter および OpenSessionInViewFilter の代替として Seam 管理の使用をサポートする
  • Spring TaskExecutors@Asynchronous 呼び出しの支援をサポートする

26.1. Seam コンポーネントを Spring Bean にインジェクトする

Seam コンポーネントのインスタンスを Spring Bean に <seam:instance/> 名前空間ハンドラを使用してインジェクトします。 Seam 名前空間ハンドラを有効にするには、 Seam 名前空間をまず Spring Bean の定義ファイルに追加しなければなりません。
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:seam="http://jboss.com/products/seam/spring-seam"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation=
         "http://www.springframework.org/schema/beans
          http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
          http://jboss.com/products/seam/spring-seam
          http://jboss.com/products/seam/spring-seam-2.2.xsd">
これで以下のように、いずれの Seam コンポーネントもあらゆる Spring Bean にインジェクト可能となりました。
<bean id="someSpringBean" class="SomeSpringBeanClass" scope="prototype">
  <property name="someProperty">
    <seam:instance name="someComponent"/>
  </property>
</bean>
コンポーネント名の代わりに EL 式を使用することができます。
<bean id="someSpringBean" class="SomeSpringBeanClass" scope="prototype">
  <property name="someProperty">
    <seam:instance name="#{someExpression}"/>
  </property>
</bean>
以下のようにして Spring Bean ID を使って Seam コンポーネントインスタンスを Spring Bean にインジェクトできます。
<seam:instance name="someComponent" id="someSeamComponentInstance"/>

<bean id="someSpringBean" class="SomeSpringBeanClass" scope="prototype">
  <property name="someProperty" ref="someSeamComponentInstance">
</bean>

ただし、 Spring は Seam と異なり複数のコンテキストではステートフルコンポーネントモデルに対応するようには設計されていませんでした。 Spring インジェクションはメソッド呼出し時には発生しませんが、 Spring Bean がインスタンス化された時に発生します。
Bean がインスタンス化されるときに使用可能なインスタンスは Bean の寿命全体に渡り使用されます。 Seam の対話スコープのコンポーネントインスタンスを直接シングルトンの Spring Bean にインジェクトするとします。 このシングルトンは対話が終了した後もしばらくの間同じインスタンスへの参照を保持します。これは スコープインピーダンス と呼ばれます。
呼び出しがシステムを流れるように Seam バイジェクションは自然にスコープインピーダンスを維持します。 Spring では Seam コンポーネントのプロキシをインジェクトし、そのプロキシが呼び出された場合に参照を解決しなければなりません。
<seam:instance/> タグで自動的に Seam コンポーネントをプロキシできます。
<seam:instance id="seamManagedEM" 
               name="someManagedEMComponent" 
               proxy="true"/>

<bean id="someSpringBean" class="SomeSpringBeanClass">
  <property name="entityManager" ref="seamManagedEM">
</bean>
上記の例では Spring Bean から Seam 管理永続コンテキストを使用する方法の例を示しています。 Spring OpenEntityManagerInView フィルタの代替として Seam 管理永続コンテキストを使用するためのより堅牢な方法については、「Spring での Seam 管理永続コンテキストの使用」 の項を参照してください。
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2026 Red Hat
トップに戻る