2009-01-12 10 views
14

Étant donné un exemple d'appel de deux méthodes de services Web à partir d'un bean session, que se passe-t-il si une exception est lancée entre les appels à deux méthodes? Dans le cas de ne pas appeler les services Web, la transaction sera annulée et aucun mal ne sera fait. Toutefois, le service Web ne sera pas restauré. Bien sûr, même avec un seul service Web, il y a un problème. Bien que ce soit une question générique, je suis intéressé par les solutions concernant les beans de session EJB.Restauration de transactions et services Web

Une réponse simple et personnalisée consisterait à ajouter une "méthode de restauration" spéciale au service Web pour chaque méthode de "fonctionnalité réelle". Ce que je demande, c'est une façon standardisée de le faire.

Répondre

15

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

+0

Heureusement, nous utilisons JBoss, donc je suis porté vers les solutions que vous proposez, en particulier le dernier maillon. – atas

+0

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

6

Les spécifications WS-C (Web Services-Coordination) et WS-T (Web Services-Transaction) développées par Microsoft, BEA Systems et IBM sont utilisées dans les cas que je connais. Vous pouvez commencer à lire Web services transactions et A comparison of Web services transaction protocols articles fournis par IBM pour le rendre clair.

+1

Aucun des liens que vous avez fournis ne fonctionne plus. Pas étonnant depuis que vous avez posté ceci il y a 8 ans :) – Darcy

2

En fait, vous n'avez généralement pas besoin d'une méthode de restauration personnalisée mais également d'une méthode de validation personnalisée. Sinon, vous rencontrez des problèmes similaires à ceux rencontrés dans la norme WS-BA.

Consultez simplement http://www.atomikos.com/Publications/TryCancelConfirm pour un article détaillé. Les fonctionnalités mentionnées sont disponibles en Atomikos ExtremeTransactions ... Ce produit prend également en charge les transactions classiques de services Web de type 'ACID'.

HTH

Guy

Disclaimer: Je travaille pour Atomikos