Zagadnienia Programowania Obiektowego. Usługi sieciowe w Javie EE 5

Podobne dokumenty
Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

Programowanie w języku Java. Wykład 13: Java Platform, Enterprise Edition (Java EE)

public interface TravelAgent { public void makereservation(int cruiseid, int cabinid, int customerid, double price); }

Wprowadzenie do technologii Web Services: SOAP, WSDL i UDDI

Wybrane działy Informatyki Stosowanej

Wybrane działy Informatyki Stosowanej

1 Wprowadzenie do J2EE

Katedra Architektury Systemów Komputerowych Wydział Elektroniki, Telekomunikacji i Informatyki Politechniki Gdańskiej

Architektury Usług Internetowych. Laboratorium 2. Usługi sieciowe

Programowanie obiektowe zastosowanie języka Java SE

Wywoływanie metod zdalnych

SOA Web Services in Java

Wywoływanie metod zdalnych

Dostęp do komponentów EJB przez usługi Web Services

JAX-RS czyli REST w Javie. Adam Kędziora

Programowanie komponentowe 5

Katalog książek cz. 3: Web Service

EJB 3.0 (Enterprise JavaBeans 3.0)

Tworzenie i wykorzystanie usług sieciowych

Enterprise JavaBeans (EJB)

Enterprise JavaBeans

Aplikacje internetowe i rozproszone - laboratorium

Krótka Historia. Co to jest NetBeans? Historia. NetBeans Platform NetBeans IDE NetBeans Mobility Pack Zintegrowane moduły. Paczki do NetBeans.

Budowa aplikacji w technologii. Enterprise JavaBeans. Maciej Zakrzewicz PLOUG

Komponenty sterowane komunikatami

Java Enterprise Edition spotkanie nr 1. Sprawy organizacyjne, wprowadzenie

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

Remote Method Invocation 17 listopada 2010

Plan prezentacji. Budowa aplikacji w technologii Enterprise JavaBeans. Przegląd architektur: CORBA. Cele budowy aplikacji rozproszonych

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Aplikacje RMI

Zaawansowane aplikacje internetowe. Wykład 6. Wprowadzenie do Web Services. wykład prowadzi: Maciej Zakrzewicz. Web Services

Podejście obiektowe do budowy systemów rozproszonych

Instrukcja tworzenia aplikacji EE na bazie aplikacji prezentowanej na zajęciach lab.4 z PIO umożliwiająca przez sieć dostęp wielu użytkownikom.

Programowanie Komponentowe WebAPI

Serwery aplikacji. mgr Radosław Matusik. Wydział Matematyki i Informatyki Uniwersytetu Łódzkiego radmat radmat@math.uni.lodz.

JBoss Application Server

Plan wykładu. Technologia Web Services. Web Services a WWW

Podstawowe informacje o technologii Java EE 7

Contexts and Dependency Injection (CDI) Autor wykładu: Marek Wojciechowski

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

1 Atrybuty i metody klasowe

Java JMX. Marcin Werla. Monitorowanie i zarządzanie usługami sieciowymi w Javie. mwerla@man.poznan.pl PCSS/Poznań JUG

Enterprise JavaBean 3.0

Podejście obiektowe do budowy systemów rozproszonych

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Wprowadzenie do technologii Web Services: SOAP, WSDL i UDDI

Wielowarstwowe aplikacje internetowe. Web Services. Autorzy wykładu: Maciej Zakrzewicz Marek Wojciechowski. Web Services

Zastosowanie komponentów EJB typu Session

Zdalne wywołanie metod - koncepcja. Oprogramowanie systemów równoległych i rozproszonych Wykład 7. Rodzaje obiektów. Odniesienie do obiektu

Programowanie komponentowe. Przykład 1 Bezpieczeństwo wg The Java EE 5 Tutorial Autor: Zofia Kruczkiewicz

Mechanizmy pracy równoległej. Jarosław Kuchta

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Oprogramowanie systemów równoległych i rozproszonych Wykład 7

