Wycofywanie transakcji i usługi internetowe

Biorąc pod uwagę przykład wywołania dwóch metod web services z fasoli sesji, co jeśli wyjątek zostanie wyrzucony między wywołaniami dwóch metod? W przypadku nie wywołania usług internetowych transakcja zostanie wycofana i nie wyrządzi żadnej szkody. Jednak usługa internetowa nie zostanie wycofana. Oczywiście nawet w przypadku pojedynczej usługi internetowej istnieje problem. Chociaż jest to ogólne Pytanie, jestem zainteresowany rozwiązaniami związanymi z sesją EJB.

Łatwą i dostosowaną odpowiedzią byłoby dodaj specjalną metodę "rollback" do usługi internetowej dla każdej metody "real functionality". To, o co proszę, to jakiś ustandaryzowany sposób, aby to zrobić.

Author: atas, 2009-01-12

3 answers

Wiele technik ewoluuje, ale problem jest wciąż na tyle nowatorski, że proces standaryzacji nie dostarczył nam jeszcze całkowicie przenośnego rozwiązania.

Opcja pierwsza, możesz uświadomić transakcję usług internetowych. To oczywiście zakłada, że masz nad nimi kontrolę, chociaż pisanie proxy świadom transakcji dla usług nietransakcyjnych jest również opcją w niektórych przypadkach.

Protokoły WS-AT I ws-BA są wiodącymi standardami dla transakcyjne Usługi internetowe. Niestety określają tylko protokół, a nie powiązania językowe. Innymi słowy, nie ma standardowego API na poziomie języka programowania. Dla Javy najbliżej jest JSR-156, ale nie jest jeszcze gotowy.

Wtedy pojawia się problem: jak powiązać transakcję EJB (tj. JTA/XA) z transakcją WS. Ponieważ modele używane przez protokoły WS-AT i XA są ze sobą ściśle powiązane, można to osiągnąć za pomocą mostu protokołów. Kilka serwerów aplikacji zapewnia coś sam te linie. JBoss zaprezentował swoje NA JavaOne-zobacz http://anonsvn.jboss.org/repos/labs/labs/jbosstm/workspace/jhalliday/txbridge/BOF-4182.odp

Należy zauważyć, że technika mostkowania protokołu może być również używana na odwrót, aby EJB, który używa np. zaplecza bazy danych XA, mógł być ujawniony jako transakcyjna usługa internetowa.

Jednak model blokowania używany przez dwufazowe transakcje commit jest tak naprawdę odpowiedni tylko dla krótkotrwałych transakcji w ta sama dziedzina kontroli. Jeśli twoje usługi działają w tym samym centrum danych firmy, prawdopodobnie ujdzie ci to na sucho. Dla szerszej dystrybucji, czy to geograficznej lub administracyjnej, prawdopodobnie chcesz spojrzeć na ws-BA, web service transactions protocol specjalnie zaprojektowany do tego celu.

WS-BA używa modelu opartego na kompensacji, który jest trudniejszy do zaprogramowania. Zasadniczo opiera się na technice, o której wspomniałeś: efekt metod obsługi jest cofany przez wywołanie metody kompensacji. Może to być trudne do uzyskania, ale stażysta JBoss zrobił dość ładny framework adnotacji, który pozwala zdefiniować metody kompensacji przy minimalnym wysiłku i mieć je napędzane automatycznie. Nie jest standaryzowany, ale warto sprawdzić, jeśli wybierzesz takie podejście: http://www.jboss.org/jbosstm/baframework

 15
Author: Bart Swennenhuis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-12 20:09:52

Specyfikacje Web Services-Coordination (ws-C) i Web Services-Transaction (ws-T) opracowane przez Microsoft, BEA Systems i IBM są używane w takich przypadkach, jak wiem. Aby to wyjaśnić, możesz zacząć od przeczytania Web services transactions i porównania artykułów z protokołami transakcji Web services dostarczonych przez IBM.

 6
Author: gedevan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-13 16:47:47

W rzeczywistości zwykle potrzebujesz nie tylko niestandardowej metody wycofywania, ale także niestandardowej metody zatwierdzania. W przeciwnym razie dostajesz się do problemów, takich jak te Znalezione w standardzie WS-BA.

Po prostu sprawdź http://www.atomikos.com/Publications/TryCancelConfirm do szczegółowego artykułu. Wymienione tam funkcje są dostępne w Atomikos ExtremeTransactions ... Ten produkt obsługuje również klasyczne transakcje usług internetowych w stylu "ACID".

HTH

Guy

Zastrzeżenie: pracuję dla Atomikos

 2
Author: Guy Pardon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-08 15:50:54