Kompozycja usług. Tomasz Pawlak. Biznesowe Systemy Rozproszone

Podobne dokumenty
Język BPEL. Bussiness Process Execution Language

Modelowanie i Programowanie Obiektowe

Zaawansowane aplikacje internetowe. Wykład 7. Implementacja procesów biznesowych w języku BPEL. wykład prowadzi: Maciej Zakrzewicz BPEL.

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

Mechanizmy pracy równoległej. Jarosław Kuchta

Automatyzacja procesów biznesowych Andrzej Sobecki. ESB Enterprise service bus

Programowanie Komponentowe WebAPI

Komputerowe Systemy Przemysłowe: Modelowanie - UML. Arkadiusz Banasik arkadiusz.banasik@polsl.pl

Komunikacja i wymiana danych

Jak powstaje model biznesowy? Co to jest? Modelowanie biznesowe. Model biznesowy. Jak powstaje model biznesowy? Jak firma generuje przychody?

Wzorce Strukturalne. Adapter: opis. Tomasz Borzyszkowski

Architektura Systemu. Architektura systemu umożliwia kontrolowanie iteracyjnego i przyrostowego procesu tworzenia systemu.

Wprowadzenie do usług internetowych

Część I -ebxml. UEK w Krakowie Janusz Stal & Grażyna Paliwoda-Pękosz. UEK w Krakowie Janusz Stal & Grażyna Paliwoda-Pękosz

Wykorzystanie standardów serii ISO oraz OGC dla potrzeb budowy infrastruktury danych przestrzennych

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery

Problemy niezawodnego przetwarzania w systemach zorientowanych na usługi

Warstwa integracji. wg. D.Alur, J.Crupi, D. Malks, Core J2EE. Wzorce projektowe.

Analiza i projektowanie aplikacji Java

Modelowanie procesów biznesowych, przepływu pracy i wdrażanie aplikacji w oparciu o Jboss jbpm lub Activiti

Implementacja aplikacji biznesowych w technologii WS-BPEL

SIMON SAYS ARCHITECTURE! Usługi zdalne. Technologie, techniki i praktyki implementacji

SOA Web Services in Java

Spis treści. Dzień 1. I Wprowadzenie (wersja 0906) II Dostęp do danych bieżących specyfikacja OPC Data Access (wersja 0906) Kurs OPC S7

Technologie dla aplikacji klasy enterprise. Wprowadzenie. Marek Wojciechowski

Modelowanie obiektowe

Zagadnienia (1/3) Data-flow diagramy przepływów danych ERD diagramy związków encji Diagramy obiektowe w UML (ang. Unified Modeling Language)

Virtual Grid Resource Management System with Virtualization Technology

Wprowadzenie do zarządzania procesami biznesowymi

The Binder Consulting

Definicje. Algorytm to:

Projektowanie oprogramowania cd. Projektowanie oprogramowania cd. 1/34

Procesowa specyfikacja systemów IT

WZORCE LOGIKI APLIKACJI Reużywalne składniki wymagań

Diagramy klas. dr Jarosław Skaruz

Kurs programowania. Wykład 12. Wojciech Macyna. 7 czerwca 2017

UML w Visual Studio. Michał Ciećwierz

Słowem wstępu. Część rodziny języków XSL. Standard: W3C XSLT razem XPath 1.0 XSLT Trwają prace nad XSLT 3.0

Uniwersytet Łódzki Wydział Matematyki i Informatyki, Katedra Analizy Nieliniowej. Wstęp. Programowanie w Javie 2. mgr inż.

Usługi sieciowe (Web Services)

5. Model komunikujących się procesów, komunikaty

OMNITRACKER Wersja testowa. Szybki przewodnik instalacji

Kurs OPC S7. Spis treści. Dzień 1. I OPC motywacja, zakres zastosowań, podstawowe pojęcia dostępne specyfikacje (wersja 1501)

REFERAT PRACY DYPLOMOWEJ

Inżynieria oprogramowania. Wykład 7 Inżynieria wymagań: punkty widzenia, scenariusze, przypadki użycia

Graficzna notacja procesów biznesowych BPMN. Porównanie z notacja UML. Jakub Morkis, Piotr Chmielewski

CENTRUM PROJEKTÓW INFORMATYCZNYCH MINISTERSTWA SPRAW WEWNĘTRZNYCH I ADMINISTRACJI

Wymiana opisu procesów biznesowych pomiędzy środowiskiem Eclipse i EMC Documentum

1 Wprowadzenie do J2EE

Programowanie obiektowe - 1.

Deduplikacja danych. Zarządzanie jakością danych podstawowych

AUREA BPM Oracle. TECNA Sp. z o.o. Strona 1 z 7

Spis treúci. 1. Wstęp... 11

Język UML w modelowaniu systemów informatycznych

Programowanie Urządzeń Mobilnych. Część II: Android. Wykład 2

OMNITRACKER Wersja testowa. Szybki przewodnik instalacji

Wykład 1 Inżynieria Oprogramowania

Spis treúci. 1. Wprowadzenie... 13

Procesy biznesowe w praktyce. Przykłady użycia z wykorzystaniem jbpm 4.4

Architektury usług internetowych. Tomasz Boiński Mariusz Matuszek

JBPM [JUG] Tomasz Gratkowski [GRATKOWSKI SOFTWARE]

Diagramu Związków Encji - CELE. Diagram Związków Encji - CHARAKTERYSTYKA. Diagram Związków Encji - Podstawowe bloki składowe i reguły konstrukcji

Model semistrukturalny

GML w praktyce geodezyjnej

problem w określonym kontekście siły istotę jego rozwiązania

Czym jest Java? Rozumiana jako środowisko do uruchamiania programów Platforma software owa

MINISTERSTWO FINANSÓW PLAN INTEGRACJI SYSTEMU ZAŁĄCZNIK NR 6 SEAP SPECYFIKACJA KANAŁ DLA PODMIOTÓW ZEWNĘTRZNYCH PL PROJEKT ECIP/SEAP

Programowanie współbieżne i rozproszone

Diagramy czynności Na podstawie UML 2.0 Tutorial

Inżynieria oprogramowania

Analiza i projektowanie oprogramowania. Analiza i projektowanie oprogramowania 1/32

Analiza i projektowanie obiektowe 2016/2017. Wykład 10: Tworzenie projektowego diagramu klas

Aplikacje RMI

Rozproszone systemy Internetowe

Informatyzacja przedsiębiorstw WYKŁAD

Systemy obiegu informacji i Protokół SWAP "CC"

Rozproszone systemy internetowe

Korporacyjna Magistrala Usług na przykładzie Mule ESB

DECLARE <nazwa_zmiennej> typ [(<rozmiar> )] [ NOT NULL ] [ { := DEFAULT } <wartość> ];

Dzisiejszy wykład. Wzorce projektowe. Visitor Client-Server Factory Singleton

Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego

Wzorce projektowe. dr inż. Marcin Pietroo

Dokumentacja wstępna TIN. Rozproszone repozytorium oparte o WebDAV

Architektura nowoczesnych aplikacji internetowych

Etapy życia oprogramowania

Podstawy programowania III WYKŁAD 4

Algorytm. Krótka historia algorytmów

Typy przetwarzania. Przetwarzanie zcentralizowane. Przetwarzanie rozproszone

Multi-wyszukiwarki. Mediacyjne Systemy Zapytań wprowadzenie. Architektury i technologie integracji danych Systemy Mediacyjne

Inżynieria Programowania - Projektowanie architektoniczne

Etapy życia oprogramowania. Modele cyklu życia projektu. Etapy życia oprogramowania. Etapy życia oprogramowania

EXSO-CORE - specyfikacja

KARTA PRZEDMIOTU. 1) Nazwa przedmiotu: INŻYNIERIA SYSTEMÓW I ANALIZA SYSTEMOWA. 2) Kod przedmiotu: ROZ-L3-20

Dokumentacja Użytkownika Systemu

Symulacje procesów biznesowych. Zastosowanie oprogramowania igrafx

<Nazwa firmy> <Nazwa projektu> Specyfikacja dodatkowa. Wersja <1.0>

Inżynieria oprogramowania II

Programowanie obiektowe

