Un certain nombre de techniques évoluent, mais le problème est encore suffisamment à la pointe que le processus de standardisation ne nous a pas encore fourni une solution totalement portable.
Option 1, vous pouvez rendre la transaction de services Web conscients. Cela suppose bien sûr que vous ayez le contrôle sur eux, bien que l'écriture d'un proxy de transaction pour les services non-transactionnels soit également une option dans certains cas.
Les protocoles WS-AT et WS-BA sont les principales normes pour les services Web transactionnels. Malheureusement, ils ne spécifient que le protocole, pas les liaisons de langue. En d'autres termes, il n'y a pas d'API standard au niveau du langage de programmation. Pour Java, la chose la plus proche est JSR-156, mais ce n'est pas encore prêt. Ensuite, le problème devient: comment lier la transaction EJB (c'est-à-dire JTA/XA) à la transaction WS. Puisque les modèles utilisés par les protocoles WS-AT et XA sont étroitement liés, ceci peut être réalisé au moyen d'un pont de protocole. Plusieurs serveurs d'application fournissent quelque chose de seul ces lignes. JBoss a présenté le leur à JavaOne - voir http://anonsvn.jboss.org/repos/labs/labs/jbosstm/workspace/jhalliday/txbridge/BOF-4182.odp
Notez que la technique de pontage de protocole peut également être utilisée dans l'autre sens, pour permettre un EJB qui utilise par ex. un backend de base de données XA, à exposer en tant que service web transactionnel.
Cependant, le modèle de verrouillage utilisé par les transactions de validation en deux phases ne convient réellement qu'aux transactions de courte durée dans le même domaine de contrôle. Si vos services s'exécutent dans le même centre de données d'entreprise, vous vous en tirerez probablement. Pour une distribution plus large, qu'elle soit géographique ou administrative, vous voulez probablement regarder WS-BA, un protocole de transactions de service web spécifiquement conçu pour une telle utilisation. WS-BA utilise un modèle basé sur la compensation qui est plus difficile à programmer. C'est essentiellement basé sur la technique que vous mentionnez: l'effet des méthodes de service est défait en appelant une méthode de compensation. Cela peut être difficile à obtenir, mais un stagiaire JBoss a fait un cadre d'annotation plutôt sympa qui vous permet de définir des méthodes de compensation avec un minimum d'effort et de les piloter automatiquement. Il n'est pas standardisé, mais vaut le détour si vous choisissez cette approche: http://www.jboss.org/jbosstm/baframework
Heureusement, nous utilisons JBoss, donc je suis porté vers les solutions que vous proposez, en particulier le dernier maillon. – atas
Salut à tous, cette réponse a maintenant 5 ans et il dit "JSR-156 n'est pas encore prêt.". Y a-t-il une mise à jour à cela ?? Existe-t-il maintenant une norme pour gérer les transactions avec les services web de savon? merci d'avance – jambriz