materiały

Transkrypt

materiały
Temat
Stworzenie systemu składającego się z usługi sieciowej typu web service
utrzymującej swój stan wewnętrzny (ang. statefull) oraz komunikującej się z nią
aplikacji klienckiej.
Cele
1. Zapoznanie się z podstawowymi elementami składającymi się na system usługi
sieciowej utrzymującej swój stan wewnętrzny; przeprowadzenie przy użyciu środowiska
Oracle9i JDeveloper procesu implementacji kodu takiej aplikacji obejmującego kolejne
etapy:
-
konfiguracja środowiska programistycznego oraz serwerowego,
-
opublikowanie (ang. deployment) usługi sieciowej (przygotowanej uprzednio w
postaci gotowego kodu źródłowego),
-
implementacja aplikacji klienckiej działającej w środowisku tworzenia aplikacji
JDeveloper.
2. Zapoznanie się z techniką zapewnienia ciągłości wirtualnej sesji HTTP użytą w celu
wielokrotnego komunikowania się z pojedynczą instancją usługi web service.
3. Zapoznanie się z funkcjonalnościami środowiska JDeveloper wspomagającymi tworzenie
aplikacji typu web service utrzymującej swój stan wewnętrzny.
Zadania
1. Uruchomić i skonfigurować środowisko tworzenia aplikacji i serwer aplikacji.
1.1. Uruchomić serwer aplikacji Oracle9iAS Containers for J2EE (uruchomić serwer w
środowisku maszyny wirtualnej Java wchodzącym w skład pakietu Oracle9i JDeveloper
korzystając ze skryptu \jdev903\jdev\bin\start_oc4j.bat).
1.2. Uruchomić środowisko tworzenia aplikacji Oracle9i JDeveloper
(\jdev903\jdev\bin\jdevw.exe).
1.3. Utworzyć i przetestować połączenie pomiędzy środowiskiem Oracle9i JDeveloper a
serwerem Oracle9iAS Containers for J2EE.
1.3.1. Utworzyć nowe połączenie typu “Oracle9iAS-StandAlone” (Connections->Application
Server->New Connection->Oracle9iAS-StandAlone).
1.3.2. Ustawić identyfikator użytkownika (Username) jako "admin", a hasło jako "welcome"
jednocześnie zaznaczając opcję "Deploy Password”.
1
1.3.3. Ustawić lokalizację URL jako “ormi://127.0.0.1/”.
1.3.4. Ustawić opcję Target Web Site jako “http-web-site’.
1.3.5. Jako wartość pola “Local Directory Where admin.jar for Oracle9iAS is installed"
wskazać lokalizację pliku admin.jar (zwykle w katalogu \j2ee\home).
1.3.6. Przetestować utworzone połączenie.
2. Uruchomić (opublikować) i przetestować aplikację sieciową utrzymującą swój stan
wewnętrzny
2.1. Otworzyć plik przestrzeni roboczej zawierającej gotowy kod źródłowy prostej usługi
sieciowej utrzymującej swój stan wewnętrzny (\STATEFUL\WorkspaceStatefulJava.jws)
2.2. Zlokalizować i zapoznać się z zawartością pliku zawierającego kod źródłowy klasy, której
metoda udostępniana jest jako implementowana w ramach ćwiczenia usługa sieciowa;
opisać przewidywane działanie usługi sieciowej.
2.3. Utworzyć postać wykonywalną (Make) zlokalizowanej klasy.
2.4. Do struktury projektu (ProjectStateful.jpr) dodać usługę sieciową wraz z definicjami
potrzebnymi do jej opublikowania (General->Web Service->Java Web Service) przy
użyciu wizualnego komponentu środowiska JDeveloper – kreatora Web Service
Publishing Wizard.
2.4.1. W pierwszym kroku procedury Web Service Publishing Wizard zlokalizować klasę
StatefulExampleImpl jako wartość pola “Select the class that you want to publish as a
Web service”.
2.4.2. W obrębie sekcji Options określić stanowość publikowanej usługi (zaznaczyć pole
Statefull).
2.4.3. Wybrać metody count oraz HelloWorld jako udostępniane przez usługę sieciową.
2.4.4. W kolejnym kroku procedury Web Service Publishing Wizard zaakceptować domyślne
lokalizacje generowanego pliku WSDL, generowanego pliku definiującego proces
publikacji usługi sieciowej (web.xml) i punktu końcowego usługi sieciowej (ang. web
service endpoint) oraz domyślną konfigurację portu serwera WWW oraz wybór
konfiguracji połączenia z serwerem aplikacji (Oracle9iAS-StandAlone).
2.5. Zapoznać się z zawartością i określić działanie wygenerowanych przez Web Service
Publishing Wizard pliku web.xml i definicji WSDL (StatefulExampleImpl.wsdl).
2.6. Opublikować stworzoną usługę sieciową tj. serwlet komunikacji SOAP (podać jego nazwę
i określić czym różni się postać serwletu komunikacji SOAP w przypdku usługi
zachowującej swój stan wewnętrzny od przypadku usługi bezstanowej) wraz
odpowiednią z klasą Java realizującą zmiany stanu wewnętrznego aplikacji (podać jej
2
nazwę) zgodnie z informacjami zawartymi w profilu WebServices.deploy (wybrać opcję
Oracle9iAS_Standalone).
3. Uruchomić i przetestować aplikację kliencką usługi sieciowej
3.1. Do struktury projektu (ProjectStateless.Java.jpr) dodać aplikację kliencką utworzonej
usługi sieciowej (New->General->Web Service-> Web Service Stub/Skeleton)
3.1.1. Użyć procedury Web Service Stub/Skeleton Wizard (automatyczne generowanie
kodu). Skorzystać z automatycznego generowania metody głównej. Zaobserwować
wynik analizy pliku WSDL prezentowany przez środowisko Oracle9i JDeveloper w
postaci listy metod udostępnianych przez usługę sieciową.
3.1.2. Kontynuować procedurę automatycznego generowania kodu przez wybranie
odpowiedniej metody.
3.1.3. Zapoznać się z wygenerowanym kodem - klasami, ich wzajemnymi zależnościami i
głównym przeznaczeniem (ze szczególnym uwzględnieniem komunikacji przy użyciu
protokołu SOAP).
3.1.4. W odpowiednim miejscu kodu klasy Client.java dodać następujący fragment:
StatefulExampleImplStub proxy = new StatefulExampleImplStub();
System.out.println(proxy.helloWorld("Scott"));
System.out.println(proxy.count());
System.out.println(proxy.count());
// …
System.out.println(proxy.count());
3.2. Skompilować projekt, uruchomić klasę Client.java i zaobserwować wynik jej działania (w
oknie typu log).
3.3. Użyć narzędzia Tools->TCP Packet Monitor w celu śledzenia komunikatów protokołu
SOAP wymienianych pomiędzy serwerem a klientem w procesie korzystania z usługi
sieciowej.
3.3.1. Zainicjować tryb śledzenia komunikacji (Start TCP Packet Monitor |>).
3.3.2. Ponownie uruchomić klasę Client.java.
3
3.3.3. Zapoznać się z zapisem przepływu komunikatów przedstawionym na zakładce History
oraz z zawartością poszczególnych komunikatów przedstawioną na zakładce Data.
3.3.4. Zaobserwować wartości pól HTTP wskazujące na sposób przesyłania informacji
identyfikującej sesje.
3.3.5. Jaki format ma informacja o stanie sesji przesyłana jako cookie? Jakie atrybuty są w
tym celu wykorzystywane i jakie są ich funkcje? Jakie wartości mają atrybuty Name
oraz Value? Czy wykorzystywane jest pole expires=DATE? Określić regułę
powtarzalności wartości pól określających parametry obiektów typu cookie: w obrębie
pojedynczej sesji oraz dwóch odrębnych sesji.
4. W analogiczny sposób (jak w punkcie 2.) opublikować i przetestować aplikację sieciową
utrzymującą stan wewnętrzny przez krótszy okres
4.1. Opublikować i przetestować aplikację sieciową przy różnych wartościach pola sessiontimeout dokumentu web.xml.
4.2. Określić który z elementów aplikacji podlega modyfikacji w wyniku ponownego
opublikowania aplikacji.
4.3. Określić czy do opublikowania w ten sposób zmodyfikowanej usługi niezbędna jest
rekompilacja kodu aplikacji.
4.4. Dla dwóch różnych wartości opóźnienia Timeout (np. 30 i 60 sekund) zweryfikować
doświadczalnie długość okresu braku komunikacji z instancją usługi web service, po
którym następuje wygaśnięcie sesji.
5. W analogiczny sposób (jak w punktach 2. i 3.) uruchomić (opublikować) i przetestować
aplikację sieciową nie utrzymującą stanu wewnętrznego
5.1. Określić czym różni się (pod względem funkcjonalności oraz wewnętrznej budowy)
usługa o wartości opóźnienia session-timeout równej 0 sekund od analogicznej usługi w
wersji bezstanowej (ang. stateless).
4