Projekt AZnU
Transkrypt
Projekt AZnU
SPECYFIKACJA Pseudokod typowego minimalnego procesu BPEL spełniającego wymagania odnośnie wykorzystanych elementów wygląda następująco: input params1, params2, params3; try { result1 = webservice1.process(params1); if (result1 > x) { throw exception; } else { parallel { result2 = webservice2.process(params2); } and { result3 = webservice3.process(params3); } return result(result2, result3); } } catch { return fault; } Po przeniesieniu powyŜszego do BPELa uzyskamy: przy czym jeden z elementów Assign naleŜy zastąpić elementem Transform. Potrzebujemy zatem nasz proces rozbić na 3 usługi WebService, z których: • wynik jednej decyduje o dopuszczeniu dalszego przetwarzania lub nie (przykład: jeśli klient chce wykupić składkę OC to najpierw sprawdzimy, czy ma długi w naszym towarzystwie) • dwie pozostałe mogą być wykonywane równolegle (przykład: jedna wylicza podstawę składki, druga wyznacza zniŜkę za bezszkodową jazdę) MoŜliwości jest mnóstwo. W efekcie uzyskujemy proces BPEL korzystający ze wszystkich wymaganych konstrukcji poza Compansate, bez której i tak moŜna dostać 5.0. PRZYGOTOWANIE ŚRODOWISKA 1. Ściągamy i instalujemy JDevelopera 10.1.3.4 (nie 11g!). 2. Ściągamy i instalujemy Oracle SOA Suite 10g Release 3. Upewnijcie się, Ŝe zarówno JDeveloper jak i SOA Suite korzystają z tej samej wersji JDK. W przeciwnym wypadku nie uda wam się umieścić usług na serwerze SOA Suite. 3. Jeśli udało się zainstalować i uruchomić SOA Suite, w JDeveloperze dodajemy nowe połączenie: • zakładka Connections -> Application Servers -> New Application Server Connection • w polu Connection Type wybieramy Oracle Application Server 10g 10.1.3 • podajemy hasło i uŜytkownika z instalacji SOA Suite • zostawiamy localhost i domyślny port 4. Ponadto naleŜy zdefiniować połączenie dla ESB: • zakładka Connections -> Intgeration Server -> New Integration Server Connection • w polu Application Server wybieramy utworzone przed momentem połączenie do serwera aplikacji PRACA Z JDEVELOPEREM Jedno, na co moŜna w 100% liczyć wykonując ten projekt, to niezapomniane wraŜenia, jakich podczas implementacji dostarczy nam JDeveloper. Wszystkie polecenia naleŜy wykonywać w podanej kolejności, kaŜdorazowo upewniając się, Ŝe dana część została zrobiona porządnie i nie będzie trzeba juŜ do niej wracać, aby nanieść jakiekolwiek poprawki. MoŜe to brzmieć banalnie, ale jest prawie pewne, Ŝe późniejsze zmiany wyjdą nam bokiem, najprawdopodobniej gdzieś pod koniec implementacji, w najmniej oczekiwany sposób, a załatwienie problemu pozbawi nas kilku godzin Ŝycia. Absolutnym hiciorem w tej materii są jakiekolwiek modyfikacje w XML Schema, gdy zaczęliśmy robić cokolwiek innego (np. wygenerowaliśmy szkielet implementacji usług w Javie) – w takim wypadku najbezpieczniej wykonać wszystkie kolejne kroki od nowa. Będzie szybciej. Ponadto, gdyby w jakimkolwiek momencie potrzebne było usunięcie jakiejś składowej projektu i wstawienie jej od nowa (czy to wygenerowanego kodu usługi, BPELa czy czegokolwiek innego), naleŜy: • zaznaczyć dany projekt • z menu File wybrać Erase from disk • wyłączyć JDevelopera • usunąć pozostałości z dysku (folder jdev/mywork) • włączyć JDevelopera lub alternatywnie stworzyć dany projekt pod inną nazwą. A najlepiej jedno i drugie. To tyle w kwestii odpowiedniego przygotowania psychicznego. Nie pozostaje nic, tylko Ŝyczyć szczęścia. Będzie wam potrzebne. Powodzenia. WYKONANIE PROJEKTU I. SCHEMATY 1. Tworzymy nowy projekt (Empty Project). 2. Dodajemy do projektu pojedynczy schemat XML (General -> XML -> XML Schema): • dla całego procesu oraz dla kaŜdej usługi WebService potrzebujemy element będący wejściem, element będący wyjściem oraz komunikat o błędzie; sugeruję trzymać się jednej konwencji nazewnictwa (przykładowo: nazwaUsługiInput, nazwaUsługiOutput) • komunikat o błędzie moŜe być wspólny dla wszystkich usług oraz procesu - wystarczy wtedy wstawić go tylko raz 3. Dodajemy do projektu pliki WSDL (Business Tier -> Web Services -> WSDL Document), osobny dla kaŜdej usługi -> patrz soa1.pdf. Zwróćcie uwagę na poprawki przestrzeni nazw na slajdzie 4. Jeśli trzymaliście się konwencji nazw zaproponowanej powyŜej, po wyklikaniu pierwszego pliku WSDL kolejne moŜna wygenerować poprzez ctrl+c ctrl+v ctrl+r. II. USŁUGI WEBSERVICE Dla kaŜdej usługi naleŜy: 1. Utworzyć osobny nowy projekt (Empty Project). 2. Dodać do niego usługę (Business Tier -> Web Services -> Java Web Service from WSDL) opartą o odpowiedni plik WSDL z poprzedniego projektu. 3. Znaleźć w wygenerowanym kodzie plik ...Impl.java. 4. Uzupełnić obecną tam metodę (naleŜy ustawić wszystkie pola wynikowej zmiennej). 5. Przetestować działanie usługi na wbudowanym w JDevelopera serwerze poprzez Run (na dole w logu pojawi się adres endpointa, który naleŜy otworzyć w przeglądarce). 6. Umieścić usługę na serwerze SOA Suite (Resources/WebServices.deploy -> Deploy to). Jeśli na tym etapie pojawia się błąd kompilacji (a w II.5 było ok), najprawdopodobniej projekt i serwer korzystają z róŜnej wersji JDK. 7. Przetestować działanie na serwerze przez http://localhost:8888/em. III. REJESTRACJA USŁUG W ESB 1. Tworzymy nowy projekt (ESB Project). 2. W prawym górnym rogu klikamy Create System/Group i tworzymy nowy system. 3. Dla kaŜdej z usług: • dodajemy odwołanie do usługi (ESB Services -> SOAP Service) oraz router (ESB Services -> Routing Service), podając w obu adres WSDL usługi na serwerze SOA Suite Aby znaleźć adres WSDL usługi umieszczonej na serwerze SOA Suite, naleŜy otworzyć http://localhost:8888/em, rozwinąć zakładkę home, kliknąć na nazwie usługi, przejść na zakładkę Web Services, nacisnąć przycisk Test Service, otworzyć obecny tam adres URL usługi, a następnie kliknąć na Service Description. • w routerze rozwijamy zakładkę Routing Rules i klikamy na + • z listy Services in project wybieramy utworzone przez nas odwołanie do usługi • dla kaŜdego typu wiadomości (wejście, wyjście, błąd) tworzymy osobne mapowanie • w kaŜdym mapowaniu przeciągamy wejścia do wyjść, Ŝeby wszystkie odpowiadające sobie elementy były połączone Nawet jeśli macie jeden wspólny typ Fault dla wszystkich usług, kaŜda musi mieć osobny plik z mapowaniem. 4. Umieszczamy projekt na serwerze (Register with ESB). 5. Pod adresem http://localhost:8888/esb testujemy endpoint dla kaŜdej z usług oraz ich routerów: • jeśli nie działa samo odwołanie do usługi w ESB (a usługa wrzucona na serwer w punkcie II.6 działa) – sprawdźcie, czy SOAP Service ma ustawiony poprawny adres WSDL • jeśli usługa w ESB działa, ale jej router nie - sprawdźcie pliki XSL z mapowaniami IV. PROCES BPEL 1. Tworzymy nowy projekt (BPEL Process Project): • ustawiamy typ na Synchronous • podajemy nasze XML Schema • ustawiamy odpowiedni element wejściowy i wyjściowy dla procesu 2. Jeśli chcemy, aby proces mógł rzucać wyjątki (raczej chcemy), edytujemy wygenerowany dla procesu plik WSDL: • w Messages dodajemy nowy message i part Pamiętajcie o przestrzeni nazw dla typu parta - najprawdopodobniej będzie to "ns1:" • w Port Types klikamy na process i dodajemy fault Pamiętajcie o przestrzeni nazw dla typu wiadomości - najprawdopodobniej "client:" • otwieramy widok Source i upewniamy się, Ŝe przestrzenie nazw dodanych przez nas elementów zgadzają się z tymi wygenerowanymi automatycznie 3. Najpierw dodajemy PartnerLinki, jako WSDL podając im adresy Concrete WSDL URL dla routerów usług. Aby znaleźć adres WSDL routera usługi w ESB, naleŜy otworzyć http://localhost:8888/esb, kliknąć na nazwie routera i przejść na zakładkę Definition. 4. Konstruujemy resztę procesu: • za kaŜdym razem najpierw dodajemy Invoke, a potem wstawiamy przed nim Assign lub Transform (dodanie Invoke wygeneruje nam zmienne, które trzeba zainicjalizować) • przed kaŜdym Reply naleŜy zainicjalizować wszystkie pola wysyłanej zmiennej 5. Wrzucamy na serwer i testujemy pod adresem http://localhost:8888/BPELConsole. V. REJESTRACJA PROCESU W ESB 1. Wracamy do projektu z ESB 2. Analogicznie jak dla usług, dla procesu dodajemy SOAP Service i Routing Service, tworzymy mapowania, wstawiamy na serwer i testujemy. Aby znaleźć adres WSDL procesu BPEL, naleŜy otworzyć http://localhost:8888/BPELConsole, kliknąć na nazwie procesu i przejść na zakładkę WSDL. VI. JSP 1. Tworzymy nowy projekt (Empty Project). 2. Dodajemy do niego proxy (Business Tier -> Web Services -> Web Service Proxy), podając jako WSDL adres routera do procesu (Concrete WSDL URL, patrz IV.3) 3. Tworzymy nowy projekt (Web Project). 4. W Project Properties... -> Dependencies zaznaczamy projekt z proxy. 5. Tworzymy stronę JSP, która za pomocą proxy wywoła nasz proces BPEL i wyświetli wynik (patrz załączony kod źródłowy). specjalne podziękowania dla eMU, Ewy, Gapy i Staniola