Webszervizek (JAX-WS, és JAX-RS) bemutatása

Slides:



Advertisements
Hasonló előadás
4. alkalom – Hálózat Kezelés
Advertisements

RESTful Web Service tesztelése
Java web programozás 11..
Számvitel S ZÁMVITEL. Számvitel Ormos Mihály, Budapesti Műszaki és Gazdaságtudományi Egyetem, Hol tartunk... Hiányzik egy jól strukturált rendszer.
FIATALOK LENDÜLETBEN PROGRAM Ruska Mónika – Mobilitás Országos Ifjúsági Szolgálat - Fiatalok Lendületben Programiroda.
Az Endnote bibliográfia adatbázis- kezelő szoftver alapvető használata 2013 Skultéti Attila
Készítsünk DIP-et! Szatucsek Zoltán. OAIS DIP Dissemination Information Package (DIP): The Information Package, derived from one or more AIPs, received.
Bevezetés a C# nyelvbe Az alapok összefoglalása Farkas Csaba.
Irattári és levéltári funkciók a tanúsított szoftverekben Vágujhelyi Ferenc.
Szakbolti kommunikációs stratégia. információ A mai nap Feltérképezzük, hogy milyen – Irányba folyik a kommunikáció – Kommunikációs csatornákon keresztül,
JAX-RS: JAVA API FOR RESTFUL WEB SERVICES. REST ARCHITEKTÚRÁJÚ WEBSZOLGÁLTATÁSOK LÉTREHOZÁSÁRA HASZNÁLJUK. AZ 1.1-ES VERZIÓTÓL KEZDVE A JAX-RS HIVATALOS.
Az IKER önértékelő IKER társadalmasítás workshop Budapest, április 12.
1 Az önértékelés mint projekt 6. előadás 1 2 Az előadás tartalmi elemei  A projekt fogalma  A projektek elemei  A projekt szervezete  Projektfázisok.
A villamosenergia–ipari sportmozgalom eredményei és aktuális kérdései - A szociális partnerek együttműködése az iparági sportmozgalomban EVDSZ II. Taggyűlés.
BINARIT TIMESHEET Több, mint munkaidő nyilvántartás Virág Zsolt (BINARIT Informatikai Kft.)„Hogyan legyek milliomos?” konferencia – BKIK ( )
GUARDING YOUR BUSINESS ■ Linux disztribúciók és FreeBSD az upstream szemszögéből Czanik Péter Community manager syslog-ng upstream.
Nem csak szövegszerkeszt ő virtuózoknak Az Open Office.org 2.0 béta verzió Bándliné Utasi Mária Writer.
Internet tudományos használata
Operációs rendszerek.
EJB üzenet vezérelt bean (MDB)
Alhálózat számítás Osztályok Kezdő Kezdete Vége Alapértelmezett CIDR bitek alhálózati maszk megfelelője A /8 B
A CMMI modell alkalmazása SOA-környezetben

videós team Team vezetője: Tariné Péter Judit Tagok:
Adatok importálása, rendezése és szűrése
SNMPView Készítette: Varga Gábor
Programozás I. Gyakorlás egydimenziós tömbökkel Többdimenziós tömbök
Web technológia alapjai
Dependency Injection Moq Feladat
Számítógépes Hálózatok
PHP-SQL adatbáziskezelő parancsai
Animációk.
Adatbázis-kezelés (PL/SQL)
ADAT ÉS TECHNOLÓGIA ORIENTÁLT MARKETING TEVÉKENYSÉG, VÉGE A MEGÉRZÉSEK ÉS AZ ÉRZELMI ALAPÚ DÖNTÉSHOZATALNAK.
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
☺ Programozási környezetek Validátorok Fazekas Judit PTI 2010.
A számítógép operációs rendszere
Körmendi Dániel MAS Meeting Scheduler.
A Hálózat és Az internet
Rendszerfejlesztés gyakorlat
Számítógépes Hálózatok
Az Endnote bibliográfia adatbázis-kezelő szoftver alapvető használata november Skultéti Attila
CONTROLLING ÉS TELJESÍTMÉNYMENEDZSMENT DEBRECENI EGYETEM
CALDERONI FORRÁSKEZELŐ RENDSZER
3. A robot képernyőmenüje
Tájékoztató az Önkormányzati ASP Projektről
Informatikai gyakorlatok 11. évfolyam
B M Java Programozás 4. Gy: Java GUI IT A N Tipper, MVC kalkulátor
Oracle Adatbázisok kezelése c#-ban
Web programozás és haladó fejlesztési technikák XML
Sigfox technológia és hálózatok
Megfigyelés és kísérlet
B M Java Programozás 9. Gy: Java alapok IT A N Adatkezelő 5.rész
Számítógépes Hálózatok
Adatbázisok használata
A szállítási probléma.
I. HELYZETFELMÉRÉSI SZINT FOLYAMATA 3. FEJLESZTÉSI FÁZIS 10. előadás
A számítógép operációs rendszere
B M Java Programozás 2. Gy: Java alapok IT A N Adatszerkezetek
SQL jogosultság-kezelés
Tájékoztató az EPER pályázati folyamatáról
TITKOSÍTÓ ALGORITMUSOK
IT hálózat biztonság Összeállította: Huszár István
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Adatforgalom és lokális adattárolás PWA-k esetében
Háttértárak Merevlemezek.
Háttértárak Merevlemezek.
OpenBoard Kezelő Tananyag közzététele a KRÉTA rendszerben.
Dr. Papócsi László Gábor
Szabálytalanságkezelés
Előadás másolata:

