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

Podobne dokumenty