Question

Etant 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 levée entre les appels à deux méthodes? Si vous n'appelez pas les services Web, la transaction sera annulée et aucun dommage ne sera causé. Cependant, 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 relatives aux beans session EJB.

Une solution simple et personnalisée consiste à ajouter une "méthode de restauration en arrière" spéciale. au service Web pour chaque "fonctionnalité réelle". méthode. Ce que je demande, c’est un moyen normalisé de le faire.

Était-ce utile?

La solution

Un certain nombre de techniques évoluent, mais le problème est encore suffisamment avancé pour que le processus de normalisation ne nous ait pas encore fourni de solution totalement portable.

Première option, vous pouvez rendre la transaction de services Web consciente. Cela suppose bien sûr que vous en ayez le contrôle, bien que la rédaction d'un proxy sensible à la transaction pour des services non transactionnels soit également une option dans certains cas.

Les protocoles WS-AT et WS-BA sont les principaux standards des services Web transactionnels. Malheureusement, ils spécifient uniquement 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, l’objet le plus proche est JSR-156, mais ce n’est pas encore prêt.

Le problème est alors le suivant: comment lier la transaction EJB (c’est-à-dire JTA / XA) ??à la transaction WS. Les modèles utilisés par les protocoles WS-AT et XA étant étroitement liés, il est possible d’obtenir un pont de protocole. Plusieurs serveurs d'applications fournissent quelque chose à eux seuls ces lignes. JBoss a présenté son projet à 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’inverse pour permettre à un EJB qui utilise par exemple 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 que pour les transactions de courte durée dans le même domaine de contrôle. Si vos services fonctionnent 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 voudrez probablement utiliser WS-BA, un protocole de transaction de service Web spécialement conçu pour cet usage.

WS-BA utilise un modèle de compensation plus difficile à programmer. Elle repose essentiellement sur la technique que vous avez mentionnée: l’effet des méthodes de service est annulé en appelant une méthode de compensation. Cela peut être délicat à comprendre, mais un stagiaire JBoss a créé un cadre d’annotation plutôt agréable qui vous permet de définir des méthodes de compensation avec un minimum d’effort et de les piloter automatiquement. Ce n'est pas normalisé, mais vous devriez vérifier si vous choisissez cette approche: http: // www. jboss.org/jbosstm/baframework

Autres conseils

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 par lire les transactions de services Web et Comparaison des protocoles de transaction de services Web fournis par IBM pour mieux comprendre.

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 de la norme WS-BA.

Il suffit de consulter http://www.atomikos.com/Publications/TryCancelConfirm pour un article détaillé. Les fonctionnalités mentionnées sont disponibles dans Atomikos ExtremeTransactions ... Ce produit prend également en charge le format classique 'ACID'. style des transactions de service Web.

HTH

Guy

Avertissement: je travaille pour Atomikos

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top