Tworzenie elastycznego systemu w dynamicznym
Transkrypt
Tworzenie elastycznego systemu w dynamicznym
XIV Konferencja PLOUG Szczyrk Październik 2008 Tworzenie systemu informatycznego w dynamicznie zmieniającym się środowisku biznesowym w oparciu o technologie workflow, usługi sieciowe i ESB Marcin Pisanko, Rafał Renk, Rafał Knapik, Witold Hołubowicz Uniwersytet im. Adama Mickiewicza, Poznań e–mail: [email protected], [email protected], [email protected], [email protected] Abstrakt. W niniejszym artykule przedstawiona zostanie metoda integracji systemu opartego na technologii workflow z zewnętrznymi komponentami (np. aplikacjami, procesami lub urządzeniami fizycznymi) posiadającymi różne interfejsy Web Service. Opisany sposób integracji zakłada, że komponenty zewnętrzne posiadają różniące się interfejsy oraz mogą być dynamicznie dodawane do działającego systemu. Proponowana meto-da opiera się na wykorzystaniu języka BPEL (ang. Business Process Execution Language) w połączeniu z komponentem ESB (ang. Enterprise Service Bus) w celu dynamicznej integracji zewnętrznych Web Serv-ice'ów. Jako przykład implementacji przedstawiony zostanie moduł invokeATP stworzony w ramach pro-jektu europejskiego VISP (ang. Virtual Internet Service Provider). Informacja o autorach. MARCIN PISANKO jest absolwentem Uniwersytetu Technologiczno-Przemysłowego w Bydgoszczy. W 2007 roku ukończył studia o kierunku Elektronika i Telekomunikacja. Odbył staż zawodowy w firmie Lucent Technologies (obecnie AlcatelLucent), gdzie zajmował się urządzeniami dostępowymi ADSL. Następnie w firmie ITTI Sp. z o.o. zajmował się problematyką automatyzacji procesów biznesowych oraz systemami workflow. Od 2002 roku pracuje w firmie ZP Serwis w Bydgoszczy, obecnie na stanowisku projektanta-programisty, gdzie zajmuje się tworzeniem aplikacji i systemów wykorzystujących przenośne komputery przemysłowe. Poza pracą w ZP Serwis zaangażowany jest jako pracownik kontraktowy Uniwersytetu im. Adama Mickiewicza w finansowany przez Unię Europejską projekt europejski VISP, którego celem jest stworzenie platformy umożliwiającej integrację usług internetowych świadczonych przez różnych dostawców usług. RAFAŁ KNAPIK ukończył kierunek Informatyka Politechniki Poznańskiej w 2001 roku. Od 1999 do 2001 roku zajmował się tworzeniem aplikacji internetowych w firmie 7bulls.com. Następnie zajmował się administracją serwera internetowego w firmie Syberia, a przez kolejne 3 lata zatrudniony był na stanowisku programisty-analityka w firmie Polarys, gdzie zajmował się aplikacjami bankowymi oraz systemami typu firewall. Obecnie pracuje w firmie ITTI na stanowisku starszego konsultanta. Brał udział w takich projektach, jak system udostępniania informacji przez Internet za pomocą quasi-inteligentnego modułu komunikacyjnego, system archiwizacji plików historycznych systemu bankowości detalicznej, system wymiany informacji o klientach z centralą grupy bankowej za pomocą kolejek MQSeries oraz tworzenie strategii informatyzacji dla jednostki administracji publicznej. Poza pracą w ITTI zaangażowany jest jako pracownik kontraktowy Uniwersytetu im. Adama Mickiewicza w finansowany przez Unię Europejską projekt europejski VISP, którego celem jest stworzenie platformy umożliwiającej integrację usług internetowych świadczonych przez różnych dostawców usług. RAFAŁ RENK jest absolwentem Akademii Techniczno-Rolniczej (obecnie Uniwersytet Technologiczno-Przemysłowy) w Bydgoszczy, którą ukończył w 1998 roku. W ATR pracował nad zagadnieniami związanymi z trójwymiarowymi światami wirtualnymi. Od 1998 roku jest pracownikiem ITTI, gdzie piastuje obecnie stanowisko dyrektora ds. rozwoju. Rafał Renk wykonywał oraz współkierował szeregiem projektów poruszających tematykę sieci telekomunikacyjnych w aspekcie technicznym i biznesowym oraz zagadnień informatycznych związanych z: inżynierią oprogramowania, technologiami internetowymi, aplikacjami i systemami baz danych oraz technologią i metodyką zdalnego kształcenia multimedialnego z systemami zdalnego nauczania oraz projektowania hurtowni danych. Projekty o tematyce telekomunikacyjnej dotyczyły zarówno rynku polskiego, jak i międzynarodowego, a ich tematyka obejmowała m.in. analizy rynkowe (w zakresie telefonii IP, transmisji danych itp.), tworzenie strategii budowy i rozbudowy sieci telekomunikacyjnych zarówno dostępowych jak i szkieletowych a także zagadnienia techniczne związane z VoIP, sieciami dostępowymi, sieciami szkieletowymi, protokołami i standardami technologii internetowych, strumieniowania, jakością usług w sieci IP oraz systemów zdalnego nauczania. Prace związane z systemami zdalnego nauczania obejmowały zagadnienia związane ze standaryzacją tego typu systemów oraz przeprowadzania i automatycznej oceny wyników egzaminów (wykorzystanie języka XML i ontologii). Rafał Renk jest również autorem bądź współautorem licznych publikacji i wystąpień na krajowych oraz zagranicznych konferencjach. WITOLD HOŁUBOWICZ jest absolwentem Wydziału Elektrycznego Politechniki Poznańskiej, gdzie uzyskał stopnie doktora i doktora habilitowanego. W latach 1987-89 był wykładowcą na Politechnice w Nowym Jorku, a w latach 1992-96 we Francusko-Polskiej Wyższej Szkole Nowych Technik Informatycznych i Komunikacyjnych (EFP) w Poznaniu. Od października 1996 r. jest profesorem na Wydziale Telekomunikacji i Elektrotechniki Uniwersytetu Technologiczno-Przemysłowego (była Akademia Techniczno-Rolnicza) w Bydgoszczy. Jest również profesorem i kierownikiem Zakładu Informatyki Stosowanej na Uniwersytecie im. A. Mickiewicza (od 2003 roku). Od 1996 r. jest także zawodowo związany z Instytutem Technik Telekomunikacyjnych i Informatycznych (ITTI) w Poznaniu, gdzie pełni obecnie funkcję prezesa zarządu. Jest również współtwórcą i przewodniczącym Komitetu Programowego Krajowej Konferencji Radiokomunikacji Ruchomej w Poznaniu (KKRR) w latach 1996-2000. Zainteresowania zawodowe Witolda Hołubowicza obejmują m.in. radiokomunikację (w tym technologie transmisji z poszerzonym widmem CDMA), aspekty techniczno-rynkowe sieci komunikacji ruchomej GSM i UMTS, aspekty usługowe sieci komórkowych i konwergentnych. Uczestniczył i kierował wieloma projektami naukowo-badawczymi i wdrożeniowymi, w tym również realizowanymi pod egidą Komisji Europejskiej. Witold Hołubowicz jest autorem ponad 100 publikacji zamieszczonych w czasopismach naukowych krajowych i zagranicznych oraz w materiałach konferencyjnych. Jest również współautorem 4 książek z zakresu łączności bezprzewodowej. Tworzenie systemu informatycznego w dynamicznie zmieniającym się środowisku... 153 Wprowadzenie Procesy biznesowe modelowane za pomocą standardu WS-BPEL 2.0 (w dalszej części określany jako BPEL) [BPEL2.0] koordynują przepływ działań i zapewniają odpowiedni przepływ informacji pomiędzy tymi działaniami. Większość działań procesu jest wykonywanych poprzez zewnętrzne usługi sieciowe (ang. Web Services), jedynie proste działania mogą być implementowane przy użyciu samego języka BPEL. W niektórych sytuacjach to samo działanie procesu może być wykonywane poprzez różnorodne usługi dostarczane przez różnych dostawców usług. Innymi słowy w jednym przypadku w procesie można użyć dostawcę usługi A w innym przypadku tego samego procesu można skorzystać z dostawcy usługi B. W niniejszym artykule termin system dynamiczny będzie używany na określenie systemu, w którym zachodzi dynamiczny wybór usług. BPEL posiada podstawowe cechy, które umożliwiają tworzenie procesów dla systemów dynamicznych: • standardowy mechanizm dla korelacji wiadomości w komunikacji asynchronicznej, • możliwość ustawienia w sposób dynamiczny partnerskich hiperłączy stanowiących punkty końcowe – adresy usług, z którymi komunikuje się proces, • wbudowany procesor XSLT [XSLT]. Wymienione cechy pozwalają na dynamiczny wybór dostawcy oferującego usługę o wcześniej ustalonym interfejsie, umożliwiają one również dynamiczne przetwarzanie i tworzenie wiadomości przy użyciu np. transformacji XLST stworzonych dla tego dostawcy. Poniżej przedstawiono model systemu, który komunikuje się z interfejsami usługi sieciowej różnych urządzeń fizycznych, które mogą dynamicznie zostać dodane do systemu. Schemat takiej sytuacji jest przedstawiony na Rysunku 1. Reszta systemu komunikuje się z usługami sieciowymi różnych urządzeń w zależności od informacji dostarczanych przez resztę systemu. Rys. 1. Komunikacja systemu z zewnętrznymii urządzeniami fizycznymi Jeśli urządzenia fizyczne przynależą do tej samej klasy, czyli posiadają podobne funkcjonalności, ich interfejsy zwykle są podobne - zawierają podobne operacje, które z kolei wytwarzają podobne informacje. Jednakże interfejsy mogą nie być takie same – operacje mogą np. być różnie 154 Marcin Pisanko, Rafał Renk, Rafał Knapik, Witold Hołubowicz nazwane, posiadać odmienny schemat komunikacyjny i inną strukturę wiadomości. Oczywistym jest fakt, że różni dostawcy nie implementują w swoich urządzeniach tego samego interfejsu usługi sieciowej. Proste rozwiązania szerzej użyte w silnikach przepływu pracy, takie jak dynamiczne przydzielanie adresów punktów końcowych usługi sieciowej, są wciąż zbyt ograniczone by rozwiązać przedstawiony powyżej problem ponieważ w takich przypadkach system ma możliwość komunikacji wyłącznie z określonymi wcześniej interfejsami usług. W dalszej części tego artykułu omówiona zostanie możliwość użycia języka BPEL łącznie z komponentem Enterprise Service Bus (ESB), brokerem SOAP, w celu integracji nowych usług z ich specyficznymi interfejsami w systemie dynamicznym. Moduł invokeATP aplikacji VISP zostanie przedstawiony jako przykład takiego rozwiązania. Projekt i platforma VISP VISP (z ang. Virtual Internet Service Provider, czyli Wirtualny Dostawca Usług Internetu) to projekt typu STREP (z ang. Specific Targeted Research Project) realizowany w ramach 6 Programu Ramowego (FP6 IST). Projekt wpisuje się w dział „eBiznes” w ramach programu badawczo-rozwojowego „Integracja i wzmocnienie obszaru badań europejskich”. Głównym celem VISP jest zbudowanie platformy oprogramowania dla klastra zrzeszającego Małe i Średnie Przedsiębiorstwa, który działałby jako samodzielna jednostka biznesowa w różnych dynamicznych modelach biznesowych, tak aby ułatwiać dostarczanie rozwiązań z zakresu działalności ISP (z ang. Internet Service Provider) zaadoptowanego do lokalnych potrzeb biznesowych. Podczas realizacji projektu VISP usługi świadczone najczęściej przez ISP rozkładane były na tzw. bloki składowe, czyli samodzielne usługi wielokrotnego użytku. Bloki te w trakcie pracy klastra mogłyby być łączone w pakiety rozwiązań dostosowane dla potrzeb klientów. W projekcie VISP [VISP_D4.4] zostało zidentyfikowanych i opisanych niemal 100 bloków składowych. Kolejnym celem projektu było zautomatyzowanie procesu dostarczania usług. Zauważono, że wszystkie działania jakie podejmuje ISP w ramach oferowanych usług mogą być automatycznie wywoływane poprzez silniki przepływu pracy wykonujące procesy zwane w VISP „procesami technicznymi”. Dostawca usługi wykonuje dany proces techniczny w celu wykonania operacji w ramach określonej usługi np. aktywowania lub deaktywowania usługi dla klienta. Procesy techniczne są określone ze względu na usługę, wybraną technologię, użyte urządzenie techniczne i wewnętrzne procedury ISP. Dokonano analizy cyklu życia usługi, która wykazała, że (uogólniając) każdy z cykli składa się z następujących stanów: instalacja, deinstalacja, aktywacja, deaktywacja, aktualizacja, zmiana lokacji, import, zatrzymanie, wznowienie, resetowanie, naprawianie i testowanie. Naturalne jest przypisanie każdemu ze stanów cyklu życiowego usługi procesu technicznego. Procesy techniczne zostały podzielone na trzy grupy: • procesy administracyjne (ATP, z ang. administrative technical processes) – procesy tech- niczne, które obejmują jeden ze stanów cyklu życiowego usługi i mogą używać procesów z grupy TTP oraz HTP, • procesy narzędziowe (TTP, z ang. toolbox technical processes) – małe podprocesy wielo- krotnego użytku wykonujące proste modyfikacje ustawień urządzeń sieciowych, • procesy techniczne z udziałem człowieka (HTP, z ang. human technical processes) – pod- procesy wymagające interakcji z człowiekiem. Tworzenie systemu informatycznego w dynamicznie zmieniającym się środowisku... 155 Platforma VISP komunikuje się bezpośrednio tylko z technicznymi procesami administracyjnymi (ATP). Procesy techniczne są specyficzne dla danego operatora ISP i będą w przyszłości tworzone wewnętrznie przez operatorów ISP. W projekcie VISP zostało zaprojektowanych tylko kilka procesów technicznych dla trzech wybranych usług. Prawdziwym wyzwaniem okazało się zaprojektowanie architektury, która umożliwiłaby operatorowi ISP na tworzenie nowych procesów technicznych i dynamiczne integrowanie ich z wykorzystywanym systemem. Zaprojektowano i stworzono komponent invokeATP, który odwołuje się do nowych technicznych procesów administracyjnych ATP, których interfejsy były nieznane podczas projektowania systemu. Więcej informacji o projekcie i platformie VISP jest dostępnych na stronie projektu: http://www.visp-project.org. Integracja nowych usług za pośrednictwem brokera SOAP Model współdziałania procesu komponentu wywołującego usługę, Brokera SOAP i usługi docelowej został zaprezentowany na poniższym diagramie. Dla uproszczenia przyjmuje się, że: • wszystkie usługi docelowe posiadają taki sam asynchroniczny charakter, • zagadnienie obsługi błędów zostało pominięte, gdyż może być w łatwy sposób dodane do rozwiązania ogólnego, • wybór odpowiednich usług docelowych jako specyficznych dla danego systemu i jego architektury nie będzie tu omawiany. 156 Marcin Pisanko, Rafał Renk, Rafał Knapik, Witold Hołubowicz Rys. 2. Ogólny schemat współdziałania komponentu wywołującego usługę, brokera SOAP i usługi docelowej Broker SOAP udostępnia usługę proxy z wcześniej zdefiniowanym interfejsem. Wiadomość z zapytaniem i odpowiedzią proxy zawiera przynajmniej jeden element xsd:anyType. Komponent wywołujący usługę uzyskuje wszystkie informacje niezbędne do utworzenia zapytania o usługę Tworzenie systemu informatycznego w dynamicznie zmieniającym się środowisku... 157 docelową, potem generuje tę informację do elementu xsd:anyType wiadomości z zapytaniem proxy. Następnie komponent wywołujący usługę wysyła zapytanie do brokera SOAP z wiadomością z zapytaniem o usługę docelową. Broker SOAP analizuje wiadomość i wysyła ją dalej do usługi docelowej. Usługa docelowa realizuje odpowiednie działania i wysyła wiadomość z odpowiedzią do brokera SOAP, który umieszcza tą wiadomość we własnej wiadomości z odpowiedzią i wysyła ją dalej do komponentu wywołującego usługę. Na końcu tego procesu komponent wywołujący usługę odczytuje potrzebne informacje z otrzymanej wiadomości. Poniżej bardziej szczegółowo opisane zostały główne moduły omawianego rozwiązania: • komponent wywołujący usługę, • moduł pośredniczący ESB (broker SOAP), • moduł usługi docelowej. 3.1. Komponent wywołujący usługę Na Rysunku 2 przedstawione zostały główne działania, które mogą być realizowane przez komponent wywołujący usługę. Szczegółowa specyfikacja tego modułu będzie się zmieniała w zależności od np. specyfikacji systemu, dostępnej technologii oraz zaprojektowanej architektury. Minimum informacji, które powinny być przekazane do komponentu to usługa docelowa i identyfikacja operacji. Taka identyfikacja jest wystarczająca jeśli system wykorzystuje UDDI lub inny rodzaj rejestru. Jeśli rejestr nie jest wykorzystywany należy na wejściu dostarczyć więcej informacji, takich jak: • identyfikacja i nazwa usługi, • identyfikacja i nazwa operacji, • nazwa wiadomości z zapytaniem i odpowiedzią lub definicja ich struktury, • definicja serwisu WSDL lub adres URL, w którym umieszczony jest WSDL. Zadanie głównych działań wykonywanych przez komponent wywołujący usługę: 1. Uzyskanie definicji WSDL usługi docelowej – jeśli interfejs WSDL był jednoznacznie podany wtedy krok ten może być pominięty. Jeśli system wykorzystuje repozytorium UDDI (ang. Universal Description Discovery and Integration), definicja WSDL może być otrzymana z tego rejestru. Jednakże najprostszym rozwiązaniem jest pobranie jako parametru wejściowego adresu URL lokalizacji definicji WSDL i pozyskanie go przy użyciu funkcji dokumentu XSLT. 2. Analiza WSDL – komponent wywołujący usługę może analizować plik WSDL i pozyskiwać z niego szczegóły dotyczące punktów końcowych i struktury wiadomości. Celem tego kroku jest umożliwienie: • generowania określonego zapytania o usługę końcową na podstawie struktury danych sys- temu (pierwszy generator), • generowania listy brakujących parametrów (drugi generator), • uzyskiwanie informacji z określonej odpowiedzi usługi docelowej (ekstraktor). Dwa generatory i jeden ekstraktor mogą być stworzone dla każdej z usług lub dwa ogólne generatory i jeden ogólny ekstraktor analizujące WSDL mogą być stworzone dla całego systemu. Naturalną technologią dla takich generatorów i ekstraktorów jest XSLT. 3. Generowanie listy brakujących parametrów – nie wszystkie parametry potrzebne do wywołania procesu mogą być znane przez moduł wywołujący usługę. Aby pozyskać te brakujące parametry, w tym kroku komponent wywołujący usługę porównuje wszystkie dostępne informa- 158 Marcin Pisanko, Rafał Renk, Rafał Knapik, Witold Hołubowicz cje wymagane przez usługę docelową. Można wykorzystać określony generator usługi lub generator uniwersalny, który wykorzystuje strukturę danych zdefiniowaną w WSDL. 4. Uzyskiwanie zaginionych informacji – jeśli jakieś wymagane informacje nie zostały do tej pory pozyskane przez system, wtedy muszą zostać dostarczone przez operatorów systemu. W takim przypadku można wykorzystać technologię BPEL4People. 5. Generowanie wiadomości z zapytaniem dla usługi docelowej – jeśli dostępne są wszystkie informacje wtedy może zostać wygenerowana wiadomość, a następnie spakowana do postaci wcześniej zdefiniowanej wiadomości z zapytaniem do Brokera SOAP. 6. Wysłanie spakowanej wiadomości z zapytaniem do Brokera SOAP. Przykładowa wiadomość z zapytaniem została przedstawiona na Rysunku 5. Pogrubioną czcionką wyróżniono spakowaną wiadomość z zapytaniem o usługę docelową oraz adres zawarty w nagłówku SOAP. 7. Otrzymanie odpowiedzi od brokera SOAP ze umieszczoną w niej odpowiedzią usługi docelowej. 8. Usunięcie informacji z wiadomości z odpowiedzią – jeśli wiadomość z odpowiedzią niesie pewne informacje wtedy musi zostać przepisana do postaci standardowej struktury danych o parametrach usług stosowanej w systemie. Podobnie jak w przypadku generatorów – mogą zostać użyte specyficzne bądź uniwersalne ekstraktory. 9. Zachowywanie informacji do przyszłego wykorzystania – jeśli jakieś informacje będą mają być użyte w przyszłości zachowywane są w systemie bazy danych. 3.2. Broker SOAP Główną rolą brokera SOAP jest mediacja pomiędzy komponentem wywołujący usługę i usługą docelową. Proxy posiada zdefiniowany wcześniej interfejs i wiadomości otrzymane od komponentu wywołującego usługę posiadającą zdefiniowaną wcześniej strukturę. Każda z wiadomości zawiera element, w którym komponent wywołujący usługę umieszcza określoną wiadomość w formacie akceptowanym przez usługę docelową. Główne czynności są realizowane przez Brokera SOAP są następujące: 1. Wysłanie wiadomości do usługi docelowej – wiadomość z odpowiedzią jest wysyłana do usługi docelowej. Punkt końcowy usługi docelowej może być przekazany od komponentu wywołującego usługę do proxy realizowanego przez brokera SOAP lub w nagłówku wiadomości SOAP przy użyciu np. standardu adresowania zgodnego z WS-Addressing [WSAD]. Na Rysunku 5 przedstawiony został przykład wiadomości z zapytaniem. 2. Otrzymanie odpowiedzi od usługi docelowej – broker SOAP otrzymuje odpowiedź od usługi docelowej. 3. Umieszczenie wiadomości otrzymanej od usługi w odpowiedzi – wiadomość z odpowiedzią jest konwertowana do wiadomości o zdefiniowanej wcześniej strukturze. 4. Wysłanie spakowanej odpowiedzi do komponentu wywołującego usługę – spakowana wiadomość jest wysyłana do komponentu wywołującego usługę. 3.3. Moduł usługi docelowej Zakłada się, że usługa docelowa jest niezależna od reszty systemu. Usługa posiada swój własny interfejs, a zatem w celu integracji usługi z systemem nie powinna zachodzić konieczność jakichkolwiek modyfikacji. Jednakże jeśli istnieje możliwość przyjęcia pewnych założeń podczas konstrukcji interfejsów usług docelowych (np. wykorzystują styl document/literal wrapped oczekiwanych wiadomości ub choćby używają na wejściu wyłącznie parametrów prostego typu) wtedy o wiele łatwiejsze jest stworzenie uniwersalnych generatorów i ekstraktorów (czyli takich, które Tworzenie systemu informatycznego w dynamicznie zmieniającym się środowisku... 159 mogłyby być stosowane dla wszystkich lub znacznej większości usług) dla komponentu wywołującego usługę. Przykład zastosowania – komponent invokeATP platformy VISP Platforma VISP to przykład systemu, który wykorzystuje rozwiązanie opisane powyżej. Jednym z wymagań jest umożliwienie operatorowi ISP prostej integracji nowych usług i nowych procesów technicznych dla tych usług. Ponieważ wiele z procesów technicznych może być ponownie wykorzystanych w różnych systemach lub może być importowanych z innych systemów okazało się, że każdy z procesów technicznych powinien posiadać swój własny określony interfejs. W platformie VISP procesy techniczne są wywoływane z innych procesów – zaimplementowanych w języku BPEL procesów biznesowych, które to w momencie tworzenia wymagają ścisłego określenia interfejsów dla każdej z usług, z którymi się komunikują. Takie wymaganie było przyczyną zbudowania opisanego powyżej rozwiązania. Analiza przedstawiona w [VISP_D6.1.1] sugeruje przyjęcie pewnych założeń w strukturze wiadomości w celu dopasowania ich charakteru do standardu procesów technicznych ISP oraz ułatwia techniczną implementację . Przyjęto następujące założenia dla struktury wiadomości: 1. Proces ATP może wykorzystywać pięć rodzajów wiadomości: • Wiadomość z zapytaniem: AtpProcessName_Request, • Odpowiedź synchroniczna: AtpProcessName_SyncResponse, • Synchroniczna wiadomość o błędzie: AtpProcessName_SyncFault, • Odpowiedź asynchroniczna: AtpProcessName_Response, • Asynchroniczna wiadomość o błędzie: AtpProcessName_Fault. 2. Proces ATP może używać dwóch typów portów: • standardowy portType dla wywoływania procesu ATP, • portType wywołania zwrotnego do wysyłania asynchronicznej odpowiedzi lub błędów. 3. Odpowiedź synchroniczna (lub synchroniczny błąd) jest wysyłana na samym początku do InvokeAtp jako zawiadomienie o odpowiednim starcie ATP (lub powiadomienie, że ATP nie rozpoczął właściwie). 4. Można również wykonać pewne krótkotrwałe działania pomiędzy momentem otrzymania wiadomości z zapytaniem a momentem, gdy zostanie wysłana odpowiedź synchroniczna (lub synchroniczny błąd). Dla przykładu: • proces ATP może zweryfikować zgodność formatu wiadomości z definicją XSD, • proces ATP może wykonywać bardziej zaawansowane rodzaje kontroli parametrów (jak np. kontrola syntaktyczna, porównania wartości itp.), • proces ATP może dokonać testu połączeń z bazą danych lub z innymi systemami i zwrócić błąd, jeśli połączenie nie jest możliwe. 5. Proces ATP może pobrać na wejściu dowolny parametr. Parametr ten musi być przypisany do jednej z poniższych grup: • Parametry Techniczne Usługi (ServiceTechnicalCharacteristics) – parametry techniczne usługi zdefiniowane w deliverable [VISP_D4.2]. Wartości parametrów zostały zdefiniowane przez modelowanie usługi w SKB. 160 Marcin Pisanko, Rafał Renk, Rafał Knapik, Witold Hołubowicz • Identyfikator Instancji Usługi (ServiceTechnicalReference) – podzbiór parametrów, który w sposób jednoznaczny identyfikuje instancję usługi, np.. SubscriberSipUserinfo i SubscriberSipDomain dla usług Simple Call Service. • Informacje operacyjne (AdministrativeOperationalInformation) – informacje dodatkowe niezbędne do realizowania procesu technicznego. Część z tych informacji musi być dostarczona przez użytkownika inicjującego operację administracyjną (np. Opis Problemu – ProblemDescription – do naprawy usługi). • Parametry Konfiguracyjne Usługi (ServiceConfigurationCharacteristics) – parametry kon- figuracyjne usługi zdefiniowane zostały w dokumencie D4.2 projektu VISP [VISP_D4.2]. Parametry te mogą być rozmaite i zależą np. od określonej technologii implementacji usługi. 6. W odpowiedzi asynchronicznej proces ATP powinien odesłać informację należącą do jednej z następujących zdefiniowanych grup: • Identyfikator Instancji Usługi (ServiceTechnicalReference) – jeśli informacje takie zostały stworzone podczas procesu technicznego. • Parametry Konfiguracyjne Usługi (ServiceConfigurationCharacteristics) – jeśli jakieś cechy uległy zmianie podczas procesu technicznego. • Identyfikator Grupy ATP (AtpFamilyIdentifier) – identyfikator grupy procesów ATP od- powiedniej dla danej usługi. 7. Zdefiniowane wcześniej grupy wiadomości wejściowych i wyjściowych, przedstawione w punkcie 5 i 6, są jedynymi grupami, które może zinterpretować proces InvokeATP. Procesy ATP mogą wykorzystywać parametry należące do tych grup lub ich nie używać. Innymi słowy jeśli dany proces ATP wymaga parametrów z danej grupy, wtedy grupa ta musi być zdefiniowana w interfejsie procesu ATP i musi być włączona do zapytania i/lub do wiadomości z odpowiedzią. 8. Założenia przyjęte przy konstrukcji interfejsów WSDL [VISP_D6.1.1] są następujące: 9. Element “wsdl:definition” musi mieć atrybut “name” umieszczony w “AtpProcessName”. 10. Nazwa typu złożonego, który opisuje strukturę wiadomości z odpowiedzią ATP (zapytanie początkowe), musi być umieszczona w “AtpProcessName”. 11. Nazwa elementu, który został wykorzystany jako część WSDL w wiadomości z zapytaniem do ATP (zapytanie początkowe), powinna być umieszczona w „AtpProcessName”. 12. Nazwa operacji wywołania procesu ATP musi być umieszczona w „AtpProcessName”. 13. Nazwa elementu używanego jako część WSDL w wiadomości asynchronicznej odpowiedzi ATP musi być umieszczona w “AtpProcessName_Response”. 14. Parametry zawarte w pięciu zdefiniowanych wcześniej grupach parametrów WSDL mogą stanowić wyłącznie proste typy lub listę prostych typów. 15. Każdy WSDL musi posiadać jasno zdefiniowane pięć grup. Grupy te nie mogą być zdefiniowane w zewnętrznym schemacie i importowane do WSDL. 16. Wiadomości, elementy, które zostały odnotowane w wiadomościach, typy opisujące wiadomości i grupy muszą być umieszczone w tej samej przestrzeni nazw (ang. namespace) takiej samej, jak przestrzeń nazw procesu ATP. Tworzenie systemu informatycznego w dynamicznie zmieniającym się środowisku... 161 W projekcie VISP jako Broker SOAP został wybrany Apache Synapse [Synapse]1. Silnik Synapse przechowuje konfigurację za pomocą plików XML, posiada również bogaty zestaw gotowych do użycia pośredników. Diagram BPMN komponentu invokeATP przedstawiony jest na rysunku 3. Główne kroki zostały opisane poniżej. Odpowiedni proces ATP jest wybierany najpierw przez zewnętrzny podproces wyboru ATP. Podproces ten na wejściu pobiera informacje opisujące zadania procesu ATP i odsyła informację z odpowiednio zidentyfikowanym ATP. Rys. 3. Diagram procesu InvokeATP Następnie definicja WSDL i informacja o lokalizacji procesu ATP uzyskiwane są za pomocą podprocesu „wyszukaj szczegóły ATP” (retrieveAtpDetails). Podproces pobiera na wejściu informację zawierającą identyfikację procesu ATP, komunikuje się z wewnętrzną bazą danych VISP w celu uzyskania adresu URI pod którym dostępny jest WSDL procesu ATP. Następnie retrieveAtpDetails odczytuje zdalny dokument WSDL i pobiera z niego informacje o punkcie końcowym. Podproces odsyła zarówno dokument WSDL i punkt końcowy procesu. Następnym krokiem jest wygenerowanie listy parametrów ATP, których wartości nie figurują w bazie danych VISP i uzyskanie od użytkowników systemu wartości takich parametrów. Lista jest generowana za pomocą transformacji XSLT, która analizuję WSDL procesu ATP i dane dostępne w bazie danych VISP. Proces invokeATP komunikuje się z użytkownikiem dzięki modułowi zwanemu listą roboczą (Worklist), zbudowanemu specjalnie w tym celu w projekcie VISP. Nie wykorzystano gotowych rozwiązań z powodu braku otwartych systemów zarządzania zadaniami w chwili projektowania i wstępnej implementacji systemu. Obecnie pojawiło się kilka darmowych narzędzi kompatybilnych ze standardem BPEL4People, które z powodzeniem mogą być stosowane w sytuacji podobnej do opisanej powyżej. Gdy wszystkie niezbędne informacje są już dostępne, wiadomość z zapytaniem procesu ATP jest generowana z wykorzystaniem drugiej transformacji XSLT. 1 Prosty i efektywny Broker zbudowany jako projekt open source przez Fundację Apache Software. 162 Marcin Pisanko, Rafał Renk, Rafał Knapik, Witold Hołubowicz Następnie wiadomość z zapytaniem ATP pakowana jest do struktury wysyłanej do brokera SOAP. Struktura tej wiadomości przedstawiona jest na Rysunku 4. <xsd:complexType name="CallATP"> <xsd:sequence> <xsd:element name="ATPRequest" type="xsd:anyType"/> <xsd:element name="OperationName" type="xsd:string"/> <xsd:element name="Namespace" type="xsd:anyURI"/> <xsd:element name="CorrelationInformation" type="comxsd:ProcessId"/> </xsd:sequence> </xsd:complexType> Rys. 4. Struktura wiadomości wysyłanej do brokera SOAP Na Rysunku 5 przedstawiony jest przykład takiej wiadomości wraz z nagłówkami SOAP. <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Header> <wsa:To xmlns:wsa="http://www.w3.org/2005/08/addressing" soapenv:actor="" soapenv:mustUnderstand="0"> http://localhost:8080/active-bpel/services/activateSimpleCallService </wsa:To> <wsa:Action xmlns:wsa="http://www.w3.org/2005/08/addressing" soapenv:actor="" soapenv:mustUnderstand="0"> urn:vispproject.org/052007/processes/atp/atp3/wsdl/activateSimpleCallService </wsa:Action> </soapenv:Header> <soapenv:Body> <broker:callATP xmlns:broker="urn:vispproject.org/052007/enterpriseServices/atpBroker/wsdl"> <broker:ATPRequest> <atp3:ActivateSimpleCallService xmlns:atp3="urn:vispproject.org/052007/processes/atp/atp-3/wsdl"> <atp3:ServiceTechnicalReference> <atp3:SubscriberSipUserinfo>35559</atp3:SubscriberSipUserinfo> <atp3:SubscriberSipDomain>domain.net</atp3:SubscriberSipDomain> </atp3:ServiceTechnicalReference> <atp3:CorrelationInformation>4</atp3:CorrelationInformation> </atp3:ActivateSimpleCallService> </broker:ATPRequest> <broker:CorrelationInformation>4</broker:CorrelationInformation> </broker:callATP> </soapenv:Body> </soapenv:Envelope> Rys. 5. Wiadomość z zapytaniem wysyłana od modułu wywołującego proces do brokera SOAP Broker SOAP rozpakowuje wiadomość z zapytaniem ATP i wysyła ją do punktu końcowego podanego w nagłówku SOAP otrzymanej wiadomości. Na Rysunku 6 przedstawiono przykład tego typu wiadomości z zapytaniem. Tworzenie systemu informatycznego w dynamicznie zmieniającym się środowisku... 163 Z drugiej strony broker SOAP otrzymuje odpowiedź ATP, pakuje ją do podobnej struktury i wysyła do procesu invokeATP na adres podany jako parametr konfiguracyjny brokera SOAP. Gdy proces invokeATP wysyła wiadomość do brokera SOAP, również rozpoczyna oczekiwanie na podobną asynchroniczną odpowiedź. Jeśli proces ATP wykryje błąd, wtedy kod błędu jest sprawdzany wewnątrz invokeATP. Kody błędu: VER0110 i VER0111 oznaczają, że niektóre parametry posiadają błedne wartości, muszą więc być pozyskane od użytkownika – w takim przypadku nowe zapytanie jest wysyłane do procesu ATP za pośrednictwem Synapse. Ostatnim krokiem jest pozyskiwanie informacji z wiadomości z odpowiedzią ATP przy użyciu innej transformacji XSLT i zachowanie w bazie danych do wykorzystania przez kolejne procesy ATP. Przedstawione podejście stanowi podstawę dla przyszłych prac. Zdecydowana większość założeń dla usług wywoływanych przez invokeATP, jeśli nie wszystkie z nich, może być w przyszłości usunięta dzięki dodaniu większej możliwości konfigurowania procesu invokeATP. <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Body> <atp3:ActivateSimpleCallService xmlns="urn:vispproject.org/052007/processes/atp/atp-3/wsdl" xmlns:atp3="urn:vispproject.org/052007/processes/atp/atp3/wsdl"> <atp3:ServiceTechnicalReference> <atp3:SubscriberSipUserinfo>35559</atp3:SubscriberSipUserinfo> <atp3:SubscriberSipDomain>domain.net</atp3:SubscriberSipDomain> </atp3:ServiceTechnicalReference> <atp3:CorrelationInformation>4</atp3:CorrelationInformation> </atp3:ActivateSimpleCallService> </soapenv:Body> Rys. 6. Przykład wiadomości z zapytaniem wysyłanej od brokera SOAP do usługi docelowej Podsumowanie W niniejszym artykule przedstawiono ideę budowy funkcjonującego w bardzo dynamicznym otoczeniu systemu informatycznego, którego podstawą są: broker SOAP, system zarządzania przepływem pracy oraz usługi sieciowe. Autorzy przedstawili sposób, w jaki tego typu system może zostać zaimplementowany bazując na przykładzie systemu budowanego w ramach projektu IST VISP. Przedstawione rozwiązanie dowodzi, że możliwa jest dynamiczna integracja zewnętrznych usług z systemem informatycznym. Standardy takie jak BPEL lub XSLT oraz komponenty oprogramowania open source takie jak Synapse lub ActiveBPEL sprawiają, że platforma VISP może pracować w środowiskach produkcyjnych, może być również w prosty sposób zarządzana i rozwijana w przyszłości. Proponowane podejście należy poddać dalszej analizie w celu przyszłej standaryzacji. 164 Marcin Pisanko, Rafał Renk, Rafał Knapik, Witold Hołubowicz Bibliografia [BPEL2.0] “OASIS Web Services Business Process Execution Language Version 2.0”; Comitee Specification; Alexandre Alves, Assaf Arkin, Sid Askary, Ben Bloch, Francisco Curbera, Mark Ford, Yaron Goland, Alejandro Guízar, Neelakantan Kartha, Canyang Kevin Liu, Rania Khalaf, Dieter König, Mike Marin, Vinkesh Mehta, Satish Thatte, Danny van der Rijn, Prasad Yendluri and Alex Yiu; January 2007; http://docs.oasis-open.org/wsbpel/2.0/wsbpelv2.0.pdf [Synapse] Strona projektu; http://synapse.apache.org [WSDL] “Web Services Description Language (WSDL) Version 2.0 Part 1: Core Language”; W3C Recommendation; edit. Roberto Chinnici, Jean-Jacques Moreau, Arthur Ryman, Sanjiva Weerawarana; June 2007; http://www.w3.org/TR/wsdl20/ [XSLT] “XSL Transformations (XSLT) Version 1.0“; W3C Recommendation; edit. James Clark; November 1999; http://www.w3.org/TR/xslt [VISP_D3.0] “D3.0 – VISP functional specification”; edit. Eric Mannie-Corbisier; VISP Project FP6-IST2004-027178; February 2007; http://www.visp-project.org [VISP_D4.2] “D4.2 – Service Decomposition and Characterization Methodology”; edit. Daniel Pop; VISP Project FP6-IST-2004-027178; December 2006; http://www.visp-project.org [VISP_D4.4] “D4.4 – Building blocks specification”; edit. Eric Mannie-Corbisier; VISP Project FP6-IST2004-027178; June 2007; http://www.visp-project.org [VISP_D6.1.1] “D6.1 – VISP technical process textual specification, Part 1 - D6.1.1- Introduction”; edit. Arek Bekiersz; VISP Project FP6-IST-2004-027178; http://www.visp-project.org “Web Services Addressing 1.0 – Core”, edit. Martin Gudgin, Marc Hadley, Tony Rogers, http://www.w3.org/TR/2006/REC-ws-addr-core-20060509 [WSAD]