13
Enterprise-IT-Praktikum JAX-RS-Einführung Institut für Telematik Universität zu Lübeck Wintersmester 2012/13 Dennis Boldt David Gregorczyk

Enterprise-IT-Praktikum JAX-RS-Einführung Institut für Telematik Universität zu Lübeck Wintersmester 2012/13 Dennis Boldt David Gregorczyk

Embed Size (px)

Citation preview

Page 1: Enterprise-IT-Praktikum JAX-RS-Einführung Institut für Telematik Universität zu Lübeck Wintersmester 2012/13 Dennis Boldt David Gregorczyk

Enterprise-IT-PraktikumJAX-RS-Einführung

Institut für TelematikUniversität zu Lübeck

Wintersmester 2012/13Dennis BoldtDavid Gregorczyk

Page 2: Enterprise-IT-Praktikum JAX-RS-Einführung Institut für Telematik Universität zu Lübeck Wintersmester 2012/13 Dennis Boldt David Gregorczyk

Institut für Telematik | Enterprise-IT-Praktikum

Enterprise-IT-Praktikum – JAX-RS-Einführung 2

Wer kennt es nicht – ROA• ROA steht für Resource-oriented Architecture

Counterpart: Service-oriented Architecture (SOA)• Roy Fielding: Representational State Transfer (ReST)• Konzept: über Hyperlinks (URIs) werden Ressourcen

bereitgestellt und/oder miteinander verknüpft– Adressierbarkeit– Unterschiedliche Repräsentationen– Zustandslosigkeit– Wohldefinierte Zugriffsoperationen– Hypermedia

• Wie komisch, passt ja perfekt zu HTTP…

Page 3: Enterprise-IT-Praktikum JAX-RS-Einführung Institut für Telematik Universität zu Lübeck Wintersmester 2012/13 Dennis Boldt David Gregorczyk

Institut für Telematik | Enterprise-IT-Praktikum

Enterprise-IT-Praktikum – JAX-RS-Einführung 3

Gibt’s da auch was von Ratiopharm?• Nein, aber von Java: JSR-311

Java API for RESTful Web Services (JAX-RS)• Reference Implementation „Jersey“

• Subprojekt vom GlassFish-Application-Server• http://jersey.java.net

• Unterstützt die Konstruktion von REST-konformen Schnittstellen mit Hilfe von Java-Annotationen

• JAX-RS 1.1 fertiggestellt• Version 2.0 ist im Bearbeitungsstatus

Page 4: Enterprise-IT-Praktikum JAX-RS-Einführung Institut für Telematik Universität zu Lübeck Wintersmester 2012/13 Dennis Boldt David Gregorczyk

Institut für Telematik | Enterprise-IT-Praktikum

Enterprise-IT-Praktikum – JAX-RS-Einführung 4

VorgehenServer-Seite• Klassen mit Funktionalität programmieren• Annotationen einfügen• Web-Server-Deployment durchführenClient-Seite• Testen z.B. mit curl auf Kommandozeile:

curl –HAccept:application/json http://localhost:8080/rest/hello

• Browser-Plugin: XHR-Poster• Jersey-Client-API

Page 5: Enterprise-IT-Praktikum JAX-RS-Einführung Institut für Telematik Universität zu Lübeck Wintersmester 2012/13 Dennis Boldt David Gregorczyk

Institut für Telematik | Enterprise-IT-Praktikum

Enterprise-IT-Praktikum – JAX-RS-Einführung 5

Server-Seite: Klassen programmieren

public class HelloResource // Name beliebig{

public String sayProst() // Name beliebig { return "Prost"; }}

Page 6: Enterprise-IT-Praktikum JAX-RS-Einführung Institut für Telematik Universität zu Lübeck Wintersmester 2012/13 Dennis Boldt David Gregorczyk

Institut für Telematik | Enterprise-IT-Praktikum

Enterprise-IT-Praktikum – JAX-RS-Einführung 6

Server-Seite: Annotationen einfügen@Path("/hello")public class HelloResource //Name beliebig{ @GET @Produces(MediaType.TEXT_PLAIN) public String sayProst() //Name beliebig { return "Prost"; }}

Page 7: Enterprise-IT-Praktikum JAX-RS-Einführung Institut für Telematik Universität zu Lübeck Wintersmester 2012/13 Dennis Boldt David Gregorczyk

Institut für Telematik | Enterprise-IT-Praktikum

Enterprise-IT-Praktikum – JAX-RS-Einführung 7

