dostęp do komponentów ejb przez usługi web services KDK342TYVWJFHS4WYW2AD3PRYEQV2AIB3XIXBCY
243 Dostęp do komponentów EJB przez usługi Web Services Mikołaj Morzy Mikolaj.Morzy@cs.put.poznan.pl http://www.cs.put.poznan.pl/mmorzy/ 244 Plan rozdziału " Wprowadzenie do usług sieciowych " Architektura SOAP " Web Services Definition Language " Rejestr UDDI " Zastosowanie Oracle JDeveloper do tworzenia usług sieciowych 245 Architektura zorientowana na usługi rejestr usług znajdz opublikuj wywołaj dostawca klient usługi usługi " Usługa sieciowa (Web Service) to technologia budowania rozproszonych, komunikujących się ze sobą aplikacji " Usługi sieciowe samodzielnie się opisują są zorientowane na świadczenie usług są oparte o standardy (HTTP, SMTP, XML, SOAP, WSDL, UDDI) opisują komunikację między aplikacjami są niezależne od platformy i języka implementacji 246 Elementy usług sieciowych " Komunikacja: podstawą funkcjonowania usług sieciowych są tradycyjne protokoły internetowe (HTTP, FTP) za pomocą których usługi sieciowe komunikują się ze sobą " Uniwersalny format danych: usługi sieciowe korzystają z XML w celu wymiany danych oraz w celu opisu funkcjonalności poszczególnych usług " Simple Object Access Protocol: usługi sieciowe wykorzystują protokół SOAP do wymiany komunikatów XML. Protokół SOAP funkcjonuje jako wrapper dla komunikatów XML, zamykając je w tzw. kopertach 247 Elementy usług sieciowych " Web Services Description Language: dokumenty WSDL to samoopisujące się specyfikacje prezentujące funkcjonalność danej usługi. Dokumenty WSDL są zgodne z XML i zawierają informację w jaki sposób należy korzystać z danej usługi sieciowej " Universal Description, Discovery and Integration: rejestry usług UDDI przechowują dokumenty WSDL opisujące usługi. Rejestry te są przeszukiwane w celu zlokalizowania odpowiedniej usługi. Rejestry UDDI są wykorzystywane przez dostawców usług do publikowania usług 248 Zalety korzystania z usług sieciowych " Rozproszony model komponentów " Wykorzystanie XML do reprezentacji i przesyłania danych " Pełna niezależność od języka implementacji " Aatwość dostępu przy pomocy standardowych protokołów, takich jak HTTP, FTP, SMTP " Oszczędność czasu, istniejące komponenty mogą być bardzo łatwo udostępnione jako usługi sieciowe " Różne sposoby wykorzystania komunikacja synchroniczna (RPC) komunikacja asynchroniczna (przesyłanie komunikatów) 249 Ogólny model usług sieciowych aplikacja klienta 2 inerfejs XML (WSDL) rejestr usług 3 (UDDI) interfejs XML (WSDL) 1 usługa sieciowa 250 Protokół SOAP " SOAP to prosty protokół oparty na XML który pozwala na wymianę danych z wykorzystaniem protokołu HTTP oraz na implementowanie usług sieciowych " SOAP jest przenośnym protokołem, aplikacje korzystające z SOAP mogą być napisane w różnych językach i mogą być wykonywane na różnych platformach " Komunikacja między aplikacjami wykorzystującymi SOAP odbywa się poprzez zdalne wołanie procedur (RPC Remote Procedure Call) wymianę komunikatów 251 Architektura SOAP klient serwer usługa SOAP SOAP SOAP metoda() wynik wynik metoda() konwersja odczytanie konwersja odczytanie XML XML XML XML HTTP " Wywołanie metody przez klienta jest konwertowane do dokumentu XML, parametry wywołania są konwertowane do postaci binarnej i dokument XML jest wysyłany za pomocą protokołu HTTP do usługi sieciowej. Metoda sieciowa zwraca wynik działania w analogiczny sposób. 252 Koperta SOAP " Koperta SOAP to poprawny dokument XML który zawiera następujące elementy wyznacza początek i koniec koperty wyznacza początek i koniec nagłówka koperty, w nagłówku umieszczane są informacje specyficzne dla aplikacji, np. routing, cache, szyfrowanie, podpisy cyfrowe wyznacza początek i koniec ciała koperty, w ciele zawarte są dane wywołania usługi (np. nazwy i wartości parametrów) jak i wyniki działania usługi wyznacza początek i koniec bloku opisującego błędy powstałe podczas przetwarzania 253 Przykład koperty SOAP Wywołanie metody float dodaj(float x, float y)z wartościami 10 i 20 POST /dodaj HTTP/1.1 Content-Type: text/xml; charset=utf-8 Content-Length: xxx SOAPAction "http://miner.cs.put.poznan.pl/kalkulator"
254 Przykład koperty SOAP Wynik metody float dodaj(float x, float y)z wartościami 10 i 20 HTTP/1.1 200 OK Content-Type: text/xml; charset=utf-8 Content-Length: xxx
255 Przykład koperty SOAP Wynik metody float dodaj(float x, float y), pojawił się niespodziewany błąd HTTP/1.1 500 Server Error Connection: close Content-Type: text/xml; charset=utf-8 Content-Length: xxx Date: 01 Feb 2004 04:02:23 GMT
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> soap:client Podano zbyt wiele parametrów
256 Implementacja " Protokół SOAP jest niezależny od języka implementacji, proces kodowania (serializacji) żądania i wyniku działania usługi, jak i proces komunikacji przez protokół HTTP może być przeprowadzony w dowolnym języku programowania. " Wiele języków udostępnia wygodne biblioteki Java SOAP for Apache Java GLUE Perl SOAP::Lite C/C++ gSoap Microsoft SOAP (część platformy .NET) 257 Architektura Apache SOAP serwer klasa klient Java SOAP org.apache.soap serwer WWW org.apache.soap.rpc XML XML XML XML HTTP 258 Ręczna implementacja usługi Kod usługi public class Kalkulator { public float dodaj(float x, float y) { return x+y; } } Deskryptor instalacji id="urn:MojKalkulator">
Instalacja usługi java org.apache.server.ServiceManagerClient \ http://miner.cs.put.poznan.pl/apache-soap/servlet/rpcrouter \ deploy deployment_descriptor.xml 259 Ręczna implementacja usługi import java.net.URL; import java.util.Vector; import org.apache.soap.*; import org.apache.soap.rpc.*; ... Call call = new Call(); call.setTargetObjectURI("urn:MojKalkulator"); call.setMethodName("dodaj"); call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); Vector parameters = new Vector(); parameters.addElement(new Parameter("val1", Float.class, 10, null)); parameters.addElement(new Parameter("val2", Float.class, 20, null)); call.setParams(parameters); Response response = call.invoke(new URL("http://miner/apache-soap/servlet/rpcrouter"), ""); Parameter returnValue = response.getReturnValue(); Object value = returnValue.getValue(); ... 260 Web Services Description Language " Wołając daną usługę programista musi zaszyć w kodzie lokalizację usługi, nazwę metody, liczbę i typy parametrów. " WSDL to oparty o XML język opisu usługi, dokument WSDL zawiera wszystkie informacje potrzebne do wywołania usługi (lokalizacja, nazwa, parametry). " WSDL jest tworzony przez dostawcę usługi i publikowany, programiści mogą ściągnąć opis usługi i wykorzystać go do wywołania danej usługi. " Dokumenty WSDL mogą być automatycznie przetłumaczone na język programowania wykorzystywany przez programistę (za pomocą Client Proxy), tłumaczenie może też odbywać się w momencie wywoływania usługi. 261 Przykład pliku WSDL
262 Automatyczna translacja dokumentów WSDL przez Client Proxy oracle.wsdl.toolkit.ProxyGenerator Dokument WSDL Client Proxy " Utworzony przez dostawcę usługi dokument WSDL jest pobierany przez programistę/klienta. Klient tłumaczy dokument WSDL na język, w którym tworzona jest aplikacja łącząca się z usługą sieciową. 263 Rejestr UDDI " UDDI to specyfikacja bazy danych, w których dostawcy usług rejestrują swoje usługi przy pomocy dokumentów WSDL white pages: adres, dostawca, informacja kontaktowa yellow pages: wyszukiwanie wg typu, lokalizacji, kategorii i innych green pages: informacje techniczne, interfejs, URL, itp. " Rejestr UDDI jest wykorzystywany do odczytania dokumentu WSDL i przesłania go do klienta w celu wygenerowania kodu łączącego się z usługą " Dostępne obecnie usługi sieciowe oferują bardzo szeroki zakres świadczeń, m.in. prognozy pogody, wymiana walut, wyszukiwarki, sklepy internetowe, i wiele innych 264 REST " Podejście REST (Representational State Transfer): krytyka technologii usług sieciowych tradycyjne techniki i metody HTTP (POST,GET,PUT,DELETE) w zupełności wystarczające unikalny URL reprezentuje komponent usług sieciowych a nie konkretną usługę, przez co trudniej buforować wyniki bezpośrednia dostępność usług ułatwia ich integrację konieczność uczenia się nowych narzędzi i technik 265 Podsumowanie wyszukanie usługi UDDI WSDL XML WSDL XML Client Proxy Java aplikacja klienta wywołanie usługi usługa usługa Java SOAP SOAP wyniki 266 Klasa Java Kalkulator.java public class Kalkulator { public Kalkulator() {} public float dodaj(float x, float y) { return x+y; } public double odejmij(double x, double y) { return x - y; } public double pomnoz(double x, double y) { return x * y; } public double podziel(double x, double y) { return x / y; } } IKalkulator.java public interface IKalkulator { public double dodaj(double x, double y); public double odejmij(double x, double y); public double pomnoz(double x, double y); public double podziel(double x, double y); } 267 Utworzenie usługi sieciowej 268 Wybór klasy zródłowej 269 Wybór metod dostępnych w usłudze 270 Wybór konfiguracji WSDL 271 Wygenerowanie klasy klienta proxy 272 Wybór parametrów klienta proxy 273 Wybór metod dla których zostaną wygenerowane wrappery 274 Instalacja usługi sieciowej 275 Fragment przykładowego klienta KalkulatorWebServiceStub.java .... public class KalkulatorWebServiceStub { public KalkulatorWebServiceStub() { m_httpConnection = new OracleSOAPHTTPConnection(); m_smr = new SOAPMappingRegistry(); } public static void main(String[] args) { try { KalkulatorWebServiceStub stub = new KalkulatorWebServiceStub(); Double x = new Double(10); Double y = new Double(20); Double result = stub.podziel(x,y); System.out.println(result); } catch(Exception ex) { ex.printStackTrace(); } }