The document outlines a general product direction intended for information purposes only and should not be relied upon for purchasing decisions. The development and release of any features remains at Oracle's sole discretion.
1 of 31
Downloaded 20 times
More Related Content
JAX-RS Creating RESTFul services
1. The following is intended to outline our general
product direction. It is intended for information
purposes only, and may not be incorporated into any
contract. It is not a commitment to deliver any
material, code, or functionality, and should not be
relied upon in making purchasing decisions.
The development, release, and timing of any
features or functionality described for Oracles
products remains at the sole discretion of Oracle.
1
2. <Insert Picture Here>
Creating RESTful Web Services using JAX-RS
Ludovic Champenois
Architect GlassFish NetBeans - Eclipse
3. Agenda
REST and JAX-RS <Insert Picture Here>
Deployment Options
Demo
Status
Q&A
3
4. REST is an Architectural Style
Set of constraints you apply to the architecture of a
distributed system to induce desirable properties
4
5. RESTful Web Services
Application of REST architectural style to services
that utilize Web standards:
URIs, HTTP, MIME, HTML, XML, Atom, RDF, ...
5
6. Java API for RESTful Web Services (JAX-RS)
Standard annotation-driven API that aims to help
developers build RESTful Web services in Java
JSR 311
Part of Java EE 6 now
6
7. RESTful Application Cycle
Resources are identified by URIs
Clients communicate with resources via requests using a
standard set of HTTP methods
Requests and responses contain resource representations in
formats identified by media types
Responses contain URIs that link to further resources
7
8. Resources are identified by URIs
http://example.com/widgets/foo
http://example.com/customers/bar
http://example.com/customers/bar/orders/2
http://example.com/orders/101230/customer
8
9. Resources are identified by URIs
Resource == Java class POJO
No required interfaces
ID provided by @Path annotation
Value is relative URI, base URI is provided by
deployment context or parent resource
Embedded parameters for non-fixed parts of the URI
Annotate class or sub-resource locator method
9
10. Resources are identified by URIs
@Path("properties")
public class SystemProperties {
@GET
List<SystemProperty> getProperties(...) {...}
@Path("{name}")
SystemProperty getProperty(...) {...}
}
10
11. Standard Set of Methods
Method Purpose
GET Read, possibly cached
POST Update or create without a known ID
PUT Update or create with a known ID
DELETE Remove
11
12. Standard Set of Methods
Annotate resource class methods with standard
method
@GET, @PUT, @POST, @DELETE, @HEAD
@HttpMethod meta-annotation allows extensions,
e.g. WebDAV
JAX-RS routes request to appropriate resource class
and method
Flexible method signatures, annotations on
parameters specify mapping from request
Return value mapped to response
12
13. Standard Set of Methods
@Path("properties/{name}")
public class SystemProperty {
@GET
Property get(@PathParam("name") String name)
{...}
@PUT
Property set(@PathParam("name") String name,
String value) {...}
}
13
14. Resource Representations
Representation format identified by media type. E.g.:
XML - application/properties+xml
JSON - application/properties+json
(X)HTML+microformats - application/xhtml+xml
JAX-RS automates content negotiation
GET /foo
Accept: application/properties+json
14
15. Resource Representations
Static and dynamic content negotiation
Annotate methods or classes with static capabilities
@Produces, @Consumes
Use Variant, VariantListBuilder and
Request.selectVariant for dynamic capabilities
Also supports language and encoding
15
18. Responses Contain Links
UriInfo provides information about deployment
context, the request URI and the route to the resource
UriBuilder provides facilities to easily construct URIs
for resources
18
19. Responses Contain Links
@Context UriInfo i;
SystemProperty p = ...
UriBuilder b = i.getBaseUriBuilder();
URI u = b.path(SystemProperties.class)
.path(p.getName()).build();
List<URI> ancestors = i.getMatchedURIs();
URI parent = ancestors.get(1);
19
20. Agenda
REST and JAX-RS <Insert Picture Here>
Deployment Options
Demo
Status
Q&A
20
21. Java SE Deployment
RuntimeDelegate is used to create instances of a
desired endpoint class
Application supplies configuration information
List of resource classes and providers as subclass of
Application
Implementations can support any Java type
Jersey supports Grizzly and the LW HTTP server in Sun's
JDK.
21
22. Example Java SE Deployment
Application app = ...
RuntimeDelegate rd =
RuntimeDelegate.getInstance();
Adapter a = rd.createEndpoint(app,
Adapter.class);
SelectorThread st = GrizzlyServerFactory.create(
http://127.0.0.1:8084/, a);
22
23. Servlet
JAX-RS application packaged in WAR like a servlet
For JAX-RS aware containers
web.xml can point to Application subclass
For non-JAX-RS aware containers
web.xml points to implementation-specific Servlet; and
an init-param identifies the Application subclass
Resource classes and providers can access Servlet
request, context, config and response via injection
23
24. Java EE
Resource class can be an EJB session or singleton bean
or CDI Beans
Providers can be an EJB stateless session or singleton
bean
JAX-RS annotations on local interface or no-interface
bean
Full access to facilities of native component model, e.g.
resource injection
24
26. CDI and JAX-RS
General CDI requirement: beans.xml needs to be declared to
enable CDI managed beans
e.g. empty WEB-INF/beans.xml in war
Root resource classes need to be annotated with a CDI scope
@Path("request-scoped")
@RequestScoped
public class RequestScopedResource { }
@Path("application-scoped")
@ApplicationScoped
public class ApplicationScopedResource { }
26
27. Servlet 3.0 and JAX-RS
No WEB-INF/web.xml for simple deployments
Use extension of javax.ws.rs.Application and
@javax.ws.rs.ApplicationPath
@ApplicationPath("resources)
public class MyApp extends Application { ... }
Use WEB-INF/web.xml for portable deployments
<web-app version="3.0">
<servlet>
<servlet-name>Jersey Web
Application</servlet-name>
<servlet-class>...MyApp</servlet-class>
27
28. Agenda
REST and JAX-RS <Insert Picture Here>
Deployment Options
Demo
Matching URLs,
Consuming POST Requests (@POST, @FormParam)
GlassFish Admin Backend: A REST Application
Status
Q&A
28
29. Agenda
REST and JAX-RS <Insert Picture Here>
Deployment Options
Demo
Status
Q&A
29
30. Status
JAX-RS 1.0: 18th October 2008
JAX-RS 1.1: 23rd November 2009
Aligned with Java EE 6, but not in the Web profile!
JAX-RS 2.0: Future<?>
Draft JSR 12th November 2010
Like to submit to JCP in December or early next year
http://bit.ly/bkXtay
Implementations
Apache CXF, Apache Wink, eXo, Jersey, RESTEasy, Restlet,
Triaxrs
30
31. Agenda
REST and JAX-RS <Insert Picture Here>
Deployment Options
Demo
Status
Q&A
31