Remote Method Invocation 17 listopada rozproszonych. Dariusz Wawrzyniak (IIPP) 1

Aplikacje RMI Lab4

Enterprise JavaBeans. 1. Architektura EJB: komponenty encyjne, komponenty sesyjne, komponenty sterowane komunikatami. 2. Kontenery EJB JBoss.

Języki i metody programowania Java. Wykład 2 (część 2)

Web Tools Platform. Adam Kruszewski

Enterprise Java Beans Narzędzia i Aplikacje Java EE

Web Services. Wojciech Mazur. 17 marca Politechnika Wrocławska Wydział Informatyki i Zarządzania

Usługa TimerService

Projektowanie oprogramowania. Warstwa integracji z bazą danych oparta na technologii ORM Platforma Java EE Autor: Zofia Kruczkiewicz

Architektury usług internetowych. Tomasz Boiński Mariusz Matuszek

Rozproszone systemy internetowe

Dokumentacja do API Javy.

Komunikacja i wymiana danych

JAVA EE MODEL APLIKACJI. Waldemar Korłub. Narzędzia i aplikacje Java EE KASK ETI Politechnika Gdańska

Technologie internetowe laboratorium nr 4. Instalacja i uruchomienie usługi sieciowej w serwerze Tomcat/AXIS

AKADEMIA GÓRNICZO-HUTNICZA Wydział Elektrotechniki, Automatyki, Elektroniki i Informatyki

Michał Jankowski. Remoting w.net 2.0

Klasy abstrakcyjne i interfejsy

D:\DYDAKTYKA\ZAI_BIS\_Ćwiczenia_wzorce\04\04_poprawiony.doc 2009-lis-23, 17:44

5.14 JSP - Przykład z obiektami sesji Podsumowanie Słownik Zadanie... 86

1. Czynności przygotowujące aplikację działającą na platformie Java SE Biblioteka5 (należy ją pobrać z załącznika z p.1)

Wprowadzenie do J2EE. Maciej Zakrzewicz.

Aplikacja webowa w Javie szybkie programowanie biznesowych aplikacji Spring Boot + Vaadin

76.Struktura oprogramowania rozproszonego.

Wspomaganie pracy w terenie za pomocą technologii BlackBerry MDS. (c) 2008 Grupa SPOT SJ

Niezbędne serwery aplikacji. Wprowadzenie do technologii JBoss i Apache Tomcat.

Zaawansowane aplikacje internetowe

Systemy Rozproszone - Ćwiczenie 6

SOP System Obsługi Parkingów

Klasy abstrakcyjne, interfejsy i polimorfizm

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Typy przetwarzania. Przetwarzanie zcentralizowane. Przetwarzanie rozproszone

Rozproszone systemy internetowe. Wprowadzenie. Koncepcja zdalnego wywołania procedury

Wstęp Budowa Serwlety JSP Podsumowanie. Tomcat. Kotwasiński. 1 grudnia 2008

Wykład 7: Pakiety i Interfejsy

Przykłady tworzenia aplikacji komponentowych w technologii JavaServer Faces 2.1 na podstawie

Wprowadzenie. Narzędzia i środowiska programistyczne. Laboratorium 1. Prowadzący: Kierunek: Semestr: Rok: Tomasz Gądek Informatyka Zimowy 2

Zaawansowane aplikacje internetowe - laboratorium

Forum Client - Spring in Swing

Czym jest Java? Rozumiana jako środowisko do uruchamiania programów Platforma software owa

Automatyzacja procesów biznesowych Andrzej Sobecki. ESB Enterprise service bus

Programowanie obiektowe

Politechnika Krakowska im. Tadeusza Kościuszki. Karta przedmiotu. obowiązuje w roku akademickim 2011/2012. Architektura zorientowana na usługi

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Transkrypt:

Zagadnienia Programowania Obiektowego 21 maja 2007