Webszervizek (JAX-WS, és JAX-RS) bemutatása Nagy Zoltán Arnold Zoltan.Nagy@Sun.COM

Miért van szükség webszervizekre? Hogy ne találja ki mindenki a saját protokollját – szabvány rögzíti mind az üzenetek formátumát, mind az üzenetcsere protokollját (pl HTTP feletti SOAP üzenetek, amik XMLből állnak) Hogy ne legyünk platformhoz kötve mondjuk tudjuk C# kliensből hívni a Java EE -s webszervizeinket Hogy el tudjuk osztani az alkalmazásainkat a hívó félnek teljesen mindegy, hogy egy cluster, vagy egy gép a célpont

Lehetőségek Java API for XML Web Services (JAX-WS, JSR 244) A JAX-RPC utódja Web Service Definition Language (WSDL) <> Java összerendelhetőséget tesz lehetővé Metódushívást tesz lehetővé, az üzenetek SOAP üzenetek, XMLként utaznak valamilyen protokoll felett (általában HTTP(S)) Java API for RESTful Web Services (JAX-RS, JSR 311) A metódusokat felváltják az erőforrások Lényegében a domain modellt nyujtja át a felhasználónak JAXB a felelős mindkettőnél a Java <> XML áthidalására Példa: egy blognál az addPost() metódus a fontos, vagy hogy a blogon postok vannak? Jobb lenne őket közvelten kezelni?

