Spring hibernate , comment appeler une méthode après validation de transaction ou de l'annulation de la transaction
J'ai besoin d'appeler une méthode après l'opération de succès ou de restauration. J'utilise comme
<bean name="openSessionInViewInterceptor" class="org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor">
<property name="sessionFactory">
<ref local="mysessionFactory"/>
</property>
</bean>
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="mysessionFactory"/>
</property>
</bean>
<tx:annotation-driven transaction-manager="txManager" proxy-target-class="true"/>
L'utilisation de l'application de certains services web externes qui doit être "nettoyé" de l'intérieur que de transaction obtient rollbacked.
Est-il de la manière d'atteindre cet objectif sans l'aide déclarative, la gestion des transactions.
Vous devez vous connecter pour publier un commentaire.
De mise en veille prolongée, vous pourriez s'étend
EmptyInterceptor
et remplacerafterTransactionCompletion()
de la méthode et de l'inscrire dansSessionFactoryBean
ouHibernateTransactionManager
.De Printemps, on pourrait s'étend
TransactionSynchronizationAdapter
etremplacer
afterCompletion()
et d'enregistrer avecTransactionSynchronizationManager#registerSynchronization()
.Modifier
Un Exemple d'utilisation de Spring Aop pour ajouter une synchronisation de toutes les méthodes annotées avec
@Transactional
TransactionAspectSupport#currentTransactionStatus()
, cependant, je pense que le printemps est seulement appel afterCompletion() une fois. J'ai ajouté un exemple de l'Aspect d'appliquer la Synchronisation pour l'annotation piloté par la démarcation des transactions.Aspect
peut être bon pour la configuration globale pour tous les@Transactional
méthodes, une méthode à base de rappel approche est fourni dans ma réponse ci-dessous: stackoverflow.com/a/43322119/986160Printemps a différentes classes qui pourraient être d'intérêt ici:
http://docs.spring.io/spring/docs/3.2.x/javadoc-api/org/springframework/transaction/support/TransactionSynchronization.html
http://docs.spring.io/spring/docs/3.2.x/javadoc-api/org/springframework/transaction/support/TransactionSynchronizationAdapter.html
http://docs.spring.io/spring/docs/3.2.x/javadoc-api/org/springframework/transaction/support/TransactionSynchronizationManager.html
Il y a un exemple de code ici:
http://azagorneanu.blogspot.co.uk/2013/06/transaction-synchronization-callbacks.html
Mise à jour en 2016
La gestion des événements de l'infrastructure introduit au Printemps 4.2 cela rend beaucoup plus simple.
Voir:
https://spring.io/blog/2015/02/11/better-application-events-in-spring-framework-4-2#transaction-bound-events
À l'aide de Printemps 4+: La plus facile et la façon la plus propre sans l'aide des aspects globaux et des configurations est basé sur ma réponse ici: https://stackoverflow.com/a/43322052/986160
Si vous avez besoin d'un rappel sur un
@Transactional
méthode après avoir s'engage juste à ajouter que dans le début de la méthode: