SlideShare uma empresa Scribd logo
1 de 48
JAX-RS 2.0: RESTful Java on Steroids
Arun Gupta, Java EE & GlassFish Guy
http://blogs.oracle.com/arungupta, @arungupta
 1   Copyright © 2011, Oracle and/or its affiliates. All rights
     reserved.
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 Oracle’s products remains at the sole discretion
                     of Oracle.




2   Copyright © 2011, Oracle and/or its affiliates. All rights
    reserved.
Part I: How we got here ?




3   Copyright © 2011, Oracle and/or its affiliates. All rights
    reserved.
How We Got Here?

    • Shortest intro to JAX-RS 1.0
    • Requested features for JAX-RS 2.0
    • JSR 339: JAX-RS 2.0




4   Copyright © 2011, Oracle and/or its affiliates. All rights
    reserved.
JAX-RS Origins

    • JAX-RS 1.0 is Java API for RESTful WS
    • RESTFul Principles:
       – Assign everything an ID
       – Link things together
       – Use common set of methods
       – Allow multiple representations
       – Stateless communications



5   Copyright © 2011, Oracle and/or its affiliates. All rights
    reserved.
JAX-RS 1.0 Goals

    • POJO-Based API
    • HTTP Centric
    • Format Independence
    • Container Independence
    • Inclusion in Java EE




6   Copyright © 2011, Oracle and/or its affiliates. All rights
    reserved.
Example: JAX-RS API
                                                                           Resources


@Path("/atm/{cardId}")
                                                                                       URI Parameter
public class AtmService {                                                                Injection

        @GET @Path("/balance")
        @Produces("text/plain")
        public String balance(@PathParam("cardId") String card,
                              @QueryParam("pin") String pin) {
            return Double.toString(getBalance(card, pin));
        }

        …

 HTTP Method                                                        Built-in
   Binding                                                        Serialization



 7   Copyright © 2011, Oracle and/or its affiliates. All rights
     reserved.
Example: JAX-RS API (contd.)
                …                                                Custom Serialization

            @POST @Path("/withdrawal")
            @Consumes("text/plain")
            @Produces("application/json")
            public Money withdraw(@PathParam("card") String card,
                                  @QueryParam("pin") String pin,
                                  String amount){
                return getMoney(card, pin, amount);
            }
}




8   Copyright © 2011, Oracle and/or its affiliates. All rights
    reserved.
Requested Features

                                                                 Filters/Handlers
                                       Client API

                                                                                    Hypermedia
                            Async                                JSR 330

                                                                                     Validation
                                    Improved
                                     Conneg                          MVC

9   Copyright © 2011, Oracle and/or its affiliates. All rights
    reserved.
JSR 339 Expert Group

     • EG Formed in March 2011
     • Oracle Leads: Marek Potociar / Santiago Pericas-G.
     • Expert Group:
        – Jan Algermissen, Florent Benoit, Sergey Beryozkin (Talend),
          Adam Bien, Bill Burke (RedHat), Clinton Combs, Bill De Hora,
          Markus Karg, Sastry Malladi (Ebay), Julian Reschke, Guilherme
          Silveira, Dionysios Synodinos
     • Early Draft 2 published on Feb 9, 2012!


10   Copyright © 2011, Oracle and/or its affiliates. All rights
     reserved.
Part II: Where We Are Going




11   Copyright © 2011, Oracle and/or its affiliates. All rights
     reserved.
New in JAX-RS 2.0
                                                                                        ✔
                                                                      ✔   Filters/Handlers
                                        Client API
                                                                                                           ✔
                                                                                             Hypermedia
                                                                  ✔                 ✔
                             Async                                        JSR 330
                                                                                                           ✔
                                                                                              Validation
                                     Improved
                                                                      ✔
                                                                                        ✗
                                      Conneg                                  MVC

12   Copyright © 2011, Oracle and/or its affiliates. All rights
     reserved.
New in JAX-RS 2.0
                                                                  ✔     Interceptors
                                        Client API                        /Handlers

                                                                                       Hypermedia
                             Async                                    JSR 330

                                                                                        Validation
                                     Improved
                                      Conneg

13   Copyright © 2011, Oracle and/or its affiliates. All rights
     reserved.
Motivation

     • HTTP client libraries too low level
     • Sharing features with JAX-RS server API
       • E.g., MBRs and MBWs

     • Supported by some JAX-RS 1.0 implementations
       • Need for a standard




14   Copyright © 2011, Oracle and/or its affiliates. All rights
     reserved.
Example: Client API

// Get instance of Client
Client client = ClientFactory.newClient();

Can also inject @URI for the target 

// Get account balance
String bal = client.target("http://.../atm/balance")
    .pathParam("card", "111122223333")
    .queryParam("pin", "9876")
    .request("text/plain").get(String.class);


16   Copyright © 2011, Oracle and/or its affiliates. All rights
     reserved.
Example: Client API (contd.)

// Withdraw some money
Money mon = client.target("http://.../atm/withdraw")
    .pathParam("card", "111122223333")
    .queryParam("pin", "9876")
    .request("application/json")
    .post(text("50.0"), Money.class);




17   Copyright © 2011, Oracle and/or its affiliates. All rights
     reserved.
Example: Generic Interface (Command pattern,
     Batch processing)
Invocation inv1 =
    client.target("http://.../atm/balance")…
    .request(“text/plain”).buildGet();

Invocation inv2 =
    client.target("http://.../atm/withdraw")…
    .request("application/json")
    .buildPost(text("50.0"));




18   Copyright © 2011, Oracle and/or its affiliates. All rights
     reserved.
Example: Generic Interface (contd.)

Collection<Invocation> invs =
  Arrays.asList(inv1, inv2);

Collection<Response> ress =
  Collections.transform(invs,
    new F<Invocation, Response>() {
      public Response apply(Invocation inv) {
        return inv.invoke();
      }
    });


19   Copyright © 2011, Oracle and/or its affiliates. All rights
     reserved.
New in JAX-RS 2.0
                                                                                       ✔
                                                                  ✔     Interceptors
                                        Client API                        /Handlers

                                                                                       Hypermedia
                             Async                                    JSR 330

                                                                                        Validation
                                     Improved
                                      Conneg

21   Copyright © 2011, Oracle and/or its affiliates. All rights
     reserved.
Motivation

     • Customize JAX-RS implementations via well-defined
       extension points
     • Use Cases: Logging, Compression, Security, Etc.
     • Shared by client and server APIs
     • Supported by most JAX-RS 1.0 implementations
           • All using slightly different types or semantics




22   Copyright © 2011, Oracle and/or its affiliates. All rights
     reserved.
Filters

     • Non-wrapping extension points
       • Pre: Interface RequestFilter
       • Post: Interface ResponseFilter

     • Part of a filter chain
     • Do not call the next filter directly
     • Each filter decides to proceed or break chain
       • By returning FilterAction.NEXT or FilterAction.STOP



23   Copyright © 2011, Oracle and/or its affiliates. All rights
     reserved.
Filter Example: LoggingFilter
@Provider
class LoggingFilter
    implements RequestFilter, ResponseFilter {

            @Override
            public FilterAction preFilter(FilterContext ctx)
              throws IOException {
                logRequest(ctx.getRequest());
                return FilterAction.NEXT;
            }

            …
 24   Copyright © 2011, Oracle and/or its affiliates. All rights
      reserved.
Filter Example: LoggingFilter (contd.)


         @Override
          public FilterAction postFilter(FilterContext ctx)
            throws IOException {
              logResponse(ctx.getResponse());
              return FilterAction.NEXT;
          }

}



    25   Copyright © 2011, Oracle and/or its affiliates. All rights
         reserved.
Interceptors

     • Wrapping extension points
       • ReadFrom: Interface ReaderInterceptor
       • WriteTo: Interface WriterInterceptor

     • Part of a interceptor chain
     • Call the next handler directly
     • Each handler decides to proceed or break chain
       • By calling ctx.proceed()



26   Copyright © 2011, Oracle and/or its affiliates. All rights
     reserved.
Handler Example: GzipInterceptor
@Provider
class GzipInterceptor implements ReaderInterceptor,
WriterInterceptor {

       @Override
       public Object aroundreadFrom(ReadInterceptorContext ctx)
           throws IOException {
           if (gzipEncoded(ctx)) {
               InputStream old = ctx.getInputStream();
               ctx.setInputStream(new GZIPInputStream(old));
           }
           return ctx.proceed();
       }
… }
  27   Copyright © 2011, Oracle and/or its affiliates. All rights
       reserved.
Order of execution

          Request                                             WriteTo   Request            ReadFrom
           Filter                                             Handler    Filter             Handler




       ReadFrom                                            Response     WriteTo            Response
        Handler                                              Filter     Handler              Filter

                                        Client                                    Server




28   Copyright © 2011, Oracle and/or its affiliates. All rights
     reserved.
Binding Example: LoggingFilter
     @NameBinding     // or @Qualifier ?
     @Target({ElementType.TYPE, ElementType.METHOD})
     @Retention(value = RetentionPolicy.RUNTIME)
     public @interface Logged {
     }

     @Provider
     @Logged
     public class LoggingFilter implements RequestFilter,
         ResponseFilter
     { … }



30   Copyright © 2011, Oracle and/or its affiliates. All rights
     reserved.
Binding Example: LoggingFilter
     @Path("/")
     public class MyResourceClass {

                  @Logged
                  @GET
                  @Produces("text/plain")
                  @Path("{name}")
                  public String hello(@PathParam("name") String name) {
                      return "Hello " + name;
                  }
     }



31   Copyright © 2011, Oracle and/or its affiliates. All rights
     reserved.
New in JAX-RS 2.0
                                                                                    ✔
                                                                  ✔   Filters/Handlers
                                        Client API

                                                                                         Hypermedia
                                                                                ✔
                             Async                                    JSR 330
                                                                                                       ✔
                                                                                          Validation
                                     Improved
                                      Conneg

32   Copyright © 2011, Oracle and/or its affiliates. All rights
     reserved.
Motivation

     • Services must validate data
     • Bean Validation already provides the mechanism
       • Integration into JAX-RS

     • Support for constraint annotations in:
       • Fields and properties
       • Parameters (including request entity)
       • Methods (response entities)
       • Resource classes


33   Copyright © 2011, Oracle and/or its affiliates. All rights
     reserved.
Example: Constraint Annotations
       @Path("/")
       class MyResourceClass {

                             @POST
                             @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
Built-in                     public void registerUser(
                                  @NotNull @FormParam("firstName") String fn,
                                  @NotNull @FormParam("lastName") String ln,
Custom
                                  @Email @FormParam("email") String em) {
                                  ... }
       }



  34   Copyright © 2011, Oracle and/or its affiliates. All rights
       reserved.
Example: User defined Constraints
     @Target({ METHOD, FIELD, PARAMETER })
     @Retention(RUNTIME)
     @Constraint(validatedBy = EmailValidator.class)
     public @interface Email { ... }

     class EmailValidator
       implements ConstraintValidator<Email, String> {
         public void initialize(Email email) {
             … }
         public boolean isValid(String value,
             ConstraintValidatorContext context) {
             // Check 'value' is e-mail address
             … } }

35   Copyright © 2011, Oracle and/or its affiliates. All rights
     reserved.
Example: Request Entity Validation
@CheckUser1
class User { ... }

@Path("/")
class MyResourceClass {
    @POST
    @Consumes("application/xml")
    public void registerUser1(@Valid User u) { … }

         @POST
         @Consumes("application/json")
         public void registerUser12(@CheckUser2 @Valid User u) {
… }
}
 36   Copyright © 2011, Oracle and/or its affiliates. All rights
      reserved.
New in JAX-RS 2.0
                                                                                         ✔
                                                                      ✔   Filters/Handlers
                                        Client API

                                                                                             Hypermedia
                                                                  ✔                 ✔
                             Async                                        JSR 330
                                                                                                           ✔
                                                                                              Validation
                                     Improved
                                      Conneg

37   Copyright © 2011, Oracle and/or its affiliates. All rights
     reserved.
Motivation

     • Let “borrowed” threads run free!
       • Container environment

     • Suspend and resume connections
       • Suspend while waiting for an event
       • Resume when event arrives

     • Leverage Servlet 3.X async support (if available)
     • Client API support
       • Future<RESPONSE>, InvocationCallback<RESPONSE>


38   Copyright © 2011, Oracle and/or its affiliates. All rights
     reserved.
Example: Suspend and Resume
     @Path("/async/longRunning")
     public class MyResource {
       @Context private ExecutionContext ctx;

         @GET @Produces("text/plain")
         public void longRunningOp() {
           Executors.newSingleThreadExecutor().submit(
             new Runnable() {
                 public void run() {
                     Thread.sleep(10000);     // Sleep 10 secs
                     ctx.resume("Hello async world!");
                 } });
           ctx.suspend();     // Suspend connection and return
         } … }
39   Copyright © 2011, Oracle and/or its affiliates. All rights
     reserved.
Example: @Suspend Annotation
     @Path("/async/longRunning")
     public class MyResource {
       @Context private ExecutionContext ctx;

           @GET @Produces("text/plain") @Suspend
           public void longRunning() {
             Executors.newSingleThreadExecutor().submit(
               new Runnable() {
                   public void run() {
                       Thread.sleep(10000);     // Sleep 10 secs
                       ctx.resume("Hello async world!");
                   } });
             // ctx.suspend(); Suspend connection and return
           } … }
40   Copyright © 2011, Oracle and/or its affiliates. All rights
     reserved.
Example: Client API Async Support
 // Build target URI
 Target target = client.target("http://.../atm/balance")…

 // Start async call and register callback
 Future<?> handle = target.request().async().get(
     new InvocationCallback<String>() {
         public void complete(String balance) { … }
         public void failed(InvocationException e) { … }
       });

 // After waiting for a while …
 If (!handle.isDone()) handle.cancel(true);


41   Copyright © 2011, Oracle and/or its affiliates. All rights
     reserved.
New in JAX-RS 2.0
                                                                                        ✔
                                                                      ✔   Filters/Handlers
                                        Client API
                                                                                                           ✔
                                                                                             Hypermedia
                                                                  ✔                 ✔
                             Async                                        JSR 330
                                                                                                           ✔
                                                                                              Validation
                                     Improved
                                      Conneg

42   Copyright © 2011, Oracle and/or its affiliates. All rights
     reserved.
Motivation

     • REST principles
       • Identifiers and Links
       • HATEOAS (Hypermedia As The Engine Of App State)

     • Link types:
       • Structural Links
       • Transitional Links




43   Copyright © 2011, Oracle and/or its affiliates. All rights
     reserved.
Example: Structural vs. Transitional Links
     Link: <http://.../orders/1/ship>; rel=ship,
           <http://.../orders/1/cancel>; rel=cancel    Transitional
     ...
     <order id="1">
       <customer>http://.../customers/11</customer>
       <address>http://.../customers/11/address/1</customer>
       <items>
         <item>                                          Structural

           <product>http://.../products/111</products>
           <quantity>2</quantity>
       </item>
       ... </order>


44   Copyright © 2011, Oracle and/or its affiliates. All rights
     reserved.
Example: Using Transitional Links
// Server API
Response res = Response.ok(order)
    .link("http://.../orders/1/ship", "ship")
    .build();

// Client API
Response order = client.target(…)
    .request("application/xml").get();

if (order.getLink(“ship”) != null) {
    Response shippedOrder = client
        .target(order.getLink("ship"))
        .request("application/xml").post(null);
  … }
46   Copyright © 2011, Oracle and/or its affiliates. All rights
     reserved.
New in JAX-RS 2.0
                                                                                        ✔
                                                                      ✔   Filters/Handlers
                                        Client API
                                                                                                           ✔
                                                                                             Hypermedia
                                                                  ✔                 ✔
                             Async                                        JSR 330
                                                                                                           ✔
                                                                                              Validation
                                                                      ✔
                                     Improved
                                      Conneg

47   Copyright © 2011, Oracle and/or its affiliates. All rights
     reserved.