Deployment: Servlet-Container mit Tomcat<web-app …> <servlet> <servlet-name>ServletAdaptor</servlet-name> <servlet-class> com.sun.jersey.spi.container.servlet.ServletContainer </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>ServletAdaptor</servlet-name> <url-pattern>/rest/*</url-pattern> </servlet-mapping> <session-config> <session-timeout>30</session-timeout> </session-config></web-app>

Page 8: Enterprise-IT-Praktikum JAX-RS-Einführung Institut für Telematik Universität zu Lübeck Wintersmester 2012/13 Dennis Boldt David Gregorczyk

Institut für Telematik | Enterprise-IT-Praktikum

Enterprise-IT-Praktikum – JAX-RS-Einführung 8

Deployment: Java NIO mit GrizzlyURI baseUri =

UriBuilder.fromUri("http://localhost/rest").port(9998).build();ResourceConfig rc = new

PackagesResourceConfig("pkg.to.resources");HttpServer srv = GrizzlyServerFactory.createHttpServer(baseUri,

rc);System.in.read();srv.stop();

Quelle: Jersey Documentationhttp://jersey.java.net/nonav/documentation/latest/user-guide.html#d4e54

Page 9: Enterprise-IT-Praktikum JAX-RS-Einführung Institut für Telematik Universität zu Lübeck Wintersmester 2012/13 Dennis Boldt David Gregorczyk

Institut für Telematik | Enterprise-IT-Praktikum

Enterprise-IT-Praktikum – JAX-RS-Einführung 9

Da geht noch was…• Ein- und Ausgabeparameter• Sub-resources-Konzept für strukturierten

Ressourcen-Zugriff• Automatisches Marshalling/Unmarshalling von

Java-Objekten zu XML/JSON sehr elegant z.B. mit JAXB

Page 10: Enterprise-IT-Praktikum JAX-RS-Einführung Institut für Telematik Universität zu Lübeck Wintersmester 2012/13 Dennis Boldt David Gregorczyk

Institut für Telematik | Enterprise-IT-Praktikum

Enterprise-IT-Praktikum – JAX-RS-Einführung 10

Ein- und Ausgabeparameter@Path("/users")public class UserResource{ @POST @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public String createUser(String userData) { ... }

@GET @Path("{userid}") @Produces(MediaType.APPLICATION_JSON) public String getUser(@PathParam("userid") String userId) { ... }}

Page 11: Enterprise-IT-Praktikum JAX-RS-Einführung Institut für Telematik Universität zu Lübeck Wintersmester 2012/13 Dennis Boldt David Gregorczyk

Institut für Telematik | Enterprise-IT-Praktikum

Enterprise-IT-Praktikum – JAX-RS-Einführung 11

Das Sub-resources-Konzept@Path("/rest")public class RestResource{ @Path("users") public String userSubresource(String userData) { return new UserResource(); }}

public class UserResource{ ...}

• Sub-sub-Resources, Sub-sub-sub-Resources usw. möglich

• Sub-Resources erhalten KEINE Kontextinformationen

Page 12: Enterprise-IT-Praktikum JAX-RS-Einführung Institut für Telematik Universität zu Lübeck Wintersmester 2012/13 Dennis Boldt David Gregorczyk

Institut für Telematik | Enterprise-IT-Praktikum

Enterprise-IT-Praktikum – JAX-RS-Einführung 12

Automatisches Marshalling/Unmarshalling (1/2)• Ein-/Ausgabe-Parameter standardmäßig Strings…• Automatische Transformation wünschenswert• JAXB

• XML-zu-Java-Objekt-Mapping-Spezifikation, JSR-222• http://jaxb.java.net/

• Kann in Zusammenhang mit Jersey eingesetzt werden

• Sowohl für XML als auch für JSON• Statt Strings werden in den Resource-Definitionen

die JAXB-Beans angegeben

• Vorteil mit Hibernate: gemeinsame Klassen für Persistenz und Serialisierung möglich

Page 13: Enterprise-IT-Praktikum JAX-RS-Einführung Institut für Telematik Universität zu Lübeck Wintersmester 2012/13 Dennis Boldt David Gregorczyk

Institut für Telematik | Enterprise-IT-Praktikum

Enterprise-IT-Praktikum – JAX-RS-Einführung 13

Automatisches Marshalling/Unmarshalling (2/2)// JAXB-Bean@XmlRootElementpublic class User{

private String userName;private String password;

}

// JAX-RS-Ressource – Parameter und Rückgabe sind User-Objekte@Path("/users")public class UserResource{ @POST @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public User createUser(User userData) { ... }}