Bloki anonimowe w PL/SQL

1.KOMPOZYCJA I INTEGRACJA USŁUG W ARCHITEKTURZE SOA

Transkrypt:

Kompozycja usług Tomasz Pawlak

2 Plan prezentacji Wprowadzenie Kompozycja usług dawniej i dziś Modele kompozycji usług Związki koordynacji z kompozycją Wprowadzenie do BPEL

2 Plan prezentacji Wprowadzenie Kompozycja usług dawniej i dziś Modele kompozycji usług Związki koordynacji z kompozycją Wprowadzenie do BPEL Za tydzień

3 Czym jest kompozycja usług?

3 Czym jest kompozycja usług? Sposób na łączenie usług prostych w usługi złożone Dlaczego? Sposób radzenia sobie ze złożonością Usługi proste Mały podzbiór funkcjonalność całego systemu Możliwość ponownego wykorzystania Ukrycie szczegółów wykonywanych operacji Czarna skrzynka Kompozycja usług złożonych Działanie na wyższych poziomie abstrakcji Pominięcie szczegółów operacji

4 Zapanować nad złożonością System zamówień Dostawca Inny dostawca

4 Zapanować nad złożonością Usługi internetowe Różne interfejsy! System zamówień Dostawca Inny dostawca

4 Zapanować nad złożonością Usługi internetowe Różne interfejsy! System zamówień Klient usługi Klient usługi Różne Implementacje klienta Dostawca Inny dostawca

4 Zapanować nad złożonością Usługi internetowe Różne interfejsy! System zamówień Klient usługi Klient usługi Różne Implementacje klienta Dostawca Inny dostawca

4 Zapanować nad złożonością Pierwszy poziom kompozycji System zamówień Klient usługi Klient usługi Dostawca Inny dostawca Ujednolicenie interfejsów

4 Zapanować nad złożonością System zamówień Klient usługi Klient usługi Dostawca Inny dostawca

4 Zapanować nad złożonością Łańcuch dostaw Planowanie produkcji Księgowość System zamówień Klient usługi Klient usługi Dostawca Inny dostawca

4 Zapanować nad złożonością Drugi poziom kompozycji Łańcuch dostaw Planowanie produkcji Księgowość System zamówień Klient usługi Klient usługi Dostawca Separacja odpowiedzialności Inny dostawca

5 Zysk z kompozycji usług Usługi logicznie izolują Funkcjonalności Kod różnych dostawców Ukrywają szczegóły implementacyjne Dzięki temu Wymuszona modularyzacja Trudniej stworzyć spaghetti code Trudniej wykorzystać haki i nieudokumentowaną funkcjonalność Klient usługi nie zna implementacji usługi

Wymagania wynikające z kompozycji usług dotyczące infrastruktury (1) 6 Nadrzędny cel: Uprościć definicję, uruchomienie, utrzymanie usług złożonych z innych usług Podejście ręczne: Wsparcie dla popularnych języków programowania Programiści niechętnie zmieniają technologie Systemy wykorzystują istniejący kod Klienci usług pisani w języku, w którym powstał system Narzędzia Generatory kodu z definicji interfejsu Rozszerzenia języka programowania i biblioteki Umożliwiają kompozycję usług na poziomie języka programowania Ukrywają fakt rozproszenia usług

7 Wymagania wynikające z kompozycji usług dotyczące infrastruktury (2) Wykorzystanie automatyzacji: Systemy modelowania procesów biznesowych Np.: systemy Workflow Wsparcie dla standardów Automatyczne generowanie odpowiednich dokumentów Automatyczne wczytywanie i interpretacja dokumentów Wykonanie procesu biznesowego Selekcja usług Obsługa rozproszonych transakcji Publikowanie interfejsów

8 Wymagania wynikające z kompozycji usług dotyczące infrastruktury (3) Dzisiejsza infrastruktura wspiera oba podejścia Ręczne podejście Dobre do małych projektów Dla programistów niezaznajomionych z technologią Przy konieczności szybkiej implementacji Wykorzystanie automatyzacji Daje pogląd na cały system bez wchodzenia w detale techniczne Łatwość utrzymania Konieczność poznania technologii

8 Wymagania wynikające z kompozycji usług dotyczące infrastruktury (3) Dzisiejsza infrastruktura wspiera oba podejścia Ręczne podejście Dobre do małych projektów Dla programistów niezaznajomionych z technologią Przy konieczności szybkiej implementacji Wykorzystanie automatyzacji Daje pogląd na cały system bez wchodzenia w detale techniczne Łatwość utrzymania Konieczność poznania technologii Dalej: Będziemy zajmować się automatyzacją

9 Główne elementy infrastruktury (1) Schemat kompozycji (ang. composition schema) Model kompozycji wyrażony w języku kompozycji Łączenie usług Ograniczenia kolejnościowe na wykonanie usług (koordynacja) Sposób uzyskania parametrów wywołań usług Język kompozycji Język specyficzny dla dziedziny (ang. domain-specific language)

10 Główne elementy infrastruktury (2) Środowisko programistyczne Graficzny interfejs użytkownika Łatwiej interpretować schematy niż kod Możliwość specyfikacji schematu kompozycji Np.: w formie grafu Automatyczne tłumaczenie Reprezentacji graficznej w kod Kodu w reprezentację graficzną

11 Główne elementy infrastruktury (3) Środowisko czasu uruchomienia Silnik kompozycji Wykonuje logikę biznesową złożonej usługi Wywołania usług składowych Instancja kompozycji Pojedyncze wykonanie złożonej usługi

12 Kompozycja usług dawniej i dziś

13 Kompozycja komponentów oprogramowania wymagania Precyzyjny opis Funkcjonalność usługi Semantyka Interfejs Protokoły komunikacyjne Najlepiej wykorzystać standardy Przenośność między systemami Uniknięcie problemów, które rozwiązali twórcy standardu Łatwość utrzymania

14 Systemy Workflow (1) System klasy Enterprise Application Integration (EAI) Wsparcie dla kompozycji aplikacji Wielu dostawców Wiele technologii Modelowanie procesów biznesowych (workflow)

15 Systemy Workflow (2) Mało założeń dotyczących integrowanych systemów Brak standaryzacji W praktyce konieczność łączenia z innym middleware Np.: z middleware nastawionym na wiadomości (MOM) Brak standardowego modelu kompozycji Konieczność przygotowania adapterów Specyficzne dla aplikacji i dostępnych interfejsów Np.: Komunikacja sieciowa lub przez standardowe we/wy Rozwiązania konkretnego producenta

16 Systemy Workflow (3) Efekt: Duża elastyczność Duża złożoność Osobny adapter dla każdego komponentu Wysoki koszt wdrożenia Wysoki koszt utrzymania Np.: dodania nowego komponentu Komponenty nie mogą być swobodnie Łączone Zastępowane

17 Przykład złożoności kompozycji w Workflow System workflow Wstawia zadania Do odpowiednich kolejek W odpowiednim czasie Adapter Pobranie zadania z kolejki API systemu Workflow Formaty wiadomości Protokoły Uruchomienie zadania w adaptowanym komponencie API komponentu

18 Kompozycja usług internetowych Silny podział na komponenty o określonej funkcjonalności Interfejsy usług Jednoznacznie zdefiniowane Standardowy język opisu interfejsu Semantyka Częściowo zawarta w katalogach usług Ustandaryzowany sposób zapisu Protokoły komunikacji Standardowy format wiadomości Standardowy protokół komunikacji

19 Usługi internetowe nie rozwiązują wszystkich problemów! (1) Dane są dwie usługi A: komunikacja RPC B: komunikacja oparta o wymianę dokumentów Aby zintegrować obie usługi Należy uspójnić model komunikacji

20 Usługi internetowe nie rozwiązują wszystkich problemów! (2) Standardowy Sposób opisu interfejsu Protokół komunikacyjny Sposób publikowania informacji o usługach Nie sprawi, że usługi są ze sobą kompatybilne Zaleta: Nadal występują problemy na poziomie aplikacyjnym Programista jest odciążony od integracji infrastruktury

Podobieństwo kompozycji w systemach Workflow i usługach internetowych 21 Cechy wspólne adapterów w Workflow i usług internetowych Integracja systemów/aplikacji Adapter/WS musi znać szczegóły integrowanych systemów Dodatkowa warstwa abstrakcji Ukrywa szczegóły systemów Z zewnętrznej perspektywy systemy to czarne skrzynki Ujednolica interfejs dostępowy System może udostępniać swoje usługi różnymi interfejsami Np.: komunikacja RPC i wymiana dokumentów Odpowiednik adapterów w middleware Różnice Adapter w Workflow Przygotowywany przez integratora systemów Brak standardów Usługa internetowa Przygotowywania przez dostawców komponowanych systemów Ograniczona standardami

22 Modele kompozycji usług

23 Podstawowe pojęcia Proces Schemat kompozycji Instancja procesu Konkretne wykonanie procesu Orkiestracja Fragment procesu specyfikujący kolejność operacji na usługach

24 Wymiary modelu kompozycji usług (1) Model komponentowy Definicja natury komponowanych elementów Założenia dotyczące komponentów Model orkiestracji Definicja porządku wykonania usług Np.: Diagram aktywności Sieć Petriego Rachunek π Maszyna stanów Hierarchia aktywności Reguły

25 Wymiary modelu kompozycji usług (2) Model danych i przepływu danych Specyfikacja formatu danych Specyfikacja wymiany danych między komponentami Model selekcji usługi Sposób wykonania wiązania Dynamicznego Statycznego Np.: Jak konkretna usługa jest wybrana jako komponent

26 Wymiary modelu kompozycji usług (3) Model transakcji Połączenie elementów modelu w transakcje Model obsługi błędów Definicja sposobu obsługi wyjątkowych sytuacji Np.: błędów zgłoszonych przez usługi składowe Bez przerwania pracy usługi złożonej

27 Model komponentowy (1) Wiele możliwych poziomów szczegółowości Poziom najbardziej szczegółowy Komponenty implementują specyficzny zbiór standardów WS-* Założenia o standardach ograniczają różnorodność Łatwiejsza kompozycja Poziom ogólny Mało założeń dotyczących komponentów Np.: Komponenty wymieniają wiadomości XML Komunikacja (a)synchroniczna Większa heterogeniczność Kompozycja podobna do systemów workflow Konieczność adaptacji usług

28 Model komponentowy (2) Rozwiązanie pośrednie Wspierać różne modele w systemie Dostarczyć funkcjonalność pomocniczą dla komponentów nie pasujących do żadnego modelu Ale uwaga! Zbyt wiele możliwości = brak możliwości Utrzymanie wielu modeli Wyższe koszty utrzymania

29 Model komponentowy (3) Popularne rozwiązanie: BPEL Założenie: Komponenty są usługami opisanymi w WSDL Adresacja usług przez WS-Addressing Transakcje wyrażone w WS-Transaction Wskazanie na elementy XML przez XPath

30 Model orkiestracji Porządek wykonania usług Warunki wykonania poszczególnych operacji Kolejność wykonania operacji

31 Model orkiestracji diagram aktywności 1 Cechy Modelowanie aktywności pojedynczej usługi Usługi składowe występują jako pojedyncze bloczki Naturalna specyfikacja kolejności wykonania Odzwierciedla sposób programowania Typy operacji Powiadomienia Komunikacja jednokierunkowa Send Wiadomości na zewnątrz usługi Operacja nieblokująca Receive Wiadomość z zewnątrz usługi Operacja blokująca, usługa czeka na wiadomość Wywołania synchroniczne Komunikacja dwukierunkowa, blokująca Invoke Operacje przychodzące z zewnątrz

32 Model orkiestracji diagram aktywności 2 Usługa sprzedaży Sprzedawca Zamówienie Klient PotwierdzenieZamówienia Receive Zamówienie Lokalne usługi sprzedawcy AnulowanieZamówienia SprawdźStanMagazynu Invoke SprawdźStanMagazynu Dostępność=True Dostępność=False Magazyn SprawdźMożliwośćDostawy Invoke SprawdźMożliwośćDostawy Dostawa=True Dostawa=False Send PotwierdźZamówienie Send AnulujZamówienie

33 Model orkiestracji diagram stanów (1) Rozszerzenie maszyny stanów Definicja aktywności na wejściu do/wyjściu z stanu Definicja aktywności wewnątrz stanu Obsługa zdarzeń Wykonanie aktywności Zmiana stanu Złożone przejścia (wiele aktywności) Równoległe stany Warunek wykonania aktywności [warunek]/start "aktywność" entry/start "aktywność" (wejście do stanu) do/start "aktywność" (operacja w stanie) exit/start "aktywność" (wyjście ze stanu)

34 Model orkiestracji diagram stanów (2) Uruchomiony /start "invoke SprawdźStanMagazynu" Wyszukiwanie produktów lokalnie Wyszukiwanie lokalne zakończone(namagazynie) [namagazynie=false]/start "invoke SprawdźDostępnośćUDostawcy Wyszukiwanie lokalne zakończone(namagazynie) [namagazynie=true]/start "send PotwerdzenieZamówienia" Wyszukiwanie produktów u dostawcy entry/start "invoke PodajNrUmowy" do/start "invoke CzyProduktDostepny" exit/start "invoke TerminDostawy" Wyszukiwanie u dostawcy zakończone(dostępność) [dostępność=false]/start "send AnulujZamówienie" Wyszukiwanie u dostawcy zakończone(dostępność) [dostępność=true]/start "send PotwierdzenieZamówienia" Zamówienie zakończone Zamówienie anulowane

35 Diagram aktywności vs diagram stanów Diagram aktywności Niejawna reprezentacja stanu Jawna reprezentacja aktywności Możliwość wyznaczenia aktualnie wykonywanej aktywności Diagram stanów Jawna reprezentacja stanu Jawna reprezentacja aktywności Aktywność przenosi system z jednego stanu spójnego do innego Nie ma możliwości zatrzymania się podczas wykonywania aktywności (atomowość) Możliwość wyznaczenia aktualnego stanu Nie można wyznaczyć aktualnie wykonywanej aktywności (założenie) Lepiej sprawdza się w złożonych systemach Diagram aktywności: zrozumienie wykonywanej aktywność wymaga kontekstu wykonania Diagram stanów: kontekst to stan!

36 Model orkiestracji Sieć Petriego (1) Połączenie Diagram aktywności Diagram stanów Dobrze znany formalizm Dobrze zdefiniowana semantyka bloczków Wiele narzędzi automatycznego przetwarzania Automatyczne wykrywanie właściwości model/przetwarzania Np.: wykrywanie zakleszczeń

37 Model orkiestracji Sieć Petriego (2) Graf miejsc i przejść Zbiór tokenów wskazuje na aktualny stan przetwarzania Przejście możliwe jeśli wszystkie miejsca wejściowe zawierają tokeny Z przejścia może wyjść dowolna liczba tokenów Jednorazowo można wykonać tylko jedno przejście Wydzielony miejsca Początkowy Końcowy

38 Model orkiestracji Sieć Petriego (3) Start (Wywołanie zamówienia) Wyszukiwanie produktów lokalnie Invoke SprawdzStanMagazynu namagazynie=false Invoke SprawdźDostępnośćUDostawcy namagazynie=true Wyszukiwanie produktów u dostawcy Dostępność=False Send AnulujZamówienie Zakończono (anulowano) Dostępność=True Gotowy do wysłania potwierdzenia Send PotwierdzenieZamówienia Zakończono (Potwierdzono)

39 Model orkiestracji rachunek π (1) Algebra procesów Połączenie Algebra of Communicating Processes with Abstractions (ACP) Calculus of Concurrent Systems (CCS) Możliwości uruchamiania aktywności Sekwencyjne A.B Aktywność A występuje przed B Równoległe A B Aktywność A występuje równolegle z B Warunkowe A+B Aktywność A lub aktywność B są uruchamiane Wybór niedeterministyczny [C1]A+[C2]B Aktywność A wykonywana pod warunkiem C1, B pod warunkiem C2

40 Model orkiestracji rachunek π (2) A = receivezamówienie.invokesprawdźstanmagazynu B = [namagazynie=false]c + [namagazynie=true]e C = invokesprawdźdostępnośćudostawcy.( [dostępność=false]sendanulujzamówienie + [dostępność=true]e ) E = sendpotwierdzzamówienie Zamówienie = A.B

41 Model orkiestracji hierarchia aktywności 1 Drzewo Zalety Podział złożonych aktywności Na aktywności składowe Liście = konkretne akcje Węzły pośrednie Porządek wykonania Wiele poziomów szczegółowości wykonania Naturalna modularyzacja

42 Model orkiestracji hierarchia aktywności 2 Przetwarzanie zamówienia sequence receive Zamówienie invoke SprawdźStanMagazynu Podejmij decyzję na podstawie stanu choice WyszukajUDostawcy sequence namagazynie=false namagazynie=true send PotwierdzenieZamówienia invoke SprawdzDostępnośćUDostawcy Podejmij decyzję na podstawie dostępności choice dostępność=false send AnulowanieZamówienie dostępność=true send PotwierdzenieZamówienia

43 Model regułowy orkiestracji (1) Zbiór reguł Reguła Część warunkowa Zdarzenie Warunek Część decyzyjna Akcja Paradygmat Event-Condition-Action (ECA) Reguły uruchamiane w wyniku wystąpienia zdarzenia Przychodzącego z zewnątrz W wyniku akcji reguł występują zdarzenia Uruchamiające warunki innych reguł

44 Model regułowy orkiestracji (2) Zalety Wady Łatwość modyfikacji Wysoka elastyczność Naturalny sposób obsługi wyjątków Trudno ustalić porządek wykonania Ale jest to możliwe Warunek w kolejnej regule musi uwzględniać stan po wykonaniu poprzedniej reguły Trudność zrozumienia i utrzymania dużego zbioru reguł

45 Model regułowy orkiestracji (3) ON receive Zamówienie IF True THEN invoke SprawdźStanMagazynu ON complete(sprawdźstanmagazynu) IF namagazynie == True THEN send PotwierdźZamówienie ON complete(sprawdźstanmagazynu) IF namagazynie == False THEN invoke SprawdźDostępnośćUDostawcy ON complete(sprawdźdostępnośćudostawcy) IF dostępny == True THEN send PotwierdzenieZamówienia ON complete(sprawdźdostępnoścudostawcy) IF dostępny == False THEN send AnulowanieZamówienia

46 Model danych i przepływu danych (1) Typy danych Dane aplikacyjne Wiadomości przesyłane między elementami systemu Dowolne typy i struktury danych Np.: Identyfikator produktu, wielkość zamówienia, cena Dane przepływu sterowania Zmienne procesu Użyte w instrukcjach warunkowych Zazwyczaj ograniczone do Boolean Number String Zazwyczaj uzyskane poprzez ekstrakcję z danych aplikacyjnych Np.: namagazynie, dostępność

47 Dwa podejścia do danych aplikacyjnych Black-box Dane identyfikowane przez URI Definicja niedostępna dla infrastruktury Infrastruktura nie wykorzystuje danych aplikacyjnych Infrastruktura przekazuje paczki danych między usługami Według definicji procesu Podejście jawne Dane przekazywane jawnie z/do usług Definicje struktur danych znane infrastrukturze Infrastruktura może wydzielić dane kontrolne

48 Black box vs podejście jawne Black box Model kompozycji niezależny od złożoności danych Owijacze dla usług Usługi oczekują danych, a nie identyfikatorów Przed uruchomieniem usługi należy pobrać dane wskazane przez URI Po wykonaniu usługi należy zmagazynować zwrócone dane pod określonym URI Podejście jawne Łatwość interpretacji odpowiedzi/statusu usługi Ryzyko przesyłania ogromnej ilości danych Operacje wykonywane na niewielkim fragmencie danych

49 Model przepływu danych Sposób przekazania danych z jednej operacji do innej Dwa podejścia Blackboard Dane użyte w usłudze złożonej Jawnie identyfikowane Dostępne na różnych etapach przetwarzania Kolekcja zmiennych Aktywności ustawiają i odczytują wartości Jawny model przepływu danych Przepływ między każdą parą aktywności modelowany osobno

50 Blackboard vs model jawny Blackboard Łatwość modelowania W dużej usłudze Konieczność organizacji danych w struktury Model zgodny z większością języków programowania Jawny model przepływu danych Elastyczność Lokalność Powoduje niejawne zależności w kolejności wykonania Np.: kiedy kolejność wykonania w modelu aktywności nie pokrywa się ze sposobem dostępu do danych (przykład ) Ryzyko wyścigu (ang. race condition) jeśli różne usługi składowe mogą dostarczyć te same dane

51 Niejawne zależności między usługami w modelu jawnego przepływu danych A B C Orkiestracja usług Przepływ danych

52 Selekcja usług (1) Sposób wyznaczenia usług składowych Gdzie wysyłać wiadomości Skąd pobierać dane Zwykle reprezentacja abstrakcyjna, np.: Identyfikator interfejsu Identyfikator roli usługi W czasie uruchomienia Abstrakcyjny opis jest wiązany z konkretnymi usługami

53 Selekcja usług (2) Wiązania usługi Statyczne URI usługi składowej zapisany w procesie Wygodne przy prototypowaniu i testowaniu Nieodporne na zmiany w środowisku Konieczna zmiana w definicji procesu Dynamiczne przez referencję URI usługi przechowywane przez zmienną procesu Źródło wartości Wywołanie innej usługi (np.: katalogu) URI klienta, który wywołał usługę (aby wywołać operacje u klienta) Wartość ustawiona podczas wdrożenia Jeśli wartość pobierana z katalogu Konieczność zamodelowania jako oddzielną aktywność

54 Selekcja usług (3) Dynamiczne przez wyszukiwanie Usługi składowe identyfikowane przez zbiór ograniczeń, np.: Wspierany interfejs konkretny tmodel z UDDI Konkretny dostawca businessentity w UDDI Infrastruktura automatycznie wyszukuje usługę Jeśli katalog zwróci wiele Wybór pierwszej Wybór losowej Dodatkowe kryterium wyboru

55 Porównanie sposobów selekcji usług Łatwość prototypowania i testowania Dostosowanie do zmian w środowisku Automatyzacja pobrania URI Statyczne Dynamiczne przez referencje Dynamiczne przez wyszukiwanie (wymagana infrastruktura, np.: katalog) (brak pobierania)

56 Selekcja usług (4) Dynamiczna selekcja operacji Wskazanie operacji usługi, którą wywołać Alternatywa dla modelowania wyboru usług przez orkiestrację Abstrakcyjne/generyczne aktywności Nazwa operacji w usłudze wybierana na podstawie przeszukiwania katalogu, np.: Wyszukiwanie operacji o semantyce wyspecyfikowanej w konkretnym tmodelu

57 Transakcje w kompozycji usług (1) Region atomowy Fragment schematu kompozycji Wykonanie wszystkich lub żadnej operacji z regionu Wobec braku możliwości wykonania operacji w regionie Wycofanie/kompensacja operacji wykonanych do tej pory Przerwanie wykonywania i zwrócenie błędu Obsługa po stronie infrastruktury Np.: użycie WS-Transaction

58 Transakcje w kompozycji usług (2) Jeśli usługi składowe nie obsługują WS-Transaction Możliwość obsługi na poziomie kompozycji BPEL Podział długich transakcji na podtransakcje Podtransakcje Wykonane w określonej kolejności Gwarancje ACID 2PC Powiązanie z podtransakcją kompensującą Rollback Przerwanie wszystkich aktywnych podtransakcji Kompensacja dla zatwierdzonych już podtransakcji W kolejności odwrotnej do pierwotnego wykonania

59 Transakcje w kompozycji usług (3) Akcja kompensująca przy braku wsparcia WS-Transaction Usługi jawnie nie dostarczają akcji kompensujących Utrudnia kompozycję usług Oddzielnego schemat orkiestracji dla kompensacji Wywołanie operacji kompensującej Np.: anulowanie wystawionego biletu Dla pewnych usług niemożliwe do wykonania Brak operacji kompensującej

60 Obsługa wyjątków w kompozycji (1) Wyjątek Odstępstwo od oczekiwanego wykonania kompozycji Sytuacje rzadkie i nietypowe Przykłady: Awaria usługi złożonej Awaria usługi składowej Wartość zwrócona przez usługę składową jest inna od oczekiwanej

61 Obsługa wyjątków w kompozycji Wyjątek Odstępstwo od oczekiwanego wykonania kompozycji Błąd, awaria Sytuacje rzadkie i nietypowe Przykłady: Błąd usługi złożonej Awaria usługi składowej Wartość zwrócona przez usługę składową jest inna od oczekiwanej

62 Obsługa wyjątków przez transakcje Wycofanie transakcji wobec wystąpienia wyjątku Przerost formy nad treścią Wiele wyjątków można obsłużyć bez kompensacji wykonanych aktywności Np.: Poprosić o poprawę danych

63 Podejście oparte o przepływ sterowania Wykorzystanie instrukcji warunkowych Sprawdzenie czy operacja powiodła się Uruchomienie odpowiedniej procedury obsługi Podobne do rozwiązań stosowanych w Językach bez obsługi wyjątków (np.: C) WinAPI Specyficzny przypadek: Problem stopu Komunikacja nieblokująca, usługa nie zwróciła żadnego wyjścia Komunikacja blokująca, usługa nie kończy przetwarzania Obsługa poprzez limit na czas uruchomienia i procedurę obsługi

64 Podejścia try-catch-throw Podobne do bloków try-catch w językach programowania Blok try Grupuje usługi pod jedną procedurą obsługi błędów Wyjątki rzucane dla nieoczekiwanych wartości zwracanych przez usługę Możliwość implementacji przez formę asercji Block catch Procedura obsługi błędów Możliwość rzucenia wyjątku dalej Do procedury obsługi na wyższym poziomie abstrakcji

65 Zalety try-catch-throw Separacja Logiki normalnego wykonania procesu Obsługi błędów Łatwość utrzymania W przypadku kompozycji hierarchicznej Możliwość zbudowania hierarchii wyjątków Od ogólnych do szczegółowych Strategia kontynuacji Definiuje, jak wykonywać usługę po wystąpieniu błędów

66 Podejście regułowe Dedykowane dla orkiestracji regułowej Użycie reguł Część warunkowa Zdarzenie Warunek wystąpienia wyjątku Np.: na danych zwracanych z usługi Część decyzyjna Procedura obsługi wyjątku

67 Zalety podejścia regułowego Separacja Logiki normalnego wykonania Obsługi błędów Dla dużej liczby reguł Działanie procesu staje się niezrozumiałe Trudność utrzymania

68 Związek koordynacji z kompozycją

69 Kompozycja vs koordynacja (1) Kompozycja Inaczej: implementacja usługi złożonej Implementacja prywatna Fakt kompozycji nie jest publikowany na zewnątrz Wykorzystanie innych usług Brak znajomości szczegółów operacyjnych usług Realizowana przez infrastrukturę Perspektywa klienta usługi Nie ma znaczenia, czy usługa jest prosta czy złożona

70 Kompozycja vs koordynacja (2) Koordynacja Publiczne dokumenty Umieszczane w katalogach usług Wynikają ze standaryzacji Interfejsów Opisu wspólnego wykonania usług Wsparcie dla Programisty tworzącego usługę Dynamicznego wiązania Wykonanie protokołu weryfikowane przez kontroler Kontroler = zaufana strona

71 Kompozycja vs koordynacja (3) Połączenie kompozycji z koordynacją Usługa A komponuje inne usługi B, C, w sobie znany sposób Każda z konwersacji A z B, A z C, B z C Jest koordynowana przez kontroler Usługi występujące w jednym protokole koordynacji będą koordynowane wspólnie Jedna usługa może brać udział w wielu protokołach koordynacji

72 Kompozycja vs koordynacja (4) Protokół koordynacji definiuje zachowanie Zewnętrzne Publicznie udokumentowane Schemat kompozycji definiuje realizację wewnętrzną Zachowania zewnętrznego i wewnętrznego Sposób realizacji jest prywatny

73 Transformacja między koordynacją i kompozycją Przejście od koordynacji do kompozycji Możliwe Zawężamy protokół do pojedynczej roli Przejście od kompozycji do koordynacji Niemożliwe Kompozycja zawiera perspektywę jednej roli w koordynacji Brakuje danych, aby zaprojektować model koordynacji wyłącznie na podstawie jeden kompozycji

74 Kompozycja usług na bazie protokołu koordynacji (1) Schemat kompozycji odpowiada funkcjonalności pojedynczej roli w koordynacji Aktywności wynikające z protokołu koordynacji Aktywności aplikacyjne Definicja protokołu koordynacji implikuje Ograniczenia na kompozycje usługi Np.: orkiestracja

75 Kompozycja usług na bazie protokołu koordynacji (2) Ogólna procedura: Ogranicz perspektywę protokołu do pojedynczej roli R R = rola komponowanej usługi złożonej Zdefiniuj szablon schematu kompozycji Uwzględniając aktywności protokołu Logika publiczna usługi Zdefiniuj logikę prywatną usługi

76 Kompozycja usług na bazie protokołu koordynacji (3) Operacje synchroniczne na roli R Request/Response aktywności Receive/Reply Orkiestracja musi zapewnić Wykonanie Reply po Receive Operacje synchroniczne inicjowane przez rolę R Request/Response aktywość Invoke

77 Kompozycja usług na bazie protokołu koordynacji (4) Operacje asynchroniczne pochodzące od innej roli Q Modelowane jako aktywność receive Operacje asynchroniczne pochodzące od roli R Modelowane jako aktywność send W BPEL invoke + odpowiednia deklaracja wiązania z usługą

78 Kompozycja usług na bazie protokołu koordynacji (5) Przenieś inne konstrukcje protokołu koordynacji Łuki Warunki Równoległe wykonanie Na aktywności, tak jak są dane

Wsparcie kompozycji i koordynacji w standardach 79 BPEL Nastawiony na kompozycje Modeluje proces Podział aktywności na Wewnętrzne Interakcję z innymi usługami ebxml Rozróżnienie Proces biznesowy Porozumienie biznesowe Forma protokołu interakcji Sposób interakcji indywidualnych procesów biznesowych Standard kładzie nacisk na modelowanie porozumienia biznesowego

80 Porównanie elementów infrastruktury Kontroler konwersacji Sprawdzenie zgodności wykonania z protokołem Trasowanie wiadomości do silnika kompozycji Silnik kompozycji Realizacja logiki usługi Transparentnie dla kontrolera konwersacji Wiązanie instancji kompozycji z instancją konwersacji Realizacja analogiczna do wiązania instancji usługi z konwersacją przez infrastrukturę Realizacja poprzez nagłówki SOAP

81 BPEL Web Services Business Process Execution Language

82 BPEL Formalnie WS-BPEL Powszechnie przyjęta nazwa BPEL Standard definicji procesu biznesowego Standard kompozycji usług Reprezentacja Diagram aktywności UML XML Ułatwia integracje usług Różnych dostawców Działających w różnych implementacjach Wykorzystujących standardy WS-*

83 Historia BPEL (1) 2001 rok Języki własnościowe Niepełne specyfikacje Przykłady Web Services Flow Langauge (IBM) Xlang (Microsoft) 2003 rok BPEL4WS v1.0 i v1.1 Połączenie rozwiązań IBM i Microsoft 2004 rok WS-BPEL 2.0 Zmiana nazwy Nowe aktywności: repeatuntil, validate, foreach, rethrow, extensionactivity, compensatescope

84 Historia BPEL (2) 2007 rok BPEL4People Aktywności realizowane przez ludzi jako komponenty w procesie biznesowym WS-HumanTask Opis specyfikacji zadań dla ludzi Właściwości Zachowania i operacje manipulujące właściwościami Specyfikacja niezależna od BPEL

85 Dwa paradygmaty kompozycji Orkiestracja Choreografia

86 Orkiestracja w BPEL Wyznaczona usługa centralna Realizuje proces biznesowy Odpowiednik centralnego zarządcy wykonania Pozostałe usługi Świadczą operacje na rzecz usługi centralnej Nie mają świadomości uczestnictwa w procesie biznesowym Źródło: Matjaz B. Juric, A Hands-on Introduction to BPEL, Oracle Corporation http://www.oracle.com/technetwork/articles/matjaz-bpel1-090575.html

87 Choreografia w BPEL Wiele usług wspólnie realizuje proces biznesowy Model kooperacyjny usługi świadome Roli w procesie Stanu wykonania procesu Operacje usług wykonane w odpowiednich krokach procesu Wiadomości koordynujące wykonanie Źródło: Matjaz B. Juric, A Hands-on Introduction to BPEL, Oracle Corporation http://www.oracle.com/technetwork/articles/matjaz-bpel1-090575.html

88 Zalety orkiestracji względem choreografii Zarządca wykonania jest znany Odpowiedzialność za wykonanie leży po jednej stronie Łatwość utrzymania Usługi mogą być wykorzystane bez modyfikacji Wystąpienie błędów Wykonanie alternatywnego scenariusza Usługa nie musi wiedzieć, że ma kompensować swój stan w wyniku awarii innej usługi

89 Zalety choreografii względem orkiestracji Rozproszone zarządzanie Bardziej odporne na awarię pojedynczych usług Ale: Wymaga odpowiednich procedur obsługi W mniejszych/rozwojowych systemach Zazwyczaj taka procedura nie jest zaimplementowana W dużych systemach Doświadczenie zebrane przy rozwoju sprawia, że takie procedury istnieją

90 Reprezentacje procesu biznesowego w BPEL Proces wykonywalny Ang. Executable Process Specyfikacja detali procesu Zgodne z paradygmatem orkiestracji Abstrakcyjny protokół biznesowy Ang. Abstract Business Protocol Specyfikacja wymiany publicznych wiadomości Brak wewnętrznych detali procesu Zgodne z paradygmatem choreografii

91 Główne elementy procesu biznesowego Aktywność Krok wykonania Deklaracje zmiennych <variable> Deklaracje powiązań usług <partnerlink>

92 Podział aktywności (1) Aktywności proste <invoke> Wywołanie innej usługi <receive> Oczekiwanie na wywołanie bieżącej usługi <reply> Utworzenie odpowiedzi na żądanie synchroniczne <assign> Przypisanie wartości do zmiennej <throw> Rzut wyjątkiem <wait> Oczekiwanie przez zadany czas <terminate> Zakończenie całego procesu

93 Podział aktywności (2) Aktywności ustrukturalizowane <sequence> Lista aktywności do wykonania <flow> Zbiór aktywności do równoległego wykonania <if> Warunkowe wykonanie <while>, <repeatuntil>, <foreach> Pętle <pick> Wybór jednej z wielu możliwych dróg wykonania

94 Przykładowy model w BPEL Źródło: Matjaz B. Juric, A Hands-on Introduction to BPEL, Oracle Corporation http://www.oracle.com/technetwork/articles/matjaz-bpel1-090575.html

95 Budowa procesu biznesowego <process name="businesstravelprocess" targetnamespace="http://packtpub.com/bpel/travel/" xmlns="http://docs.oasis-open.org/wsbpel/2.0/process/executable" xmlns:trv="http://packtpub.com/bpel/travel/" xmlns:emp="http://packtpub.com/service/employee/" xmlns:aln="http://packtpub.com/service/airline/" > <partnerlinks> <!-- Deklaracje wiązań usług --> </partnerlinks> <variables> <!-- Deklaracje zmiennych --> </variables> <sequence> <!-- Główna część procesu biznesowego, Start następuje po żądaniu z zewnątrz. --> </sequence> </process>

95 Budowa procesu biznesowego Podstawowa <process name="businesstravelprocess" targetnamespace="http://packtpub.com/bpel/travel/" przestrzeń nazw BPEL xmlns="http://docs.oasis-open.org/wsbpel/2.0/process/executable" xmlns:trv="http://packtpub.com/bpel/travel/" xmlns:emp="http://packtpub.com/service/employee/" xmlns:aln="http://packtpub.com/service/airline/" > <partnerlinks> <!-- Deklaracje wiązań usług --> </partnerlinks> <variables> <!-- Deklaracje zmiennych --> </variables> <sequence> <!-- Główna część procesu biznesowego, Start następuje po żądaniu z zewnątrz. --> </sequence> </process>

96 <partnerlink> Wiązanie między usługami Zdefiniowane w WSDL Definicja interfejsu i sposobu dostępu Sposób na dynamiczne wiązanie XML (WSDL) pozwala na import Dokumentów Fragmentów dokumentów

97 <partnerlinktype> Definicja typu wiązania z usługą Dla synchronicznego interfejsu Jedna rola Wywołania w jedną stronę Dla asynchronicznego interfejsu Dwie role Jedna dla wywołania operacji przez klienta Druga dla wysłania odpowiedzi Callback

98 Deklaracja typu partnerlink procesu biznesowego z poprzedniego przykładu <plnk:partnerlinktype name="travellt" > <plnk:role name="travelservice"> <plnk:porttype name="tns:travelapprovalpt" /> </plnk:role> <plnk:role name="travelservicecustomer"> <plnk:porttype name="tns:clientcallbackpt" /> </plnk:role> </plnk:partnerlinktype>

98 Deklaracja typu partnerlink procesu biznesowego z poprzedniego przykładu <plnk:partnerlinktype name="travellt" > <plnk:role name="travelservice"> <plnk:porttype name="tns:travelapprovalpt" /> </plnk:role> <plnk:role name="travelservicecustomer"> <plnk:porttype name="tns:clientcallbackpt" /> </plnk:role> </plnk:partnerlinktype>

98 Deklaracja typu partnerlink procesu biznesowego z poprzedniego przykładu <plnk:partnerlinktype name="travellt" > <plnk:role name="travelservice"> <plnk:porttype name="tns:travelapprovalpt" /> </plnk:role> <plnk:role name="travelservicecustomer"> <plnk:porttype name="tns:clientcallbackpt" /> </plnk:role> </plnk:partnerlinktype> Wskazanie na definicję WSDL Wskazanie na definicję WSDL

99 Deklaracja typu partnerlink dla pozostałych usług <plnk:partnerlinktype name="employeelt"> <plnk:role name="employeetravelstatusservice"> <plnk:porttype name="tns:employeetravelstatuspt" /> </plnk:role> </plnk:partnerlinktype> <plnk:partnerlinktype name="flightlt"> <plnk:role name="airlineservice"> <plnk:porttype name="tns:flightavailabilitypt" /> </plnk:role> <plnk:role name="airlinecustomer"> <plnk:porttype name="tns:flightcallbackpt" /> </plnk:role> </plnk:partnerlinktype>

99 Deklaracja typu partnerlink dla pozostałych usług <plnk:partnerlinktype name="employeelt"> <plnk:role name="employeetravelstatusservice"> <plnk:porttype name="tns:employeetravelstatuspt" /> </plnk:role> </plnk:partnerlinktype> <plnk:partnerlinktype name="flightlt"> <plnk:role name="airlineservice"> <plnk:porttype name="tns:flightavailabilitypt" /> </plnk:role> <plnk:role name="airlinecustomer"> <plnk:porttype name="tns:flightcallbackpt" /> </plnk:role> </plnk:partnerlinktype>

99 Deklaracja typu partnerlink dla pozostałych usług <plnk:partnerlinktype name="employeelt"> <plnk:role name="employeetravelstatusservice"> <plnk:porttype name="tns:employeetravelstatuspt" /> </plnk:role> </plnk:partnerlinktype> <plnk:partnerlinktype name="flightlt"> <plnk:role name="airlineservice"> <plnk:porttype name="tns:flightavailabilitypt" /> </plnk:role> <plnk:role name="airlinecustomer"> <plnk:porttype name="tns:flightcallbackpt" /> </plnk:role> </plnk:partnerlinktype>

100 Deklaracja konkretnych wiązań <partnerlink> <partnerlinks> <partnerlink name="client" partnerlinktype="trv:travellt" myrole="travelservice" partnerrole="travelservicecustomer"/> <partnerlink name="employeetravelstatus" partnerlinktype="emp:employeelt" partnerrole="employeetravelstatusservice"/> <partnerlink name="americanairlines" partnerlinktype="aln:flightlt" myrole="airlinecustomer" partnerrole="airlineservice"/> <partnerlink name="deltaairlines" partnerlinktype="aln:flightlt" myrole="airlinecustomer" partnerrole="airlineservice"/> </partnerlinks>

100 Deklaracja konkretnych wiązań <partnerlink> <partnerlinks> <partnerlink name="client" partnerlinktype="trv:travellt" myrole="travelservice" partnerrole="travelservicecustomer"/> <partnerlink name="employeetravelstatus" partnerlinktype="emp:employeelt" partnerrole="employeetravelstatusservice"/> <partnerlink name="americanairlines" partnerlinktype="aln:flightlt" myrole="airlinecustomer" partnerrole="airlineservice"/> <partnerlink name="deltaairlines" partnerlinktype="aln:flightlt" myrole="airlinecustomer" partnerrole="airlineservice"/> </partnerlinks>

100 Deklaracja konkretnych wiązań <partnerlink> <partnerlinks> <partnerlink name="client" partnerlinktype="trv:travellt" myrole="travelservice" partnerrole="travelservicecustomer"/> <partnerlink name="employeetravelstatus" partnerlinktype="emp:employeelt" partnerrole="employeetravelstatusservice"/> <partnerlink name="americanairlines" partnerlinktype="aln:flightlt" myrole="airlinecustomer" partnerrole="airlineservice"/> <partnerlink name="deltaairlines" partnerlinktype="aln:flightlt" myrole="airlinecustomer" partnerrole="airlineservice"/> </partnerlinks>

100 Deklaracja konkretnych wiązań <partnerlink> <partnerlinks> <partnerlink name="client" partnerlinktype="trv:travellt" myrole="travelservice" partnerrole="travelservicecustomer"/> <partnerlink name="employeetravelstatus" partnerlinktype="emp:employeelt" partnerrole="employeetravelstatusservice"/> <partnerlink name="americanairlines" partnerlinktype="aln:flightlt" myrole="airlinecustomer" partnerrole="airlineservice"/> <partnerlink name="deltaairlines" partnerlinktype="aln:flightlt" myrole="airlinecustomer" partnerrole="airlineservice"/> </partnerlinks>

101 Zmienne w BPEL (1) Przechowywanie wiadomości Zwykle Transformacja wiadomości Zmiana formatu Jedna zmienna dla każdej wiadomości Wysłanej Odebranej

102 Zmienne w BPEL (2) <variables> <!-- input for this process --> <variable name="travelrequest" messagetype="trv:travelrequestmessage"/> <!-- input for the Employee Travel Status Web service --> <variable name="employeetravelstatusrequest" messagetype="emp:employeetravelstatusrequestmessage"/> <!-- output from the Employee Travel Status Web service --> <variable name="employeetravelstatusresponse" messagetype="emp:employeetravelstatusresponsemessage"/> <!-- input for American and Delta Web services --> <variable name="flightdetails" messagetype="aln:flightticketrequestmessage"/> <!-- output from American Airlines --> <variable name="flightresponseaa" messagetype="aln:travelresponsemessage"/> <!-- output from Delta Airlines --> <variable name="flightresponseda" messagetype="aln:travelresponsemessage"/> <!-- output from BPEL process --> <variable name="travelresponse" messagetype="aln:travelresponsemessage"/> </variables>

103 Główna część procesu (1) Zazwyczaj Rozpoczęcie od bloku <sequence> Możliwy inny sposób grupowania aktywności Np.: <pick> Dalej: odbiór wiadomości początkowej <receive>

104 Główna część procesu (2) <sequence> <!-- Receive the initial request for business travel from client --> <receive partnerlink="client" porttype="trv:travelapprovalpt" operation="travelapproval" variable="travelrequest" createinstance="yes" /> <!-- Prepare the input for the Employee Travel Status Web Service --> <assign> <copy> <from variable="travelrequest" part="employee"/> <to variable="employeetravelstatusrequest" part="employee"/> </copy> </assign> <!-- Synchronously invoke the Employee Travel Status Web Service --> <invoke partnerlink="employeetravelstatus" porttype="emp:employeetravelstatuspt" operation="employeetravelstatus" inputvariable="employeetravelstatusrequest" outputvariable="employeetravelstatusresponse" /> <!-- Biznesowe... Systemy --> Rozproszone </sequence>

104 Główna część procesu (2) <sequence> <!-- Receive the initial request for business travel from client --> <receive partnerlink="client" porttype="trv:travelapprovalpt" operation="travelapproval" variable="travelrequest" createinstance="yes" /> <!-- Prepare the input for the Employee Travel Status Web Service --> <assign> <copy> <from variable="travelrequest" part="employee"/> <to variable="employeetravelstatusrequest" part="employee"/> </copy> </assign> <!-- Synchronously invoke the Employee Travel Status Web Service --> <invoke partnerlink="employeetravelstatus" porttype="emp:employeetravelstatuspt" operation="employeetravelstatus" inputvariable="employeetravelstatusrequest" outputvariable="employeetravelstatusresponse" /> <!-- Biznesowe... Systemy --> Rozproszone </sequence>

104 Główna część procesu (2) <sequence> <!-- Receive the initial request for business travel from client --> <receive partnerlink="client" porttype="trv:travelapprovalpt" operation="travelapproval" variable="travelrequest" createinstance="yes" /> <!-- Prepare the input for the Employee Travel Status Web Service --> <assign> <copy> <from variable="travelrequest" part="employee"/> <to variable="employeetravelstatusrequest" part="employee"/> </copy> </assign> <!-- Synchronously invoke the Employee Travel Status Web Service --> <invoke partnerlink="employeetravelstatus" porttype="emp:employeetravelstatuspt" operation="employeetravelstatus" inputvariable="employeetravelstatusrequest" outputvariable="employeetravelstatusresponse" /> <!-- Biznesowe... Systemy --> Rozproszone </sequence>

<!--... --> <!-- Prepare the input for AA and DA --> <assign> <copy> <from variable="travelrequest" part="flightdata"/> <to variable="flightdetails" part="flightdata"/> </copy> <copy> <from variable="employeetravelstatusresponse" part="travelclass"/> <to variable="flightdetails" part="travelclass"/> </copy> </assign> 105 <!-- Make a concurrent invocation to AA in DA --> <flow> <sequence> <!-- Async invoke of the AA Web service and wait for the callback--> <invoke partnerlink="americanairlines" porttype="aln:flightavailabilitypt" operation="flightavailability" inputvariable="flightdetails" /> <receive partnerlink="americanairlines" porttype="aln:flightcallbackpt" operation="flightticketcallback" variable="flightresponseaa" /> </sequence> <sequence> <!-- Async invoke of the DA Web service and wait for the callback--> <invoke partnerlink="deltaairlines" porttype="aln:flightavailabilitypt" operation="flightavailability" inputvariable="flightdetails" /> <receive partnerlink="deltaairlines" porttype="aln:flightcallbackpt" operation="flightticketcallback" variable="flightresponseda" /> </sequence> </flow> <!-- Biznesowe... --> Systemy Rozproszone

<!--... --> <!-- Prepare the input for AA and DA --> <assign> <copy> <from variable="travelrequest" part="flightdata"/> <to variable="flightdetails" part="flightdata"/> </copy> <copy> <from variable="employeetravelstatusresponse" part="travelclass"/> <to variable="flightdetails" part="travelclass"/> </copy> </assign> 105 <!-- Make a concurrent invocation to AA in DA --> <flow> <sequence> <!-- Async invoke of the AA Web service and wait for the callback--> <invoke partnerlink="americanairlines" porttype="aln:flightavailabilitypt" operation="flightavailability" inputvariable="flightdetails" /> <receive partnerlink="americanairlines" porttype="aln:flightcallbackpt" operation="flightticketcallback" variable="flightresponseaa" /> </sequence> <sequence> <!-- Async invoke of the DA Web service and wait for the callback--> <invoke partnerlink="deltaairlines" porttype="aln:flightavailabilitypt" operation="flightavailability" inputvariable="flightdetails" /> <receive partnerlink="deltaairlines" porttype="aln:flightcallbackpt" operation="flightticketcallback" variable="flightresponseda" /> </sequence> </flow> <!-- Biznesowe... --> Systemy Rozproszone

