Synchronisation des transactions de printemps de JDBC et JMS

J'ai un printemps application web s'exécutant sur jboss qui est actuellement configuré pour utiliser le HibernateTransactionManager pour les transactions db et la JmsTransactionManager de jms. Pour jms nous utilisons Chameau et ActiveMQ, notre base de données DB2. Au sein d'une transaction j'ai besoin d'écrire un certain nombre d'enregistrements de la base de données et envoyer des deux asynchrone des messages jms. Le jms messages sont des notifications d'événements et je veux seulement à être envoyé si la base de données de validation de transaction.

Je suis prêt à accepter le risque de la communication avec le courtier en défaut après le jdbc, la transaction a déjà commis (et donc pas les messages envoyés mais db engagé), donc je ne pense pas que j'ai besoin d'un bon XA.

Je crois que ce dont j'ai besoin est "mieux", la gestion des transactions à l'aide de printemps de l'opération de synchronisation.

Le ressort de la documentation de tri des indications à l'effet que le printemps sera de synchroniser les deux opérations et à engager les jms transaction qu'après l'jdbc transaction a été commise, mais je ne pense pas que c'est très clair. Le printemps de la documentation ici http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/transaction.html#tx-resource-synchronization n'a pas été assez en détail sur la façon dont il fonctionne.

J'ai trouvé un couple de d'autres sources qui disent que le printemps va faire ce que je veux, y compris certains javadoc ci-dessous, et j'ai écrit quelques tests d'intégration que de leur montrer.

http://static.springsource.org/spring/docs/3.0.x/api/org/springframework/jms/support/JmsAccessor.html#setSessionTransacted%28boolean%29 La javadoc sur setSessionTransacted ici ressemble exactement à ce que je veux.

De ce que j'ai vu je pense que la création du Chameau JmsConfiguration traitées avec la valeur true, comme cela est suffisant:

<bean id="jmsConfig" class="org.apache.camel.component.jms.JmsConfiguration">
    <property name="connectionFactory" ref="pooledConnectionFactory"/>
    <property name="transacted" value="true"/>
    <property name="concurrentConsumers" value="10"/>
</bean>

Cependant j'ai besoin de convaincre quelqu'un que je travail avec un peu sceptique et pense que mon test d'intégration ne fonctionne qu'en raison d'un mal documentées d'effets secondaires plutôt qu'un intentionnelle printemps fonctionnalité.

Donc ma question est, ai-je raison que le printemps peut être invoqué pour synchroniser les opérations et toujours s'engager jms transaction après l'jdbc transaction ou n'est-ce pas quelque chose que je devrais compter sur, et pourriez-vous m'indiquer à toute la documentation officielle qui dit clairement? Et je suppose que, en général, est-ce une bonne approche pour prendre ou devons-nous la gestion de ces opérations d'une manière différente?

source d'informationauteur laurie