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