Support de transactions et Spring Framework

Pour Spring Framework version 2.5 et les versions suivantes, vous pouvez utiliser le modèle de transaction déclarative, la prise en charge de Spring Framework pour l'extension de programmation AspectJ ou le support des transactions basé sur les annotations. Pour les versions de Spring Framework antérieures à la version 2.5 et pour les versions du serveur d'applications qui n'ont pas l'interface UOWManager, vous pouvez utiliser une configuration de Spring Framework qui prend en charge une sélection limitée d'attributs de transaction.

Modèle de transaction déclarative

WebSphere® Application Server version 6.0.2.19 ou ultérieure et version 6.1.0.9 ou ultérieure prennent en charge le modèle de transaction déclarative Spring Framework pour piloter les mises à jour de ressources sous contrôle transactionnel. La classe WebSphereUowTransactionManager de Spring Framework 2.5 utilise l'interface UOWManager dans le serveur d'applications pour gérer le contexte des transactions. Dans la mesure où la démarcation des transactions est gérée via l'interface UOWManager, un contexte de conteneur de transaction locale (LTC) ou de transaction globale approprié est toujours disponible quand un fournisseur de ressources est contacté. Pour plus d'informations sur l'interface UOWManager et la prise en charge de l'API JTA (Java™ Transaction API), voir la rubrique connexe.

La classe WebSphereUowTransactionManager prend en charge les attributs de transaction Spring Framework suivants :
  • PROPAGATION_REQUIRED
  • PROPAGATION_SUPPORTS
  • PROPAGATION_MANDATORY
  • PROPAGATION_REQUIRES_NEW
  • PROPAGATION_NOT_SUPPORTED
  • PROPAGATION_NEVER
Utilisez la déclaration suivante pour la prise en charge des transactions WebSphere Application Server :
<bean id="transactionManager"
   class="org.springframework.transaction.jta.WebSphereUowTransactionManager"/>
Un bean Spring qui référence la déclaration précédente peut alors utiliser l'injection de dépendance Spring Framework pour utiliser le support des transactions. Par exemple :
<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>

Extension de programmation AspectJ

Vous pouvez utiliser la prise en charge de Spring Framework pour l'extension de programmation AspectJ. L'exemple de code suivant déclare un élément < tx:advice/> avec le comportement transactionnel suivant:
  • Toutes les méthodes commençant par la chaîne get ont l'attribut de transaction PROPAGATION_REQUIRED.
  • Toutes les méthodes commençant par la chaîne set ont l'attribut de transaction PROPAGATION_REQUIRES_NEW.
  • Toutes les autres méthodes utilisent les paramètres de transaction par défaut.
Par exemple :
<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>
Ensuite, vous appliquez les paramètres à l'opération demandée en déclarant un point de coupure. Vous pouvez appliquer ces paramètres à différentes parties de l'application. L'exemple de code suivant applique les paramètres à toutes les opérations définies dans la classe MyService.
<aop:config>
  <aop:pointcut id="myServiceOperation" 
                      expression="execution(* sample.service.MyService.*(..))"/>
  <aop:advisor advice-ref="txAdvice" pointcut-ref="myServiceOperation"/>
</aop:config>

Support de transactions basé sur les annotations

Pour utiliser la prise en charge des transactions basées sur les annotations, vous avez besoin de Java Platform, Standard Edition 5 (Java SE 5) ou version ultérieure. Par conséquent, vous pouvez utiliser cette méthode avec WebSphere Application Server version 6.1 ou ultérieure.

Ajoutez la ligne suivante au fichier de configuration Spring.xml :
<tx:annotation-driven/>
Marquez toutes les méthodes qui demandent les attributs transactionnels avec l'annotation @Transactional, par exemple :
@Transactional(readOnly = true)
public String getUserName()
{ ...
}

Vous pouvez utiliser l'annotation @Transactional pour annoter les méthodes publiques uniquement :

Support des transactions avec les versions de Spring Framework antérieures à la version 2.5

Vous pouvez utiliser une configuration de Spring Framework qui prend en charge une sélection limitée d'attributs de transaction.

Vous pouvez utiliser cette méthode de support des transactions avec les versions de Spring Framework antérieures à la version 2.5 qui ne possèdent pas la classe WebSphereUowTransactionManager. Vous pouvez également utiliser cette méthode de prise en charge des transactions avec des versions de WebSphere Application Server antérieures à la version 6.0.2.19 et à la version 6.1.0.9 qui ne fournissent pas l'interface UOWManager.

La configuration prend en charge les attributs de transaction Spring Framework suivants :
  • PROPAGATION_REQUIRED
  • PROPAGATION_SUPPORTS
  • PROPAGATION_MANDATORY
  • PROPAGATION_NEVER
Utilisez la configuration Spring Framework suivante :
<bean id="transactionManager" 
              class="org.springframework.transaction.jta.JtaTransactionManager">
  <property name="autodetectTransactionManager"value="false" />
</bean>
La configuration ne prend pas en charge les attributs de transaction Spring Framework suivants :
  • PROPAGATION_REQUIRES_NEW
  • PROPAGATION_NOT_SUPPORTED

WebSphere Application Server ne prend pas en charge l'utilisation de la classe Spring Framework org.springframework.transaction.jta.WebSphereTransactionManagerFactoryBean.