ZAWWW-2st1.2-l09.tresc-1.0

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania

Zaawansowane aplikacje internetowe - laboratorium

Web Services (część 2).

Celem ćwiczenia jest przygotowanie prostej aplikacji prezentującej technologię usług sieciowych (ang. Web Services). Przygotowana klasa języka Java zostanie opublikowana w postaci usługi sieciowej i udostępniona na zewnątrz przez osadzenie w serwerze aplikacji. Dodatkowo, przygotowany zostanie klient usługi testujący jej poprawność. Do wykonania ćwiczenia potrzebne jest zintegrowane środowisko Developer 10.1.3 (do pobrania z http://otn.oracle.com).

1. Uruchom narzędzie JDeveloper

2. Jeśli nie ukończyła(e)ś laboratorium Web Services (część 1) i nie posiadasz jeszcze aplikacji, to wykonaj kroki 2 i 3 z laboratorium Web Services (część 1).

3. Kliknij prawym przyciskiem myszy na ikonie aplikacji Laboratoria i z menu kontekstowego wybierz New Project. Rozwiń gałąź kategorii General i zaznacz kategorię Projects. W prawym oknie zaznacz element Empty Project. Kliknij przycisk OK.

ZAWWW-2st1 2-l09 tresc-1 0 01.png


4. Wpisz nazwę projektu Web Services 2 i kliknij przycisk OK.

ZAWWW-2st1 2-l09 tresc-1 0 02.png

5. Kliknij prawym przyciskiem myszy na ikonie projektu Web Services 2. Z menu kontekstowego wybierz opcję New… W oknie kategorii zaznacz gałąź General. Z listy dostępnych elementów w oknie po prawej stronie wybierz Java Class. Kliknij przycisk OK.

ZAWWW-2st1 2-l09 tresc-1 0 03.png


6. Pierwszym krokiem w tworzeniu usługi sieciowej będzie zdefiniowanie własnej klasy reprezentującej wyjątek polegający na niepoprawnym wywołaniu usługi, np. poprzez podanie jako parametrów liczb ujemnych albo liczb nie będących liczbami całkowitymi. Wpisz nazwę klasy: WrongArgumentsException, nazwę pakietu: webservices, nazwę nadklasy: java.lang.Exception. Kliknij przycisk OK.

ZAWWW-2st1 2-l09 tresc-1 0 04.png

7. Plik WrongArgumentsException.java został automatycznie załadowany do edytora. Uzupełnij plik poniższym kodem.

package webservices;

public class WrongArgumentsException extends Exception {

  public WrongArgumentsException(String message) {
    super(message);
  }
}


8. Programy stanowiące usługi sieciowe powinny być szczególnie dobrze dokumentowane ze względu na to, że ich głównymi użytkownikami są użytkownicy zdalni. Stąd, na projektant(k)ach usług sieciowych ciąży obowiązek starannego opisywania API. W przypadku języka Java najbardziej odpowiednim narzędziem jest Javadoc. Uzupełnij kod pliku WrongArgumentsException.java o komentarze Javadoc. Przykładowa wersja finalna pliku może wyglądać tak.

package webservices;

/**
 * The class WrongArgumentsException is a form
 * of Throwable and indicates the condition when input
 * parameters for the Web Service are incorrect.
 *
 * @author Mikolaj Morzy
 * @version 0.1
 */
public class WrongArgumentsException extends Exception {

  /**
  * Constructs a WrongArgumentsException with the specified detail
  * message.
  *
  * @param message the message describing this particular exception.
  */
  public WrongArgumentsException(String message) {
    super(message);
  }
}

9. Kliknij prawym przyciskiem myszy na ikonie projektu Web Services 2 i z menu kontekstowego wybierz New…, zaznacz kategorię General i wybierz element Java Class. Kliknij przycisk OK. Wprowadź nazwę klasy: EuclideanAlgorithm oraz nazwę pakietu: webservices. Kliknij przycisk OK.

ZAWWW-2st1 2-l09 tresc-1 0 05.png

10. Do znajdowania największego wspólnego podzielnika dwóch liczb wykorzystamy algorytm Euklidesa (http://en.wikipedia.org/wiki/Euclids_algorithm). Wprowadź do pliku poniższy kod, nie zapomnij o udokumentowaniu poszczególnych elementów.

package webservices;

/**
 * The EuclideanAlgorithm class is an implementation
 * of the well-known algorithm attributed traditionally to Euclid.
 * The algorithm takes as input two positive integers and computes
 * the greatest common divisor of the two. The first appearance of
 * the algorithm dates back to 300 BC in Euclid's Elements.
 *
 * @author Mikolaj Morzy
 * @version 0.1
 */
public class EuclideanAlgorithm {

  /**
   * Computes the greatest common divisor of the two
   * input positive integers
   *
   * @param a The first number
   * @param b The second number
   * @return The greatest common divisor of the input parameters
   * @throws WrongArgumentsException If one of the parameters
   * is not positive, or when input parameters are not integers
   */
  public int GreatestCommonDivisor(String a, String b)
         throws WrongArgumentsException {

    int i, j;
    try {
      i = Integer.parseInt(a);
      j = Integer.parseInt(b);
    }
    catch (NumberFormatException e) {
      throw new WrongArgumentsException("Parameters must be integers");
    }

    if ((i < 0) 
 (j < 0))
      throw new WrongArgumentsException("Parameters must be positive");

    while (i != j)
      if (i > j)
        i -= j;
      else
        j -= i;
    return i;
  }
}


11. W nawigatorze obiektów rozwiń gałąź reprezentującą projekt Web Services 2, a następnie rozwiń gałąź Application Sources. Zaznacz węzeł reprezentujący pakiet webservices. Z menu głównego wybierz Run->Javadoc webservices. Po zakończeniu generowania dokumentacji w oknie dziennika (u dołu ekranu) kliknij na odnośnik View Documentation. Ekran komputera powinien wyglądać teraz tak.

ZAWWW-2st1 2-l09 tresc-1 0 06.png

12. W kolejnym kroku udostępnimy stworzoną klasę EuclideanAlgorithm (wraz z pomocniczą klasą WrongArgumentsException) w postaci usługi sieciowej. Kliknij prawym przyciskiem myszy na ikonie pliku EuclideanAlgorithm.java i z menu kontekstowego wybierz opcję Create J2EE Web Service. Wybierz wersję J2EE 1.4 i kliknij przycisk OK.

ZAWWW-2st1 2-l09 tresc-1 0 07.png

13. Podaj nazwę usługi: EuclideanWebService. Upewnij się, że jest włączona opcja Autogenerate Service Endpoint Interface. Kliknij przycisk Zakończ (pozostałe parametry usługi sieciowej pozostają domyślne).

ZAWWW-2st1 2-l09 tresc-1 0 08.png

14. Zauważ, że w nawigatorze obiektów zmieniła się ikona reprezentująca plik EuclideanAlgorithm.java, a zamiast tego pojawiła się ikona reprezentująca całą usługę. W celu obejrzenia całej zawartości usługi zaznacz tę ikonę i z menu głównego wybierz View->Structure.

ZAWWW-2st1 2-l09 tresc-1 0 09.png

15. Kolejny krok to konfiguracja serwera aplikacji, w którym zostanie zainstalowana usługa sieciowa. Wykorzystamy do tego celu serwer OC4J dostarczany razem z narzędziem JDeveloper. Otwórz okno MS-DOS i przejdź do katalogu %JDEV_HOME%\j2ee\home\config. Domyślna konfiguracja serwera aplikacji OC4J posiada drobny błąd, który musimy skorygować. Otwórz plik server.xml i znajdź w nim znacznik <java-compiler>. Dodaj wewnątrz znacznika atrybut o nazwie bindir i wartości wskazującej na katalog zawierający kompilator javac.exe. Przykładowo, wpis w pliku server.xml mógłby wyglądać tak

<java-compiler name="javac" in-process="false"

      options="-J-Xmx1024m -encoding UTF8"
      
      bindir="C:\Program Files\Java\jdk1.5.0_07\bin"
      
      extdirs="C:\Program Files\Java\jre1.5.0_07\lib\ext" />

16. Przejdź do katalogu %JDEV_HOME%\j2ee\home i uruchom serwer aplikacji OC4J przez wydanie poniższego polecenia. Uwaga: przy pierwszym uruchomieniu serwera aplikacji nastąpi automatyczna instalacja wielu komponentów, dodatkowo instalator może się zapytać o hasło dla administratora. Proszę wówczas podać wybrane przez siebie hasło i je potwierdzić.

C:\> java –jar oc4j.jar

ZAWWW-2st1 2-l09 tresc-1 0 10.png


17. Sprawdź, czy serwer aplikacji faktycznie się uruchomił poprawnie. W tym celu otwórz przeglądarkę i przejdź do adresu http://localhost:8888

ZAWWW-2st1 2-l09 tresc-1 0 11.png

18. Wróć do narzędzia JDeveloper. W nawigatorze obiektów (okno z lewej strony ekranu) przejdź na zakładkę Connections (alternatywnie, z menu głównego wybierz View->Connection Navigator). Kliknij prawym przyciskiem myszy na ikonie Application Server i z menu kontekstowego wybierz opcję New Application Server Connection. W pierwszym oknie asystenta kliknij przycisk Dalej >. W drugim oknie asystenta wpisz nazwę połączenia: LocalAppServerConnection oraz typ połączenia: Autonomiczny OC4J 10g 10.1.3. Kliknij przycisk Dalej >.

ZAWWW-2st1 2-l09 tresc-1 0 12.png


19. W kolejnym kroku wpisz hasło administratora serwera aplikacji OC4J. Kliknij przycisk Dalej >.

ZAWWW-2st1 2-l09 tresc-1 0 13.png

20. W trzecim kroku asystenta pozostaw wszystkie wartości domyślne (lokalny serwer, brak ścieżki URL, domyślny port RMI. Kliknij przycisk Dalej >. W ostatnim kroku kliknij przycisk Test Connection. Kliknij przycisk Zakończ.

ZAWWW-2st1 2-l09 tresc-1 0 14.png


21. Wróć do okna nawigatora aplikacji (główne menu View->Application Navigator). Rozwiń gałąź Resources i kliknij dwukrotnie na pliku WebServices.deploy stanowiącym deskryptor instalacji usługi sieciowej na serwerze aplikacji. Przejdź do gałęzi File Groups->WEB-INF/classes->Filters i dołącz do instalacji plik WrongArgumentsException.class. Kliknij przycisk OK.

ZAWWW-2st1 2-l09 tresc-1 0 15.png

22. Kliknij prawym przyciskiem myszy na pliku WebServices.deploy i z menu kontekstowego wybierz Deploy to->LocalAppServerConnection. W oknie które się pojawi kliknij przycisk OK. Poczekaj na zakończenie procesu instalacji (możesz obserwować postęp instalacji w oknie dziennika u dołu ekranu).


23. Wróć do okna przeglądarki i przejdź do adresu http://localhost:8888/em. Zaloguj się do serwisu jako administrator serwera aplikacji. Z głównego ekranu aplikacji wybierz odnośnik Web Services.

ZAWWW-2st1 2-l09 tresc-1 0 16.png

24. Kliknij przycisk Test Service. Na kolejnym ekranie kliknij przycisk Test Web Service. W przeglądarce zostanie otwarty domyślnie wygenerowany punkt dostępowy do usługi sieciowej.

ZAWWW-2st1 2-l09 tresc-1 0 17.png


25. Odnośnik Service Description prowadzi do pliku WSDL opisującego naszą usługę sieciową. Istnieje także możliwość pobrania pieńka (ang. stub) do usługi sieciowej przygotowanego w języku JavaScript. Dodatkowo, punkt dostępowy umożliwia przetestowanie usługi sieciowej. Kliknij na odnośnik GreatestCommonDivisor, zaznacz pola wyboru przy obu parametrach i wpisz wartości testowe, 100 i 725.

ZAWWW-2st1 2-l09 tresc-1 0 18.png

26. Kliknij przycisk Preview SOAP. Obejrzyj postać koperty SOAP która zostanie wysłana do usługi sieciowej. Kliknij przycisk Invoke i obejrzyj zwróconą odpowiedź.

ZAWWW-2st1 2-l09 tresc-1 0 19.png

27. Powróć do okna umożliwiającego podawanie parametrów wywołania usługi sieciowej. Wpisz niepoprawny parametr, np. -5. Obejrzyj uzyskany wynik.

ZAWWW-2st1 2-l09 tresc-1 0 20.png