Projets
Pages enfant
  • 3.3.2 Le fonctionnement

Comparaison des versions

Légende

  • Ces lignes ont été ajoutées. Ce mot a été ajouté.
  • Ces lignes ont été supprimées. Ce mot a été supprimé.
  • La mise en forme a été modifiée.

...

C'est la raison pour laquelle esup-commons V2 utilise une technologie radicalement différente qui est l'utilisation de AOP (aspect-oriented programming via Spring AOP) pour gérer les connexions aux bases de données et les transactions.

Déclaration AOP

...

La gestion des transactions se fait au niveau des appels métier (fichier resources/properties/domain/domain.xml). Exemple :

Bloc de code

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
<aop:config>
<aop:pointcut id="domainMethods"
expression="execution(* org.esupportail.*.domain.DomainServiceImpl.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="domainMethods" />
</aop:config>
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="*" propagation="SUPPORTS" read-only="true"/>
</tx:attributes>
</tx:advice>
<bean id="domainService" class="org.esupportail.example.domain.DomainServiceImpl">
<property name="daoService" ref="daoService" />
</bean>

Explications :
La racine <beans> contient la définition des espaces de nom aop: et tx: ainsi que la localisation des schémas XSD ad hoc qui sont utilisés dans la suite du fichier.
La balise <aop:config> permet de préciser deux choses :
Le point de coupe (pointcut). C'est-à-dire l'emplacement où va être inséré dynamiquement le code AOP. L'attribut expression permet de préciser que l'on va cibler toutes les méthodes, quelle qu'en soit la signature, de la classe DomainServiceImpl dans un package donc le path commence par org.esupportail et fini par domain.
La référence au gestionnaire de transactions à brancher sur ce point de coupe.
La balise <tx:advice> permet de préciser la nature de la transaction. Ici on précise, via propagation="REQUIRED" que l'on veut créer une transaction, si elle n'est pas encore présente, sur toutes les méthodes dont le nom commence par add, delete ou update.
Note : Sur les autres méthodes la transaction est conservée si elle existe mais elle ne sera pas créé si seulement ces méthodes sont appelés.
Note : Si vous avez besoin de gérer des commit et rollback sur d'autres méthodes que celles commençant part add, delete ou update alors il faut ajouter une balise <tx:method> ad hoc.

Déploiement en servlet

En déploiement servlet, il faut utiliser la servlet FacesServlet offerte par esup-commons, et qui gère les sessions Hibernate et les exceptions (cf /webapp/WEB-INF/web.xml) :

...