Improved Conneg
        GET http://.../widgets2
        Accept: text/*; q=1
        …

        Path("widgets2")
        public class WidgetsResource2 {
          @GET
          @Produces("text/plain",
                    "text/html")
          public Widgets getWidget() {...}
        }

48   Copyright © 2011, Oracle and/or its affiliates. All rights
     reserved.
Improved Conneg (contd.)
        GET http://.../widgets2
        Accept: text/*; q=1
        …

        Path("widgets2")
        public class WidgetsResource2 {
          @GET
          @Produces("text/plain;qs=0.5",
                    "text/html;qs=0.75")
          public Widgets getWidget() {...}
        }

49   Copyright © 2011, Oracle and/or its affiliates. All rights
     reserved.
Other Topics Under Consideration

     • Better integration with JSR 330
       • Support @Inject and qualifiers

     • High-level client API?




50   Copyright © 2011, Oracle and/or its affiliates. All rights
     reserved.
More Information

     • JSR: http://jcp.org/en/jsr/detail?id=339
     • Java.net: http://java.net/projects/jax-rs-spec
     • User Alias: users@jax-rs-spec.java.net
       • All EG discussions forwarded to this list




51   Copyright © 2011, Oracle and/or its affiliates. All rights
     reserved.
Q&A


52   Copyright © 2011, Oracle and/or its affiliates. All rights
     reserved.

Mais conteúdo relacionado

Mais procurados

JAX-RS 2.0: What’s New in JSR 339 ?
JAX-RS 2.0: What’s New in JSR 339 ?JAX-RS 2.0: What’s New in JSR 339 ?
JAX-RS 2.0: What’s New in JSR 339 ?Arun Gupta
 
GIDS 2012: JAX-RS 2.0: RESTful Java on Steroids
GIDS 2012: JAX-RS 2.0: RESTful Java on SteroidsGIDS 2012: JAX-RS 2.0: RESTful Java on Steroids
GIDS 2012: JAX-RS 2.0: RESTful Java on SteroidsArun Gupta
 
JAX-RS 2.0: New and Noteworthy in RESTful Web services API at JAX London
JAX-RS 2.0: New and Noteworthy in RESTful Web services API at JAX LondonJAX-RS 2.0: New and Noteworthy in RESTful Web services API at JAX London
JAX-RS 2.0: New and Noteworthy in RESTful Web services API at JAX LondonArun Gupta
 
Java Summit Chennai: Java EE 7
Java Summit Chennai: Java EE 7Java Summit Chennai: Java EE 7
Java Summit Chennai: Java EE 7Arun Gupta
 
Jfokus 2012: PaaSing a Java EE Application
Jfokus 2012: PaaSing a Java EE ApplicationJfokus 2012: PaaSing a Java EE Application
Jfokus 2012: PaaSing a Java EE ApplicationArun Gupta
 
TDC 2011: OSGi-enabled Java EE Application
TDC 2011: OSGi-enabled Java EE ApplicationTDC 2011: OSGi-enabled Java EE Application
TDC 2011: OSGi-enabled Java EE ApplicationArun Gupta
 
WebLogic 12c Developer Deep Dive at Oracle Develop India 2012
WebLogic 12c Developer Deep Dive at Oracle Develop India 2012WebLogic 12c Developer Deep Dive at Oracle Develop India 2012
WebLogic 12c Developer Deep Dive at Oracle Develop India 2012Arun Gupta
 
Jfokus 2012 : The Java EE 7 Platform: Developing for the Cloud
Jfokus 2012 : The Java EE 7 Platform: Developing for the CloudJfokus 2012 : The Java EE 7 Platform: Developing for the Cloud
Jfokus 2012 : The Java EE 7 Platform: Developing for the CloudArun Gupta
 
The Java EE 7 Platform: Developing for the Cloud
The Java EE 7 Platform: Developing for the CloudThe Java EE 7 Platform: Developing for the Cloud
The Java EE 7 Platform: Developing for the CloudArun Gupta
 
Java EE Technical Keynote at JavaOne Latin America 2011
Java EE Technical Keynote at JavaOne Latin America 2011Java EE Technical Keynote at JavaOne Latin America 2011
Java EE Technical Keynote at JavaOne Latin America 2011Arun Gupta
 
GlassFish REST Administration Backend
GlassFish REST Administration BackendGlassFish REST Administration Backend
GlassFish REST Administration BackendArun Gupta
 
Java EE 7 at JAX London 2011 and JFall 2011
Java EE 7 at JAX London 2011 and JFall 2011Java EE 7 at JAX London 2011 and JFall 2011
Java EE 7 at JAX London 2011 and JFall 2011Arun Gupta
 
GlassFish Community Update @ JavaOne 2011
GlassFish Community Update @ JavaOne 2011GlassFish Community Update @ JavaOne 2011
GlassFish Community Update @ JavaOne 2011Arun Gupta
 
Java EE / GlassFish Strategy & Roadmap @ JavaOne 2011
Java EE / GlassFish Strategy & Roadmap @ JavaOne 2011Java EE / GlassFish Strategy & Roadmap @ JavaOne 2011
Java EE / GlassFish Strategy & Roadmap @ JavaOne 2011Arun Gupta
 
The Java EE 7 Platform: Developing for the Cloud (FISL 12)
The Java EE 7 Platform: Developing for the Cloud  (FISL 12)The Java EE 7 Platform: Developing for the Cloud  (FISL 12)
The Java EE 7 Platform: Developing for the Cloud (FISL 12)Arun Gupta
 
The Java EE 7 Platform: Productivity &amp; HTML5 at San Francisco JUG
The Java EE 7 Platform: Productivity &amp; HTML5 at San Francisco JUGThe Java EE 7 Platform: Productivity &amp; HTML5 at San Francisco JUG
The Java EE 7 Platform: Productivity &amp; HTML5 at San Francisco JUGArun Gupta
 
Creating Quick and Powerful Web applications with Oracle, GlassFish and NetBe...
Creating Quick and Powerful Web applications with Oracle, GlassFish and NetBe...Creating Quick and Powerful Web applications with Oracle, GlassFish and NetBe...
Creating Quick and Powerful Web applications with Oracle, GlassFish and NetBe...Arun Gupta
 
GlassFish 3.1 at JCertif 2011
GlassFish 3.1 at JCertif 2011GlassFish 3.1 at JCertif 2011
GlassFish 3.1 at JCertif 2011Arun Gupta
 
Ankara JUG Ağustos 2013 - Oracle ADF
Ankara JUG Ağustos 2013 - Oracle ADFAnkara JUG Ağustos 2013 - Oracle ADF
Ankara JUG Ağustos 2013 - Oracle ADFAnkara JUG
 

Mais procurados (20)

JAX-RS 2.0: What’s New in JSR 339 ?
JAX-RS 2.0: What’s New in JSR 339 ?JAX-RS 2.0: What’s New in JSR 339 ?
JAX-RS 2.0: What’s New in JSR 339 ?
 
GIDS 2012: JAX-RS 2.0: RESTful Java on Steroids
GIDS 2012: JAX-RS 2.0: RESTful Java on SteroidsGIDS 2012: JAX-RS 2.0: RESTful Java on Steroids
GIDS 2012: JAX-RS 2.0: RESTful Java on Steroids
 
JAX-RS 2.0: New and Noteworthy in RESTful Web services API at JAX London
JAX-RS 2.0: New and Noteworthy in RESTful Web services API at JAX LondonJAX-RS 2.0: New and Noteworthy in RESTful Web services API at JAX London
JAX-RS 2.0: New and Noteworthy in RESTful Web services API at JAX London
 
Java Summit Chennai: Java EE 7
Java Summit Chennai: Java EE 7Java Summit Chennai: Java EE 7
Java Summit Chennai: Java EE 7
 
Jfokus 2012: PaaSing a Java EE Application
Jfokus 2012: PaaSing a Java EE ApplicationJfokus 2012: PaaSing a Java EE Application
Jfokus 2012: PaaSing a Java EE Application
 
TDC 2011: OSGi-enabled Java EE Application
TDC 2011: OSGi-enabled Java EE ApplicationTDC 2011: OSGi-enabled Java EE Application
TDC 2011: OSGi-enabled Java EE Application
 
WebLogic 12c Developer Deep Dive at Oracle Develop India 2012
WebLogic 12c Developer Deep Dive at Oracle Develop India 2012WebLogic 12c Developer Deep Dive at Oracle Develop India 2012
WebLogic 12c Developer Deep Dive at Oracle Develop India 2012
 
Jfokus 2012 : The Java EE 7 Platform: Developing for the Cloud
Jfokus 2012 : The Java EE 7 Platform: Developing for the CloudJfokus 2012 : The Java EE 7 Platform: Developing for the Cloud
Jfokus 2012 : The Java EE 7 Platform: Developing for the Cloud
 
The Java EE 7 Platform: Developing for the Cloud
The Java EE 7 Platform: Developing for the CloudThe Java EE 7 Platform: Developing for the Cloud
The Java EE 7 Platform: Developing for the Cloud
 
Java EE Technical Keynote at JavaOne Latin America 2011
Java EE Technical Keynote at JavaOne Latin America 2011Java EE Technical Keynote at JavaOne Latin America 2011
Java EE Technical Keynote at JavaOne Latin America 2011
 
GlassFish REST Administration Backend
GlassFish REST Administration BackendGlassFish REST Administration Backend
GlassFish REST Administration Backend
 
Java EE 7 at JAX London 2011 and JFall 2011
Java EE 7 at JAX London 2011 and JFall 2011Java EE 7 at JAX London 2011 and JFall 2011
Java EE 7 at JAX London 2011 and JFall 2011
 
GlassFish Community Update @ JavaOne 2011
GlassFish Community Update @ JavaOne 2011GlassFish Community Update @ JavaOne 2011
GlassFish Community Update @ JavaOne 2011
 
Java EE / GlassFish Strategy & Roadmap @ JavaOne 2011
Java EE / GlassFish Strategy & Roadmap @ JavaOne 2011Java EE / GlassFish Strategy & Roadmap @ JavaOne 2011
Java EE / GlassFish Strategy & Roadmap @ JavaOne 2011
 
The Java EE 7 Platform: Developing for the Cloud (FISL 12)
The Java EE 7 Platform: Developing for the Cloud  (FISL 12)The Java EE 7 Platform: Developing for the Cloud  (FISL 12)
The Java EE 7 Platform: Developing for the Cloud (FISL 12)
 
The Java EE 7 Platform: Productivity &amp; HTML5 at San Francisco JUG
The Java EE 7 Platform: Productivity &amp; HTML5 at San Francisco JUGThe Java EE 7 Platform: Productivity &amp; HTML5 at San Francisco JUG
The Java EE 7 Platform: Productivity &amp; HTML5 at San Francisco JUG
 
Creating Quick and Powerful Web applications with Oracle, GlassFish and NetBe...
Creating Quick and Powerful Web applications with Oracle, GlassFish and NetBe...Creating Quick and Powerful Web applications with Oracle, GlassFish and NetBe...
Creating Quick and Powerful Web applications with Oracle, GlassFish and NetBe...
 
NetWeaver Gateway- Introduction to REST
NetWeaver Gateway- Introduction to RESTNetWeaver Gateway- Introduction to REST
NetWeaver Gateway- Introduction to REST
 
GlassFish 3.1 at JCertif 2011
GlassFish 3.1 at JCertif 2011GlassFish 3.1 at JCertif 2011
GlassFish 3.1 at JCertif 2011
 
Ankara JUG Ağustos 2013 - Oracle ADF
Ankara JUG Ağustos 2013 - Oracle ADFAnkara JUG Ağustos 2013 - Oracle ADF
Ankara JUG Ağustos 2013 - Oracle ADF
 

Semelhante a JAX-RS 2.0: RESTful Web services on steroids

Java Summit Chennai: JAX-RS 2.0
Java Summit Chennai: JAX-RS 2.0Java Summit Chennai: JAX-RS 2.0
Java Summit Chennai: JAX-RS 2.0Arun Gupta
 
JAX-RS 2.0: RESTful Web Services
JAX-RS 2.0: RESTful Web ServicesJAX-RS 2.0: RESTful Web Services
JAX-RS 2.0: RESTful Web ServicesArun Gupta
 
JAX RS 2.0 - OTN Bangalore 2013
JAX RS 2.0 - OTN Bangalore 2013JAX RS 2.0 - OTN Bangalore 2013
JAX RS 2.0 - OTN Bangalore 2013Jagadish Prasath
 
Project Helidon Overview (Japanese)
Project Helidon Overview (Japanese)Project Helidon Overview (Japanese)
Project Helidon Overview (Japanese)Logico
 
Java EE7
Java EE7Java EE7
Java EE7Jay Lee
 
Have You Seen Java EE Lately?
Have You Seen Java EE Lately?Have You Seen Java EE Lately?
Have You Seen Java EE Lately?Reza Rahman
 
Oracle GoldenGate 18c - REST API Examples
Oracle GoldenGate 18c - REST API ExamplesOracle GoldenGate 18c - REST API Examples
Oracle GoldenGate 18c - REST API ExamplesBobby Curtis
 
From Open Source to Open API with Restlet
From Open Source to Open API with RestletFrom Open Source to Open API with Restlet
From Open Source to Open API with RestletRestlet
 
How to Use Stormpath in angular js
How to Use Stormpath in angular jsHow to Use Stormpath in angular js
How to Use Stormpath in angular jsStormpath
 
Using Istio to Secure & Monitor Your Services
Using Istio to Secure & Monitor Your ServicesUsing Istio to Secure & Monitor Your Services
Using Istio to Secure & Monitor Your ServicesAlcide
 
Coherence RoadMap 2018
Coherence RoadMap 2018Coherence RoadMap 2018
Coherence RoadMap 2018harvraja
 
Java EE 7 for WebLogic 12c Developers
Java EE 7 for WebLogic 12c DevelopersJava EE 7 for WebLogic 12c Developers
Java EE 7 for WebLogic 12c DevelopersBruno Borges
 
Fifty New Features of Java EE 7 in Fifty Minutes
Fifty New Features of Java EE 7 in Fifty MinutesFifty New Features of Java EE 7 in Fifty Minutes
Fifty New Features of Java EE 7 in Fifty MinutesArun Gupta
 
Fifty Features of Java EE 7 in 50 Minutes
Fifty Features of Java EE 7 in 50 MinutesFifty Features of Java EE 7 in 50 Minutes
Fifty Features of Java EE 7 in 50 Minutesglassfish
 
Red Hat and Oracle: Delivering on the Promise of Interoperability in Java EE 7
Red Hat and Oracle: Delivering on the Promise of Interoperability in Java EE 7Red Hat and Oracle: Delivering on the Promise of Interoperability in Java EE 7
Red Hat and Oracle: Delivering on the Promise of Interoperability in Java EE 7Max Andersen
 
Hadoop Summit San Diego Feb2013
Hadoop Summit San Diego Feb2013Hadoop Summit San Diego Feb2013
Hadoop Summit San Diego Feb2013Narayan Bharadwaj
 
OWASP_Top_Ten_Proactive_Controls_v2.pptx
OWASP_Top_Ten_Proactive_Controls_v2.pptxOWASP_Top_Ten_Proactive_Controls_v2.pptx
OWASP_Top_Ten_Proactive_Controls_v2.pptxcgt38842
 
Servlet 4.0 Adopt-a-JSR 10 Minute Infodeck
Servlet 4.0 Adopt-a-JSR 10 Minute InfodeckServlet 4.0 Adopt-a-JSR 10 Minute Infodeck
Servlet 4.0 Adopt-a-JSR 10 Minute InfodeckEdward Burns
 

Semelhante a JAX-RS 2.0: RESTful Web services on steroids (20)

Java Summit Chennai: JAX-RS 2.0
Java Summit Chennai: JAX-RS 2.0Java Summit Chennai: JAX-RS 2.0
Java Summit Chennai: JAX-RS 2.0
 
JAX-RS 2.0: RESTful Web Services
JAX-RS 2.0: RESTful Web ServicesJAX-RS 2.0: RESTful Web Services
JAX-RS 2.0: RESTful Web Services
 
JAX RS 2.0 - OTN Bangalore 2013
JAX RS 2.0 - OTN Bangalore 2013JAX RS 2.0 - OTN Bangalore 2013
JAX RS 2.0 - OTN Bangalore 2013
 
Project Helidon Overview (Japanese)
Project Helidon Overview (Japanese)Project Helidon Overview (Japanese)
Project Helidon Overview (Japanese)
 
Java EE7
Java EE7Java EE7
Java EE7
 
Have You Seen Java EE Lately?
Have You Seen Java EE Lately?Have You Seen Java EE Lately?
Have You Seen Java EE Lately?
 
Oracle GoldenGate 18c - REST API Examples
Oracle GoldenGate 18c - REST API ExamplesOracle GoldenGate 18c - REST API Examples
Oracle GoldenGate 18c - REST API Examples
 
JAX-RS.next
JAX-RS.nextJAX-RS.next
JAX-RS.next
 
From Open Source to Open API with Restlet
From Open Source to Open API with RestletFrom Open Source to Open API with Restlet
From Open Source to Open API with Restlet
 
How to Use Stormpath in angular js
How to Use Stormpath in angular jsHow to Use Stormpath in angular js
How to Use Stormpath in angular js
 
Using Istio to Secure & Monitor Your Services
Using Istio to Secure & Monitor Your ServicesUsing Istio to Secure & Monitor Your Services
Using Istio to Secure & Monitor Your Services
 
Building web APIs in PHP with Zend Expressive
Building web APIs in PHP with Zend ExpressiveBuilding web APIs in PHP with Zend Expressive
Building web APIs in PHP with Zend Expressive
 
Coherence RoadMap 2018
Coherence RoadMap 2018Coherence RoadMap 2018
Coherence RoadMap 2018
 
Java EE 7 for WebLogic 12c Developers
Java EE 7 for WebLogic 12c DevelopersJava EE 7 for WebLogic 12c Developers
Java EE 7 for WebLogic 12c Developers
 
Fifty New Features of Java EE 7 in Fifty Minutes
Fifty New Features of Java EE 7 in Fifty MinutesFifty New Features of Java EE 7 in Fifty Minutes
Fifty New Features of Java EE 7 in Fifty Minutes
 
Fifty Features of Java EE 7 in 50 Minutes
Fifty Features of Java EE 7 in 50 MinutesFifty Features of Java EE 7 in 50 Minutes
Fifty Features of Java EE 7 in 50 Minutes
 
Red Hat and Oracle: Delivering on the Promise of Interoperability in Java EE 7
Red Hat and Oracle: Delivering on the Promise of Interoperability in Java EE 7Red Hat and Oracle: Delivering on the Promise of Interoperability in Java EE 7
Red Hat and Oracle: Delivering on the Promise of Interoperability in Java EE 7
 
Hadoop Summit San Diego Feb2013
Hadoop Summit San Diego Feb2013Hadoop Summit San Diego Feb2013
Hadoop Summit San Diego Feb2013
 
OWASP_Top_Ten_Proactive_Controls_v2.pptx
OWASP_Top_Ten_Proactive_Controls_v2.pptxOWASP_Top_Ten_Proactive_Controls_v2.pptx
OWASP_Top_Ten_Proactive_Controls_v2.pptx
 
Servlet 4.0 Adopt-a-JSR 10 Minute Infodeck
Servlet 4.0 Adopt-a-JSR 10 Minute InfodeckServlet 4.0 Adopt-a-JSR 10 Minute Infodeck
Servlet 4.0 Adopt-a-JSR 10 Minute Infodeck
 

Último

Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxBkGupta21
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 

Último (20)

Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptx
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 

JAX-RS 2.0: RESTful Web services on steroids

  • 1. JAX-RS 2.0: RESTful Java on Steroids Arun Gupta, Java EE & GlassFish Guy http://blogs.oracle.com/arungupta, @arungupta 1 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 2. 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 Oracle’s products remains at the sole discretion of Oracle. 2 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 3. Part I: How we got here ? 3 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 4. How We Got Here? • Shortest intro to JAX-RS 1.0 • Requested features for JAX-RS 2.0 • JSR 339: JAX-RS 2.0 4 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 5. JAX-RS Origins • JAX-RS 1.0 is Java API for RESTful WS • RESTFul Principles: – Assign everything an ID – Link things together – Use common set of methods – Allow multiple representations – Stateless communications 5 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 6. JAX-RS 1.0 Goals • POJO-Based API • HTTP Centric • Format Independence • Container Independence • Inclusion in Java EE 6 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 7. Example: JAX-RS API Resources @Path("/atm/{cardId}") URI Parameter public class AtmService { Injection @GET @Path("/balance") @Produces("text/plain") public String balance(@PathParam("cardId") String card, @QueryParam("pin") String pin) { return Double.toString(getBalance(card, pin)); } … HTTP Method Built-in Binding Serialization 7 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 8. Example: JAX-RS API (contd.) … Custom Serialization @POST @Path("/withdrawal") @Consumes("text/plain") @Produces("application/json") public Money withdraw(@PathParam("card") String card, @QueryParam("pin") String pin, String amount){ return getMoney(card, pin, amount); } } 8 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 9. Requested Features Filters/Handlers Client API Hypermedia Async JSR 330 Validation Improved Conneg MVC 9 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 10. JSR 339 Expert Group • EG Formed in March 2011 • Oracle Leads: Marek Potociar / Santiago Pericas-G. • Expert Group: – Jan Algermissen, Florent Benoit, Sergey Beryozkin (Talend), Adam Bien, Bill Burke (RedHat), Clinton Combs, Bill De Hora, Markus Karg, Sastry Malladi (Ebay), Julian Reschke, Guilherme Silveira, Dionysios Synodinos • Early Draft 2 published on Feb 9, 2012! 10 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 11. Part II: Where We Are Going 11 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 12. New in JAX-RS 2.0 ✔ ✔ Filters/Handlers Client API ✔ Hypermedia ✔ ✔ Async JSR 330 ✔ Validation Improved ✔ ✗ Conneg MVC 12 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 13. New in JAX-RS 2.0 ✔ Interceptors Client API /Handlers Hypermedia Async JSR 330 Validation Improved Conneg 13 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 14. Motivation • HTTP client libraries too low level • Sharing features with JAX-RS server API • E.g., MBRs and MBWs • Supported by some JAX-RS 1.0 implementations • Need for a standard 14 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 15. Example: Client API // Get instance of Client Client client = ClientFactory.newClient(); Can also inject @URI for the target  // Get account balance String bal = client.target("http://.../atm/balance") .pathParam("card", "111122223333") .queryParam("pin", "9876") .request("text/plain").get(String.class); 16 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 16. Example: Client API (contd.) // Withdraw some money Money mon = client.target("http://.../atm/withdraw") .pathParam("card", "111122223333") .queryParam("pin", "9876") .request("application/json") .post(text("50.0"), Money.class); 17 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 17. Example: Generic Interface (Command pattern, Batch processing) Invocation inv1 = client.target("http://.../atm/balance")… .request(“text/plain”).buildGet(); Invocation inv2 = client.target("http://.../atm/withdraw")… .request("application/json") .buildPost(text("50.0")); 18 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 18. Example: Generic Interface (contd.) Collection<Invocation> invs = Arrays.asList(inv1, inv2); Collection<Response> ress = Collections.transform(invs, new F<Invocation, Response>() { public Response apply(Invocation inv) { return inv.invoke(); } }); 19 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 19. New in JAX-RS 2.0 ✔ ✔ Interceptors Client API /Handlers Hypermedia Async JSR 330 Validation Improved Conneg 21 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 20. Motivation • Customize JAX-RS implementations via well-defined extension points • Use Cases: Logging, Compression, Security, Etc. • Shared by client and server APIs • Supported by most JAX-RS 1.0 implementations • All using slightly different types or semantics 22 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 21. Filters • Non-wrapping extension points • Pre: Interface RequestFilter • Post: Interface ResponseFilter • Part of a filter chain • Do not call the next filter directly • Each filter decides to proceed or break chain • By returning FilterAction.NEXT or FilterAction.STOP 23 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 22. Filter Example: LoggingFilter @Provider class LoggingFilter implements RequestFilter, ResponseFilter { @Override public FilterAction preFilter(FilterContext ctx) throws IOException { logRequest(ctx.getRequest()); return FilterAction.NEXT; } … 24 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 23. Filter Example: LoggingFilter (contd.) @Override public FilterAction postFilter(FilterContext ctx) throws IOException { logResponse(ctx.getResponse()); return FilterAction.NEXT; } } 25 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 24. Interceptors • Wrapping extension points • ReadFrom: Interface ReaderInterceptor • WriteTo: Interface WriterInterceptor • Part of a interceptor chain • Call the next handler directly • Each handler decides to proceed or break chain • By calling ctx.proceed() 26 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 25. Handler Example: GzipInterceptor @Provider class GzipInterceptor implements ReaderInterceptor, WriterInterceptor { @Override public Object aroundreadFrom(ReadInterceptorContext ctx) throws IOException { if (gzipEncoded(ctx)) { InputStream old = ctx.getInputStream(); ctx.setInputStream(new GZIPInputStream(old)); } return ctx.proceed(); } … } 27 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 26. Order of execution Request WriteTo Request ReadFrom Filter Handler Filter Handler ReadFrom Response WriteTo Response Handler Filter Handler Filter Client Server 28 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 27. Binding Example: LoggingFilter @NameBinding // or @Qualifier ? @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(value = RetentionPolicy.RUNTIME) public @interface Logged { } @Provider @Logged public class LoggingFilter implements RequestFilter, ResponseFilter { … } 30 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 28. Binding Example: LoggingFilter @Path("/") public class MyResourceClass { @Logged @GET @Produces("text/plain") @Path("{name}") public String hello(@PathParam("name") String name) { return "Hello " + name; } } 31 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 29. New in JAX-RS 2.0 ✔ ✔ Filters/Handlers Client API Hypermedia ✔ Async JSR 330 ✔ Validation Improved Conneg 32 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 30. Motivation • Services must validate data • Bean Validation already provides the mechanism • Integration into JAX-RS • Support for constraint annotations in: • Fields and properties • Parameters (including request entity) • Methods (response entities) • Resource classes 33 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 31. Example: Constraint Annotations @Path("/") class MyResourceClass { @POST @Consumes(MediaType.APPLICATION_FORM_URLENCODED) Built-in public void registerUser( @NotNull @FormParam("firstName") String fn, @NotNull @FormParam("lastName") String ln, Custom @Email @FormParam("email") String em) { ... } } 34 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 32. Example: User defined Constraints @Target({ METHOD, FIELD, PARAMETER }) @Retention(RUNTIME) @Constraint(validatedBy = EmailValidator.class) public @interface Email { ... } class EmailValidator implements ConstraintValidator<Email, String> { public void initialize(Email email) { … } public boolean isValid(String value, ConstraintValidatorContext context) { // Check 'value' is e-mail address … } } 35 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 33. Example: Request Entity Validation @CheckUser1 class User { ... } @Path("/") class MyResourceClass { @POST @Consumes("application/xml") public void registerUser1(@Valid User u) { … } @POST @Consumes("application/json") public void registerUser12(@CheckUser2 @Valid User u) { … } } 36 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 34. New in JAX-RS 2.0 ✔ ✔ Filters/Handlers Client API Hypermedia ✔ ✔ Async JSR 330 ✔ Validation Improved Conneg 37 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 35. Motivation • Let “borrowed” threads run free! • Container environment • Suspend and resume connections • Suspend while waiting for an event • Resume when event arrives • Leverage Servlet 3.X async support (if available) • Client API support • Future<RESPONSE>, InvocationCallback<RESPONSE> 38 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 36. Example: Suspend and Resume @Path("/async/longRunning") public class MyResource { @Context private ExecutionContext ctx; @GET @Produces("text/plain") public void longRunningOp() { Executors.newSingleThreadExecutor().submit( new Runnable() { public void run() { Thread.sleep(10000); // Sleep 10 secs ctx.resume("Hello async world!"); } }); ctx.suspend(); // Suspend connection and return } … } 39 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 37. Example: @Suspend Annotation @Path("/async/longRunning") public class MyResource { @Context private ExecutionContext ctx; @GET @Produces("text/plain") @Suspend public void longRunning() { Executors.newSingleThreadExecutor().submit( new Runnable() { public void run() { Thread.sleep(10000); // Sleep 10 secs ctx.resume("Hello async world!"); } }); // ctx.suspend(); Suspend connection and return } … } 40 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 38. Example: Client API Async Support // Build target URI Target target = client.target("http://.../atm/balance")… // Start async call and register callback Future<?> handle = target.request().async().get( new InvocationCallback<String>() { public void complete(String balance) { … } public void failed(InvocationException e) { … } }); // After waiting for a while … If (!handle.isDone()) handle.cancel(true); 41 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 39. New in JAX-RS 2.0 ✔ ✔ Filters/Handlers Client API ✔ Hypermedia ✔ ✔ Async JSR 330 ✔ Validation Improved Conneg 42 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 40. Motivation • REST principles • Identifiers and Links • HATEOAS (Hypermedia As The Engine Of App State) • Link types: • Structural Links • Transitional Links 43 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 41. Example: Structural vs. Transitional Links Link: <http://.../orders/1/ship>; rel=ship, <http://.../orders/1/cancel>; rel=cancel Transitional ... <order id="1"> <customer>http://.../customers/11</customer> <address>http://.../customers/11/address/1</customer> <items> <item> Structural <product>http://.../products/111</products> <quantity>2</quantity> </item> ... </order> 44 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 42. Example: Using Transitional Links // Server API Response res = Response.ok(order) .link("http://.../orders/1/ship", "ship") .build(); // Client API Response order = client.target(…) .request("application/xml").get(); if (order.getLink(“ship”) != null) { Response shippedOrder = client .target(order.getLink("ship")) .request("application/xml").post(null); … } 46 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 43. New in JAX-RS 2.0 ✔ ✔ Filters/Handlers Client API ✔ Hypermedia ✔ ✔ Async JSR 330 ✔ Validation ✔ Improved Conneg 47 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 44. Improved Conneg GET http://.../widgets2 Accept: text/*; q=1 … Path("widgets2") public class WidgetsResource2 { @GET @Produces("text/plain", "text/html") public Widgets getWidget() {...} } 48 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 45. Improved Conneg (contd.) GET http://.../widgets2 Accept: text/*; q=1 … Path("widgets2") public class WidgetsResource2 { @GET @Produces("text/plain;qs=0.5", "text/html;qs=0.75") public Widgets getWidget() {...} } 49 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 46. Other Topics Under Consideration • Better integration with JSR 330 • Support @Inject and qualifiers • High-level client API? 50 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 47. More Information • JSR: http://jcp.org/en/jsr/detail?id=339 • Java.net: http://java.net/projects/jax-rs-spec • User Alias: users@jax-rs-spec.java.net • All EG discussions forwarded to this list 51 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 48. Q&A 52 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.

Notas do Editor

  1. Lawyer’s slideDon’t use any info for contracts or purchase decisionsDevelopment, release and timing at the discretion of Oracle
  2. What’s coming?Duke dressed up with funky goggles and some sort of jet pack
  3. To learn where we are going, we need to understand where we are
  4. There was clear need for a Java API for RESTWhat is REST?Stateless communications: new requests don’t depend on old requests
  5. POJO centric: no complicated or contrived contracts – just annotationsContainer independence: JAX-RS does not require servlets or any type of container
  6. Use @Path to define web resourcesUse other annotations to map requests to methodsUse method return value as responseMBR and MBW help us behind the scenes
  7. MBR and MBW can be user defined too
  8. Don’t spend time describing these features, just read them quickly
  9. There are 12 EG membersED submitted for publication to the PMO last Friday
  10. What’s coming?Duke dressed up with funky goggles and some sort of jet pack
  11. Don’t spend time describing these features, just read them quickly
  12. Don’t spend time describing these features, just read them quickly
  13. Don’t spend time describing these features, just read them quickly
  14. Don’t spend time describing these features, just read them quickly
  15. Don’t spend time describing these features, just read them quickly
  16. Don’t spend time describing these features, just read them quickly
  17. A structural link is used to avoid sending a complete representation of a resource. Clients can follow these type of links to retrieve the &quot;pieces&quot; they need. A transitional link is used to update the state of a resource and is typically identified by a &quot;rel&quot; attribute. Structural links are normally in the entity; transitional links could be in link headers or the entity.
  18. Don’t spend time describing these features, just read them quickly
  19. A high-level API isn&apos;t actually required, but some people prefer a proxy-based solution to writing clients. We do not have any plans to support one at this point.