JAX-WS (Java SE) @WebService public class Szamologep { @WebMethod(operationName=”osszead”) public int osszead(@WebParam(name=”a”) int a, @WebParam(name=”b”) int b) { return a + b; } } public static void main(String[] args) { Endpoint.publish(“http://localhost:8080/ws/szamologep”, new Szamologep()); }

JAX-WS (Java SE) @WebService @Stateless public class Szamologep { @WebMethod(operationName=”osszead”) public int osszead(@WebParam(name=”a”) int a, @WebParam(name=”b”) int b) { return a + b; } }

Java kliens import elte.ws.SzamologepService; import elte.ws.Szamologep; class SzamologepClient { public static void main(String[] args) { try { SzamologepService service = new SzamologepService(); Szamologep port = service.getSzamologepPort(); System.out.println("1+2: " + port.osszead(1,2)); } catch (Exception e) { e.printStackTrace(); } } }

Futtatásnál... Kimenő kérés (HTTP POST): <?xml version="1.0" encoding="UTF-8"?> <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> <S:Header/> <S:Body> <ns2:osszead xmlns:ns2="http://ws/"> <a>1</a> <b>2</b> </ns2:osszead> </S:Body> </S:Envelope>

Futtatásnál... Válasz: <?xml version="1.0" encoding="UTF-8"?> <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> <S:Body> <ns2:osszeadResponse xmlns:ns2="http://ws/"> <return>3</return> </ns2:osszeadResponse> </S:Body> </S:Envelope>

JAX-RS A domain modellben lévő objektumokkal dolgozik a felhasználó, valamilyen absztrakción keresztül (egy objektum ~ egy resourcekezelő, pl employeeshoz: /employees) Általában mindig egy interfészt valósítunk meg, itt sincs ez másképp: a definiált interfész a HTTP, ennek a műveleteit valósíthatjuk meg GET: adatok lekérése PUT: új adat beszúrása POST: már meglévő adat frissítése DELETE: adat törlése HEAD, OPTIONS A JAX-RS referenciaimplementáció lényegében egy Servlet, ami “érti” a JSR-311 -es annotációkat, és így tudja használni az általunk írt resourceokat

JAX-RS (folytatás) Az erőforrások főnevek az URI azonosítja Egységes interfész Jól bevált szabvány, a HTTP Példa zenetárra: /movies/directors/ - az összes filmrendező /movies/directors/{id} – egy rendező kiválasztása /movies/directors/{id}/movies – a rendező filmjeinek a listája Az adat lehet bármi: XML, JSON, Atom, XHTML, … Kik használják? Amazon, Google ...véletlen: flickr, del.icio.us

JAX-RS (folytatás) Az erőforrások főnevek az URI azonosítja Egységes interfész Jól bevált szabvány, a HTTP Példa zenetárra: /movies/directors/ - az összes filmrendező /movies/directors/{id} – egy rendező kiválasztása /movies/directors/{id}/movies – a rendező filmjeinek a listája Az adat lehet bármi: XML, JSON, Atom, XHTML, … Kik használják? Amazon, Google ...véletlen: flickr, del.icio.us

JAX-RS erőforrás @Path("/uzenetek") @Singleton public class UzenetResource { private final LinkedList<Uzenet> uzenetek = new LinkedList<Uzenet>(); @GET @Produces(MediaType.APPLICATION_XML) public List<String> getUzenetek() { return uzenetek; } @PUT @Consumes(MediaType.TEXT_PLAIN) public Response postUzenet(String uzenet) { uzenetek.add(uzenet); return Response.ok().build(); } }

JAX-RS használat, PUT [nagyz@x ~]$ curl -v -X PUT -H 'Content-type: text/plain' -d 'hello3' -L http://localhost:9812/uzenetek * About to connect() to localhost port 9812 * Trying 127.0.0.1... connected * Connected to localhost (127.0.0.1) port 9812 > PUT /uzenetek HTTP/1.1 > User-Agent: curl/7.15.5 (x86_64-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5 > Host: localhost:9812 > Accept: */* > Content-type: text/plain > Content-Length: 6 > > hello3HTTP/1.1 200 OK < server: grizzly/1.9.18 < Content-Length: 0 < Date: Fri, 04 Dec 2009 10:44:15 GMT * Connection #0 to host localhost left intact * Closing connection #0 [nagyz@x ~]$

JAX-RS használat, GET [nagyz@x ~]$ curl -H GET -v http://localhost:9812/uzenetek * About to connect() to localhost port 9812 * Trying 127.0.0.1... connected * Connected to localhost (127.0.0.1) port 9812 > GET /uzenetek HTTP/1.1 > User-Agent: curl/7.15.5 (x86_64-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5 > Host: localhost:9812 > Accept: */* > < HTTP/1.1 200 OK < server: grizzly/1.9.18 < Content-Type: application/xml < Content-Length: 272 < Date: Fri, 04 Dec 2009 10:45:47 GMT Connection #0 to host localhost left intact * Closing connection #0 <?xml version="1.0" encoding="UTF-8" standalone="yes"?><uzenets><uzenet><uzenet>hello1</uzenet><date>1259923449529</date> </uzenet><uzenet><uzenet>hello2</uzenet><date>1259923452296</date></uzenet><uzenet>< uzenet>hello3</uzenet><date>1259923455732</date></uzenet></uzenets> [nagyz@x ~]$

JAX-RS használat, GET (2) <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <uzenets> <uzenet> <uzenet>hello1</uzenet> <date>1259923449529</date> </uzenet> <uzenet> <uzenet>hello2</uzenet> <date>1259923452296</date> </uzenet> <uzenet> <uzenet>hello3</uzenet> <date>1259923455732</date> </uzenet> </uzenets>

JAX-RS használat, PUT [nagyz@x ~]$ curl -v -X PUT -H 'Content-type: text/plain' -d 'hello3' -L http://localhost:9812/uzenetek * About to connect() to localhost port 9812 * Trying 127.0.0.1... connected * Connected to localhost (127.0.0.1) port 9812 > PUT /uzenetek HTTP/1.1 > User-Agent: curl/7.15.5 (x86_64-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5 > Host: localhost:9812 > Accept: */* > Content-type: text/plain > Content-Length: 6 > > hello3HTTP/1.1 200 OK < server: grizzly/1.9.18 < Content-Length: 0 < Date: Fri, 04 Dec 2009 10:44:15 GMT * Connection #0 to host localhost left intact * Closing connection #0 [nagyz@x ~]$

SOAP vs REST SOAP: bevált Tranzakciókezelés, digitális aláírás, titkosítás, ... Minden HTTP POST (amennyiben HTTP a transzportrétegünk), még az adatlekérés is! XML + SOAP envelope overhead magas REST: “új” (2000-ben találták ki) minden HTTP felett (→ stateless, cachelhető, uniform interfész) egyszerűség a SOAP újra feltalálja a kereket (a HTTP-t...)