トランザクション・サポートと Spring Framework

Spring Framework バージョン 2.5 以降の場合は、宣言トランザクション・モデルを使用するか、Spring Framework による AspectJ プログラミング拡張のサポートを使用するか、あるいはアノテーション・ベースのトランザクション・サポートを使用することができます。バージョン 2.5 よりも前の Spring Framework、および UOWManager インターフェースを提供していないアプリケーション・サーバー・バージョンの場合は、トランザクション属性の制限付きセットをサポートしている Spring Framework 構成を使用することができます。

宣言トランザクション・モデル

WebSphere® Application Server Version 6.0.2.19 以降およびバージョン 6.1.0.9 以降は、トランザクション制御の下でリソース更新を行うために、Spring Framework 宣言トランザクション・モデルをサポートしています。Spring Framework 2.5 の WebSphereUowTransactionManager クラスは、アプリケーション・サーバーの UOWManager のインターフェースを使用してトランザクション・コンテキストを管理します。トランザクション区分は UOWManager インターフェースによって管理されるため、リソース・プロバイダーにアクセスした場合は、常に適切なグローバル・トランザクションまたはローカル・トランザクション内包 (LTC) のコンテキストが使用されます。UOWManager インターフェースおよび Java™ Transaction API (JTA) サポートについて詳しくは、関連トピックを参照してください。

WebSphereUowTransactionManager クラスは、Spring Framework の以下のトランザクション属性をサポートしています。
  • PROPAGATION_REQUIRED
  • PROPAGATION_SUPPORTS
  • PROPAGATION_MANDATORY
  • PROPAGATION_REQUIRES_NEW
  • PROPAGATION_NOT_SUPPORTED
  • PROPAGATION_NEVER
WebSphere Application Server のトランザクション・サポートには、以下の宣言を使用します。
<bean id="transactionManager"
   class="org.springframework.transaction.jta.WebSphereUowTransactionManager"/>
前の宣言を参照する Spring Bean は、Spring Framework の依存関係注入を使用してトランザクション・サポートを使用できます。以下に例を示します。
<bean id="someBean" class="some.class">
   <property name="transactionManager" >
      <ref bean="transactionManager"/>
   </property>
...
	</bean>
<property name="transactionAttributes">
   <props>
      <prop key="*">PROPAGATION_REQUIRED</prop>
   </props>
</property>

AspectJ プログラミング拡張

Spring Framework による AspectJ プログラミング拡張のサポートを使用できます。 次のコード例では、以下のトランザクションの振る舞いを持つ <tx:advice/> エレメントが宣言されています。
  • get というストリングで始まるメソッドはすべて、トランザクション属性 PROPAGATION_REQUIRED を持っています。
  • set というストリングで始まるメソッドはすべて、トランザクション属性 PROPAGATION_REQUIRES_NEW を持っています。
  • その他のすべてのメソッドは、デフォルトのトランザクション設定を使用します。
以下に例を示します。
<tx:advice id="txAdvice" transaction-manager="transactionManager">
  <tx:attributes>
    <tx:method name="get*" propagation="REQUIRED" read-only="true" />
    <tx:method name="set*" propagation="REQUIRES_NEW" />
    <tx:method name="*" />
  </tx:attributes>
</tx:advice>
次に、ポイント・カットを宣言して、必要な操作に設定を適用することができます。これらの設定は、アプリケーションのさまざまなパーツに適用できます。次のコード例は、MyService クラスで定義されているすべての操作にこれらの設定を適用しています。
<aop:config>
  <aop:pointcut id="myServiceOperation"
                      expression="execution(* sample.service.MyService.*(..))"/>
  <aop:advisor advice-ref="txAdvice" pointcut-ref="myServiceOperation"/>
</aop:config>

アノテーション・レベルのトランザクション・サポート

アノテーション・ベースのトランザクション・サポートを使用するには、Java Platform, Standard Edition 5 (Java SE 5) 以降が必要です。したがって、このメソッドは、WebSphere Application Server バージョン 6.1 以降で使用することができます。

次の行を Spring.xml 構成に追加します。
<tx:annotation-driven/>
トランザクション属性を必要とするすべてのメソッドに、@Transactional アノテーションを使用してマークを付けます。以下に例を示します。
@Transactional(readOnly = true)
public String getUserName()
{ ...
}

@Transactional アノテーションを使用すると、パブリック・メソッドのみに注釈を付けることができます。

バージョン 2.5 よりも前の Spring Framework でのトランザクション・サポート

トランザクション属性の制限付きセットをサポートする Spring Framework 構成を使用できます。

WebSphereUowTransactionManager クラスを提供していない、バージョン 2.5 よりも前のバージョンの Spring Framework ではこのトランザクション・サポートの方法を使用できます。トランザクション・サポートのこの方法は、UOWManager インターフェースを提供していない、バージョン 6.0.2.19 およびバージョン 6.1.0.9 よりも前のバージョンの WebSphere Application Server にも使用できます。

この構成は、以下の Spring Framework のトランザクション属性をサポートしています。
  • PROPAGATION_REQUIRED
  • PROPAGATION_SUPPORTS
  • PROPAGATION_MANDATORY
  • PROPAGATION_NEVER
次の Spring Framework 構成を使用します。
<bean id="transactionManager" 
              class="org.springframework.transaction.jta.JtaTransactionManager">
  <property name="autodetectTransactionManager"value="false" />
	</bean>
この構成は、以下の Spring Framework のトランザクション属性をサポートしていません。
  • PROPAGATION_REQUIRES_NEW
  • PROPAGATION_NOT_SUPPORTED

WebSphere Application Server は、Spring Framework クラス org.springframework.transaction.jta.WebSphereTransactionManagerFactoryBean の使用をサポートしていません。


トピックのタイプを示すアイコン 概念トピック



タイム・スタンプ・アイコン 最終更新: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cspr_data_access_tran1
ファイル名:cspr_data_access_tran1.html