1 Wprowadzenie Co to i po co Jak było dawniej 2 Java EE 5: JAX WS 2.0 Podstawy Co można skonfigurować 3 Co jeszcze można zrobić Po stronie serwera Po stronie klienta 4 JAX WS od środka Architektura JAX WS 5 Ułatwienia Narzędzia i IDE 6 Zakończenie

Co to i po co Co to jest usługa sieciowa? Web service Dostępny zdalnie (poprzez sieć) komponent programowy, realizujący funkcje wyszczególnione w opisanym w języku WSDL interfejsie, niezależny od wykorzystywanej platformy. Wymiana danych pomiędzy klientem a serwerem odbywa się zazwyczaj za pośrednictwem protokołu SOAP.

Co to i po co Dlaczego ludzie chcą to mieć? Wygodny, elastyczny sposób tworzenia aplikacji rozproszonych Dobre rozdzielenie abstrakcyjnego interfejsu aplikacji od jego konkretnej implementacji Niezależność od wykorzystywanej platformy, zarówno po stronie serwera jak i klienta Łatwość integrowania ze sobą aplikacji pochodzących od różnych dostawców Usługi sieciowe to jeden z podstawowych elementów tzw. Service Oriented Architecture

Jak było dawniej Na samym początku... Najpierw trzeba było napisać w WSDL u definicję usługi Potem jakoś wygenerować jej implementację w Javie Producenci serwerów aplikacji dostarczali do tego swoje własne narzędzia (każdy inne)...... mogliśmy również skorzystać z Apache Axis (http://ws.apache.org/axis/)

Jak było dawniej J2EE 1.4: JAX RPC 1.1 Piszemy w Javie interfejs dla naszej usługi (musi dziedziczyć po java.rmi.remote) oraz klasę, która go implementuje W XML owym deskryptorze podajemy nazwę usługi, docelową przestrzeń nazw oraz wskazujemy interfejs i pakiet zawierający jego implementację Narzędzie wscompile wygeneruje nam odpowiedni plik WSDL oraz mapowania typów Można też w drugą stronę (WSDL Java)

Podstawy JAX WS 2.0: najprostsza usługa Kodujemy klasę implementującą naszą usługę, opatrujemy ją adnotacją javax.jws.webservice... i gotowe package foo ; import javax. jws. WebService ; @ WebService public class Foo { } @WebMethod public String foo ( String arg ) { return " Foo (" + arg + ")!"; }

Podstawy JAX WS 2.0: publikowanie usługi Możemy skorzystać ze statycznej metody Endpoint.publish(), by umieścić naszą usługę pod konkretnym adresem... import javax. xml.ws. Endpoint ; public static void main ( String [] args ) { Endpoint. publish (" http :// localhost :8080/ foo ", new Foo ()); }

Podstawy JAX WS 2.0: publikowanie usługi Możemy skorzystać ze statycznej metody Endpoint.publish(), by umieścić naszą usługę pod konkretnym adresem... import javax. xml.ws. Endpoint ; public static void main ( String [] args ) { Endpoint. publish (" http :// localhost :8080/ foo ", new Foo ()); }... ale jest to konieczne tylko wtedy, gdy pracujemy poza serwerem aplikacji (inaczej wyręczy nas kontener EJB albo serwletów docelowy adres podamy w fazie umieszczania aplikacji na serwerze)

Podstawy JAX WS 2.0: najprostszy klient Korzystając z mechanizmu wstrzykiwania zależności, pobieramy odniesienie do naszej usługi... @ WebServiceRef ( wsdllocation = " http :// localhost :8080/ foo ") static FooService service ;

Podstawy JAX WS 2.0: najprostszy klient Korzystając z mechanizmu wstrzykiwania zależności, pobieramy odniesienie do naszej usługi... @ WebServiceRef ( wsdllocation = " http :// localhost :8080/ foo ") static FooService service ;... wydobywamy z niego port reprezentuje on po stronie klienta interfejs usługi Foo port = service. getfooport ();

Podstawy JAX WS 2.0: najprostszy klient Korzystając z mechanizmu wstrzykiwania zależności, pobieramy odniesienie do naszej usługi... @ WebServiceRef ( wsdllocation = " http :// localhost :8080/ foo ") static FooService service ;... wydobywamy z niego port reprezentuje on po stronie klienta interfejs usługi Foo port = service. getfooport ();... za jego pośrednictwem możemy wywoływać metody dostarczane przez usługę String response = port. foo (" bar ");

Co można skonfigurować Adnotacje i ich parametry @WebService name typ portu (wsdl:porttype), domyślnie nazwa klasy targetnamespace przestrzeń nazw pliku WSDL, domyślnie generowana przez JAXB z nazwy pakietu servicename nazwa usługi, domyślnie nazwa klasy + Service endpointinterface wskazuje na Service Endpoint Interface usługi, jeśli puste, JAX WS sam go wygeneruje portname wartość wsdl:portname, domyślnie WebService.name + Port

Co można skonfigurować Adnotacje i ich parametry, c.d. @WebMethod operationname wartość wsdl:operationname dla tej metody, domyślnie nazwa metody w klasie exclude czy wykluczyć daną metodę z usługi, domyślnie false action wartość SOAP Action

Co można skonfigurować Adnotacje i ich parametry, c.d. @WebMethod operationname wartość wsdl:operationname dla tej metody, domyślnie nazwa metody w klasie exclude czy wykluczyć daną metodę z usługi, domyślnie false action wartość SOAP Action @WebServiceRef wsdllocation adres pliku WSDL opisującego usługę name, type nazwa JNDI i typ wstrzykiwanego zasobu, domyślnie takie jak dla danego pola/własności

Co można skonfigurować Adnotacje i ich parametry, c.d. @BindingType value napis będący URL em określającym protokół przesyłu komunikatów, np. (z javax.xml.ws.soap) SOAPBinding.SOAP11HTTP BINDING [domyślnie], SOAPBinding.SOAP12HTTP BINDING czy javax.xml.ws.http.httpbinding.http BINDING Oprócz tego możemy do klasy implementującej naszą usługę dodawać obserwatorów służą do tego adnotacje @PostConstruct i @PreDestroy

Po stronie serwera Usługi w kontenerze webowym lub EJB Usługi sieciowe można implementować jako ziarenka EJB: klasy takie muszą spełniać wszystkie wymagania dla Stateless Session Beans, a oprócz tego mieć adnotację @WebService lub @WebServiceProvider

Po stronie serwera Usługi w kontenerze webowym lub EJB Usługi sieciowe można implementować jako ziarenka EJB: klasy takie muszą spełniać wszystkie wymagania dla Stateless Session Beans, a oprócz tego mieć adnotację @WebService lub @WebServiceProvider... albo jako serwlety; jeśli chcemy zezwolić na dostęp przez tylko jeden wątek naraz, musimy zaimplementować interfejs javax.servlet.singlethreadmodel (uznany w ostatniej specyfikacji serwletów za przestarzały... ) Również w serwlecie nie wolno przechowywać żadnego stanu

Po stronie serwera Usługi w kontenerze webowym lub EJB Usługi sieciowe można implementować jako ziarenka EJB: klasy takie muszą spełniać wszystkie wymagania dla Stateless Session Beans, a oprócz tego mieć adnotację @WebService lub @WebServiceProvider... albo jako serwlety; jeśli chcemy zezwolić na dostęp przez tylko jeden wątek naraz, musimy zaimplementować interfejs javax.servlet.singlethreadmodel (uznany w ostatniej specyfikacji serwletów za przestarzały... ) Również w serwlecie nie wolno przechowywać żadnego stanu W obu przypadkach publikacją usługi zajmuje się kontener; specyfikacja wymaga, by próba użycia Endpoint.publish() z wewnątrz kontenera kończyła się odmową dostępu

Po stronie serwera Podejście niskopoziomowe Interfejs javax.xml.ws.provider Czasamy możemy chcieć zejść aż do poziomu wiadomości XML owych, które odbiera i wysyła nasza usługa JAX WS daje nam taką możliwość: wystarczy zaimplementować interfejs Provider<T> (zawsze mamy przynajmniej Provider<Source> oraz Provider<SOAPMessage>) Zwawiera on jedną metodę: T invoke(t request) w niej możemy robić wszystko Musimy tylko pamiętać, by przy naszej klasie była adnotacja @WebServiceProvider

Po stronie serwera Podejście niskopoziomowe, c.d. Adnotacja javax.xml.ws.webserviceprovider @WebServiceProvider portname wartość wsdl:portname servicename nazwa usługi targetnamespace przestrzeń nazw pliku WSDL wsdllocation adres pliku WSDL opisującego usługę (wszystkie atrybuty opcjonalne, jeśli ich nie podamy, zostaną użyte wartości z deskryptora)

Po stronie serwera Generowanie kodu w oparciu o WSDL Podobnie jak JAX RPC, także JAX WS daje nam do tego odpowiednie narzędzie tym razem nazywa się ono wsimport Za jego pomocą automatycznie wygenerujemy z pliku WSDL interfejs(y) opisujące naszą usługę; pozostaje nam tylko napisać implementację i pamiętać o adnotacji @WebService(endpointInterface=...) Nie potrzebujemy (jak to było w JAX RPC) żadnych dodatkowych plików konfiguracyjnych

Po stronie klienta Dostęp do usługi poprzez JNDI Zamiast korzystać z wstrzykiwania zależności, możemy wyjąć interfejs naszej usługi z kontekstu: InitialContext ic = new InitialContext (); Service foo = ( Service ) ic. lookup ( " java : comp / env / service / FooService "); albo precyzyjniej: InitialContext ic = new InitialContext (); FooService foo = ( FooService ) ic. lookup ( " java : comp / env / service / FooService "); Z JAX WS usunięto klasę ServiceFactory; zamiast niej należy korzystać właśnie z JNDI albo adnotacji @WebServiceRef

Po stronie klienta Dynamiczny klient Dispatch API Do wywołania metody getport() z klasy Service potrzebna jest nam znajomość opisu WSDL usługi (musi być wskazany w deskryptorze klienta). W przeciwnym razie musimy użyć działającego na poziomie wiadomości XML Dispatch API Service serv = Service. create ( servicename ); serv. addport ( portname, bindingtype, endpointurl ); Dispatch disp = serv. createdispatch ( portname, msgclass, servicemode ); gdzie msgclass to klasa obiektów wiadomości (np. Source lub SOAPMessage), a servicemode to albo Service.Mode.MESSAGE, albo Service.Mode.PAYLOAD

Po stronie klienta Dynamiczny klient, c.d. Mając obiekt typu Dispatch, musimy teraz sami przygotować wiadomość z żądaniem, a następnie wywołać usługę: MessageFactory mf = MessageFactory. newinstance (); SOAPMessage request = mf. createmessage ();... SOAPMessage response = disp. invoke ( request ); // disp. invokeoneway ( request );

Po stronie klienta Dynamiczny klient, c.d. Mając obiekt typu Dispatch, musimy teraz sami przygotować wiadomość z żądaniem, a następnie wywołać usługę: MessageFactory mf = MessageFactory. newinstance (); SOAPMessage request = mf. createmessage ();... SOAPMessage response = disp. invoke ( request ); // disp. invokeoneway ( request ); Możemy też wywołać naszą usługę w sposób asynchroniczny, w trybie polling albo callback: Response <T > response = dispatch. invokeasync ( T); Future <? > response = dispatch. invokeasync ( T, AsyncHandler );

Architektura JAX WS JAX WS a inne elementy Javy EE 5 APT JAX-WS Java EE Annotation Processor SPI tools runtime JAXB SJC API SAAJ JAXB runtime API

Architektura JAX WS Części składowe JAX WS runtime główny moduł zapewniający całą funkcjonalność JAX WS potrzebną w czasie działania naszej aplikacji tools narzędzia (wsgen, wsimport) służące do przekształcania plików WSDL i klas Javy w gotowe do uruchomienia usługi sieciowe Annotation Processing klasy do przetwarzania adnotacji zdefiniowanych w pakiecie javax.jws SPI (Service Provider Interface) zbiór interfejsów i klas abstrakcyjnych określających zasady współpracy pomiędzy JAX WS a pozostałymi składnikami Javy EE 5

Architektura JAX WS Wykorzystywane biblioteki SAAJ (SOAP with Attachments API for Java) do tworzenia, wysyłania, odbierania i dekodowania wiadomości SOAP (wiadomości odbierane są jako strumienie w obiektach HttpServletRequest) JAXB (Java Architecture for XML Binding) do serializacji i deserializacji obiektów Javy do/z XML; w JAX RPC stosowane były do tego własne mechanizmy

Narzędzia i IDE IDE, wtyczki, itp. Eclipse W Eclipse Web Tools nie ma i jeszcze przez jakiś czas nie będzie; w wersji 2.0 obsługa JAX WS na pewno już się nie pojawi (z nowych rzeczy ma być tylko Apache Axis2) Wsparcie dla JAX WS ma być w SOA Tools Platform (http://www.eclipse.org/stp/), na razie w wersji 0.4.0 Maven Pod adresem https://jax-ws-commons.dev.java.net/ dostępna jest wtyczka umożliwiająca korzystanie z narzędzi wsgen i wsimport

Narzędzia i IDE IDE, wtyczki, itp. NetBeans Obsługa JAX WS pojawiła się w wersji 5.0, w 5.5 ulepszona i uzupełniona; dalsze rozszerzenia w Enterprise Packu Kreatory do tworzenia projektów aplikacji implementujących i korzystających z usług sieciowych, automatyczne generowanie kodu (w tym dla wywołań asynchronicznych!), narzędzia ułatwiające konfigurowanie aplikacji,...

Narzędzia i IDE

Narzędzia i IDE

Narzędzia i IDE

Powiązane technologie JAXR (Java API for XML Registries) ułatwia publikowanie informacji o usługach i ich wyszukiwanie w tzw. rejestrach, np. w standardzie ebxml czy UDDI (Universal Description, Discovery, and Integration) WSIT (Web Services Integration Tools) API mające na celu ułatwienie współpracy klientów i serwerów usług sieciowych pomiędzy platformami Java EE oraz.net BPEL (Business Process Execution Language) język do orkiestracji usług sieciowych (komponowania ich w bardziej złożone procesy biznesowe). Referencyjna implementacja Javy EE 5 (Glassfish) zawiera wbudowane środowisko do wykonywania takich procesów

Więcej informacji JSR 109: Implementing Enterprise Web Services http://www.jcp.org/en/jsr/detail?id=109 JSR 181: Web Services Metadata for the Java Platform http://www.jcp.org/en/jsr/detail?id=181 Strona referencyjnej implementacji JAX WS https://jax-ws.dev.java.net/ Opis architektury JAX WS https://jax-ws-architecture-document.dev.java.net/ Introducing JAX WS with Java SE http://java.sun.com/developer/technicalarticles/j2se/ jax_ws_2/index.html

Więcej informacji, c.d. JAX WS Dispatch and Provider APIs http://java.sun.com/mailers/techtips/enterprise/2006/ TechTips_July06.html Writing a Handler in JAX WS http://java.sun.com/mailers/techtips/enterprise/2006/ TechTips_June06.html Implementing SOA with Java EE 5 http://java.sun.com/developer/technicalarticles/ WebServices/soa3/ Web Services Interoperability Technology http://java.sun.com/webservices/interop/