<!--... --> <!-- Prepare the input for AA and DA --> <assign> <copy> <from variable="travelrequest" part="flightdata"/> <to variable="flightdetails" part="flightdata"/> </copy> <copy> <from variable="employeetravelstatusresponse" part="travelclass"/> <to variable="flightdetails" part="travelclass"/> </copy> </assign> 105 <!-- Make a concurrent invocation to AA in DA --> <flow> <sequence> <!-- Async invoke of the AA Web service and wait for the callback--> <invoke partnerlink="americanairlines" porttype="aln:flightavailabilitypt" operation="flightavailability" inputvariable="flightdetails" /> <receive partnerlink="americanairlines" porttype="aln:flightcallbackpt" operation="flightticketcallback" variable="flightresponseaa" /> </sequence> <sequence> <!-- Async invoke of the DA Web service and wait for the callback--> <invoke partnerlink="deltaairlines" porttype="aln:flightavailabilitypt" operation="flightavailability" inputvariable="flightdetails" /> <receive partnerlink="deltaairlines" porttype="aln:flightcallbackpt" operation="flightticketcallback" variable="flightresponseda" /> </sequence> </flow> <!-- Biznesowe... --> Systemy Rozproszone

<!--... --> <!-- Prepare the input for AA and DA --> <assign> <copy> <from variable="travelrequest" part="flightdata"/> <to variable="flightdetails" part="flightdata"/> </copy> <copy> <from variable="employeetravelstatusresponse" part="travelclass"/> <to variable="flightdetails" part="travelclass"/> </copy> </assign> 105 <!-- Make a concurrent invocation to AA in DA --> <flow> <sequence> <!-- Async invoke of the AA Web service and wait for the callback--> <invoke partnerlink="americanairlines" porttype="aln:flightavailabilitypt" operation="flightavailability" inputvariable="flightdetails" /> <receive partnerlink="americanairlines" porttype="aln:flightcallbackpt" operation="flightticketcallback" variable="flightresponseaa" /> </sequence> <sequence> <!-- Async invoke of the DA Web service and wait for the callback--> <invoke partnerlink="deltaairlines" porttype="aln:flightavailabilitypt" operation="flightavailability" inputvariable="flightdetails" /> <receive partnerlink="deltaairlines" porttype="aln:flightcallbackpt" operation="flightticketcallback" variable="flightresponseda" /> </sequence> </flow> <!-- Biznesowe... --> Systemy Rozproszone

<!--... --> <!-- Select the best offer and construct the TravelResponse --> <if> <condition expressionlanguage="anyuri"> bpel:getvariableproperty('flightresponseda', '/confirmationdata/price')" > bpel:getvariableproperty('flightresponseaa', '/confirmationdata/price') </condition> <sequence> <!-- Select American Airlines --> <assign> <copy> <from variable="flightresponseaa" /> <to variable="travelresponse" /> </copy> </assign> </sequence> <else> <sequence> <!-- Select Delta Airlines --> <assign> <copy> <from variable="flightresponseda" /> <to variable="travelresponse" /> </copy> </assign> </sequence> </else> </if> <!--... --> 106

<!--... --> <!-- Select the best offer and construct the TravelResponse --> <if> <condition expressionlanguage="anyuri"> bpel:getvariableproperty('flightresponseda', '/confirmationdata/price')" > bpel:getvariableproperty('flightresponseaa', '/confirmationdata/price') </condition> <sequence> <!-- Select American Airlines --> <assign> <copy> <from variable="flightresponseaa" /> <to variable="travelresponse" /> </copy> </assign> </sequence> <else> <sequence> <!-- Select Delta Airlines --> <assign> <copy> <from variable="flightresponseda" /> <to variable="travelresponse" /> </copy> </assign> </sequence> </else> </if> <!--... --> 106

<!--... --> <!-- Select the best offer and construct the TravelResponse --> <if> <condition expressionlanguage="anyuri"> bpel:getvariableproperty('flightresponseda', '/confirmationdata/price')" > bpel:getvariableproperty('flightresponseaa', '/confirmationdata/price') </condition> <sequence> <!-- Select American Airlines --> <assign> <copy> <from variable="flightresponseaa" /> <to variable="travelresponse" /> </copy> </assign> </sequence> <else> <sequence> <!-- Select Delta Airlines --> <assign> <copy> <from variable="flightresponseda" /> <to variable="travelresponse" /> </copy> </assign> </sequence> </else> </if> <!--... --> 106

<!--... --> <!-- Select the best offer and construct the TravelResponse --> <if> <condition expressionlanguage="anyuri"> bpel:getvariableproperty('flightresponseda', '/confirmationdata/price')" > bpel:getvariableproperty('flightresponseaa', '/confirmationdata/price') </condition> <sequence> <!-- Select American Airlines --> <assign> <copy> <from variable="flightresponseaa" /> <to variable="travelresponse" /> </copy> </assign> </sequence> <else> <sequence> <!-- Select Delta Airlines --> <assign> <copy> <from variable="flightresponseda" /> <to variable="travelresponse" /> </copy> </assign> </sequence> </else> </if> <!--... --> 106

107 Główna część procesu (5) <!--... --> <!-- Make a callback to the client --> <reply partnerlink="client" porttype="trv:clientcallbackpt" operation="clientcallback" inputvariable="travelresponse" />

108 Sygnalizowanie wyjątków Element <throw> Atrybut faultname typ wyjątku Atrybut faultvariable zawartość wyjątku Przykład: <sequence> <!-- Create the fault --> <assign> <copy> <from expression="string('credit card not approved')" /> <to variable="fault" part="error" /> </copy> </assign> <!-- Throw fault --> <throw faultname="buy:creditcardnotapproved" faultvariable="fault" /> </sequence>

109 Obsługa wyjątków (1) Definicja procedur obsługi wyjątków Ang. Handler Sekcja <faulthandlers> Dla każdego błędu oddzielny element <catch> Atrybut faultname typ błędu Atrybut faultvariable zawartość błędu Musi pasować typ zmiennej Musi wystąpić przynajmniej jeden z powyższych Element <catchall> Obsługa błędów nieobsłużonych przez pozostałe procedury

110 Obsługa wyjątków (2) Wyjątek rzucony bez powiązanej zmiennej (danych) Jeśli istnieje <catch> Z pasującym typem wyjątku Bez wyspecyfikowanej zmiennej To: uruchom procedurę w <catch> Jeśli istnieje <catchall> To: uruchom procedurę w <catchall> W przeciwnym wypadku zastosuj domyślną procedurę obsługi wyjątków Kompensacja Zatrzymanie procesu

111 Obsługa wyjątków (3) Wyjątek rzucony z powiązaną zmienną (dane) <catch> Z pasującym typem wyjątku Z pasującym typem zmiennej Jeśli dane wyjątku są wiadomością zdefiniowaną w WSDL Uruchom <catch>, dla którego nazwa wyjątku i nazwa zmiennej pokrywa się z faultname i faultelement we wiadomości <catch> Z pasującym typem wyjątku Bez wyspecyfikowanej zmiennej <catch> Bez typu wyjątku Z pasującym typem zmiennej Jeśli dane wyjątku są wiadomością zdefiniowaną w WSDL Nazwa wyjątku nie jest podana we wiadomości Uruchom <catch>, dla którego nazwa zmiennej pokrywa się z faultelement we wiadomości Jeśli istnieje <catchall> To: uruchom procedurę w <catchall> W przeciwnym wypadku zastosuj domyślną procedurę obsługi wyjątków

112 Obsługa wyjątków (3) <faulthandlers> <catch faultname="buy:creditcardnotapproved"> <!-- Dopasowanie wg typu błędu, wartość zmiennej niedostępna w środku --> </catch> <catch faultname="buy:creditcardnotapproved" faultvariable="fault"> <!-- Dopasowanie wg typu błędu i typu zmiennej zawierającej opis błędu --> </catch> <catch faultvariable="fault"> <!-- Dopasowanie wg typu zmiennej zawierającej opis błędu --> </catch> <catchall> <!-- Obsługa wszystkich wcześniej nieobsłużonych błędów --> </catchall> </faulthandlers>