43

KeepLearningwithOracleUniversity · Title: JAXRS_TS.pptx Author: Santiago Pericas-Geertsen Created Date: 10/26/2015 10:51:22 PM

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: KeepLearningwithOracleUniversity · Title: JAXRS_TS.pptx Author: Santiago Pericas-Geertsen Created Date: 10/26/2015 10:51:22 PM
Page 2: KeepLearningwithOracleUniversity · Title: JAXRS_TS.pptx Author: Santiago Pericas-Geertsen Created Date: 10/26/2015 10:51:22 PM

Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved.       2  

Classroom  Training  

Learning  SubscripDon  

Live  Virtual  Class  

Training  On  Demand  

Keep  Learning  with  Oracle  University  

educa7on.oracle.com  

Cloud  

Technology  

ApplicaDons  

Industries  

Page 3: KeepLearningwithOracleUniversity · Title: JAXRS_TS.pptx Author: Santiago Pericas-Geertsen Created Date: 10/26/2015 10:51:22 PM

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

Session  Surveys  

Help  us  help  you!!  • Oracle  would  like  to  invite  you  to  take  a  moment  to  give  us  your  session  feedback.  Your  feedback  will  help  us  to  improve  your  conference.    

• Please  be  sure  to  add  your  feedback  for  your  aOended  sessions  by  using  the  Mobile  Survey  or  in  Schedule  Builder.  

 

3

Page 4: KeepLearningwithOracleUniversity · Title: JAXRS_TS.pptx Author: Santiago Pericas-Geertsen Created Date: 10/26/2015 10:51:22 PM

What’s  Next  for  JAX-­‐RS  2.1?  CON-­‐4192  

SanDago  Pericas-­‐Geertsen  JSR  370  Co-­‐Spec  Lead  Oracle  

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

Page 5: KeepLearningwithOracleUniversity · Title: JAXRS_TS.pptx Author: Santiago Pericas-Geertsen Created Date: 10/26/2015 10:51:22 PM

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

Safe  Harbor  Statement  The  following  is  intended  to  outline  our  general  product  direcDon.  It  is  intended  for  informaDon  purposes  only,  and  may  not  be  incorporated  into  any  contract.  It  is  not  a  commitment  to  deliver  any  material,  code,  or  funcDonality,  and  should  not  be  relied  upon  in  making  purchasing  decisions.  The  development,  release,  and  Dming  of  any  features  or  funcDonality  described  for  Oracle’s  products  remains  at  the  sole  discreDon  of  Oracle.  

5  

Page 6: KeepLearningwithOracleUniversity · Title: JAXRS_TS.pptx Author: Santiago Pericas-Geertsen Created Date: 10/26/2015 10:51:22 PM

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

A  Recap  of  JAX-­‐RS  2.0  Lots  of  new  features  in  the  last  major  update  

6  

Page 7: KeepLearningwithOracleUniversity · Title: JAXRS_TS.pptx Author: Santiago Pericas-Geertsen Created Date: 10/26/2015 10:51:22 PM

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

JAX-­‐RS  2.0  Features  Largest  release  of  JAX-­‐RS!  

• New  Java  client  API  •  Support  for  filters  and  interceptors  •  IntegraDon  with  the  ValidaDon  API  • New  configuraDon  API    • Basic  support  for  hypermedia  (link  headers)  • Asynchronous  processing    

7  

Page 8: KeepLearningwithOracleUniversity · Title: JAXRS_TS.pptx Author: Santiago Pericas-Geertsen Created Date: 10/26/2015 10:51:22 PM

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

JAX-­‐RS  2.0  Server  Pipeline    

8  

Page 9: KeepLearningwithOracleUniversity · Title: JAXRS_TS.pptx Author: Santiago Pericas-Geertsen Created Date: 10/26/2015 10:51:22 PM

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

JAX-­‐RS  2.0  Client  Pipeline    

9  

Page 10: KeepLearningwithOracleUniversity · Title: JAXRS_TS.pptx Author: Santiago Pericas-Geertsen Created Date: 10/26/2015 10:51:22 PM

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

What’s  planned  for  JAX-­‐RS  2.1?  Dot  release  with  great  new  features  

10  

Page 11: KeepLearningwithOracleUniversity · Title: JAXRS_TS.pptx Author: Santiago Pericas-Geertsen Created Date: 10/26/2015 10:51:22 PM

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

JAX-­‐RS  2.1  –  The  Major  Features  • ReacDve  Programming    • Non-­‐Blocking  I/O  •  Server-­‐Sent  Events  • Alignment  with  JSON-­‐B  and  MVC  

11  

Page 12: KeepLearningwithOracleUniversity · Title: JAXRS_TS.pptx Author: Santiago Pericas-Geertsen Created Date: 10/26/2015 10:51:22 PM

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

ReacDve  Programming  Because  Async  Programming  is  Hard  

12  

Page 13: KeepLearningwithOracleUniversity · Title: JAXRS_TS.pptx Author: Santiago Pericas-Geertsen Created Date: 10/26/2015 10:51:22 PM

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

Asynchronous  Processing  in  2.0  •  Server  side:    

– Using  @Suspended  and  AsyncResponse  – Resume  execuDon  on  a  different  thread  

• Client  side:  – Future<T>  – InvocaDonCallback<T>  

 

13  

Page 14: KeepLearningwithOracleUniversity · Title: JAXRS_TS.pptx Author: Santiago Pericas-Geertsen Created Date: 10/26/2015 10:51:22 PM

Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved.       14  

 Client  client  =  ClientBuilder.newClient();  WebTarget  target  =  client.target(“http://…”);    Future<String>  f  =            target.request().async().get(String.class);    //  some  time  later  …    String  user  =  f.get();  

Example  Using  Future<T>  

What’s  the  problem  here?  

Page 15: KeepLearningwithOracleUniversity · Title: JAXRS_TS.pptx Author: Santiago Pericas-Geertsen Created Date: 10/26/2015 10:51:22 PM

Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved.       15  

 Client  client  =  ClientBuilder.newClient();  WebTarget  target=  client.target(“http://…”);    target.request().async().get(new            InvocationCallback<String>()  {                  @Override                  public  void  completed(String  user)  {                          //  do  something                  }                    @Override                  public  void  failed(Throwable  t)  {                          //  do  something                  }          });    

Example  using  InvocaDonCallback<T>  

Page 16: KeepLearningwithOracleUniversity · Title: JAXRS_TS.pptx Author: Santiago Pericas-Geertsen Created Date: 10/26/2015 10:51:22 PM

Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved.       16  

 target1.request().async().get(new            InvocationCallback<String>()  {                  public  void  completed(String  user)  {                          target2.request().header(“user”,  user).async().get(                                  new  InvocationCallback<String>()  {                                          public  void  completed(String  quote)  {  

                           System.out.println(quote);                                          }                                          public  void  failed(Throwable  t)  {  

                 //  do  something                                          }                                  });                          }                  public  void  failed(Throwable  t)  {                          //  do  something                  }          }));    

Example  using  InvocaDonCallback<T>’s  

Pyramid  of  Doom!  

Page 17: KeepLearningwithOracleUniversity · Title: JAXRS_TS.pptx Author: Santiago Pericas-Geertsen Created Date: 10/26/2015 10:51:22 PM

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

Uses  cases  for  Async  ComputaDons  • Compose  two  (or  more)  asynchronous  tasks  • Combine  the  output  of  two  (or  more)  asynchronous  tasks  •  Execute  a  Consumer  aoer  a  task  completes  • Wait  for  all  tasks  to  complete  • Wait  for  any  of  the  tasks  to  complete  • And  many  more!    

17  

Meet  CompletableFuture<T>  in  JDK  8  

Page 18: KeepLearningwithOracleUniversity · Title: JAXRS_TS.pptx Author: Santiago Pericas-Geertsen Created Date: 10/26/2015 10:51:22 PM

Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved.       18  

 CompletionStage<String>  cs1  =            target1.request().rx().get(String.class);    CompletionStage<String>  cs2  =            cs1.thenCompose(user  -­‐>              target2.request().header(“user”,  user)                    .rx().get(String.class));    cs2.thenAccept(quote  -­‐>  System.out.println(quote));  

Proposal  for  JAX-­‐RS  2.1  

Page 19: KeepLearningwithOracleUniversity · Title: JAXRS_TS.pptx Author: Santiago Pericas-Geertsen Created Date: 10/26/2015 10:51:22 PM

Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved.       19  

 //  Implement  an  RxInvoker<T>  class  ObservableInvoker  implements  RxInvoker<Observable>  {          …  }    Observable<String>  cs1  =            target1.request().rx(ObservableInvoker.class)          .get(String.class);    

But  Wait  There  is  More  …  Other  Rx  APIs  

Extension  Point  

Page 20: KeepLearningwithOracleUniversity · Title: JAXRS_TS.pptx Author: Santiago Pericas-Geertsen Created Date: 10/26/2015 10:51:22 PM

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

Can  we  make  it  even  easier?  Warning!!  Bleeding  edge  ideas  …  

• Combining  async  tasks  is  sDll  hard!  • What  if  dependencies  could  be  made  declaraDvely?  • More  general  async  ideas,  not  exclusive  to  JAX-­‐RS    

 

20  

Page 21: KeepLearningwithOracleUniversity · Title: JAXRS_TS.pptx Author: Santiago Pericas-Geertsen Created Date: 10/26/2015 10:51:22 PM

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

DeclaraDveRx  Example:  Tasks  

 

 

21  

C  

E  

D  

B  

A   Result  

Page 22: KeepLearningwithOracleUniversity · Title: JAXRS_TS.pptx Author: Santiago Pericas-Geertsen Created Date: 10/26/2015 10:51:22 PM

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

 class  DeclarativeRxHandler  {              @FinalResult            public  String  get(@PartialResult(“A”)  String  a)  {  return  a;  }              @PartialResult(“B”)            public  CompletableFuture<String>  getB()  {  return  newB(…);  }              @PartialResult(“D”)            public  CompletableFuture<String>  getD()  {  return  newD(…);  }              @PartialResult(“E”)            public  CompletableFuture<String>  getE()  {  return  newE(…);  }              …  }  

DeclaraDveRx  Sample  Using  string  values  for  simplicity  

Leaf  tasks  

Final  result  

Page 23: KeepLearningwithOracleUniversity · Title: JAXRS_TS.pptx Author: Santiago Pericas-Geertsen Created Date: 10/26/2015 10:51:22 PM

Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved.       23  

 class  DeclarativeRxHandler  {            …              @PartialResult(“C”)            public  CompletableFuture<String>  getC(@PartialResult(“D”)  String  d,                                                                                          @PartialResult(“E”)  String  e)  {                    return  newC(d,  e);            }              @PartialResult(“A”)            public  CompletableFuture<String>  getA(@PartialResult(“B”)  String  b,                                                                                          @PartialResult(“C”)  String  c)  {                    return  newA(b,  c);            }  }  

DeclaraDveRx  Sample  Using  string  values  for  simplicity  

DeclaraDve  dependencies  

Page 24: KeepLearningwithOracleUniversity · Title: JAXRS_TS.pptx Author: Santiago Pericas-Geertsen Created Date: 10/26/2015 10:51:22 PM

Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved.       24  

 DeclarativeRxProcessor<String>  p  =  new  DeclarativeRxProcessor<>();    p.processHandler(new  DeclarativeRxHandler());  

DeclaraDveRx  Sample  Bootstrapping  

Do  the  work  on  my  behalf!  

Page 25: KeepLearningwithOracleUniversity · Title: JAXRS_TS.pptx Author: Santiago Pericas-Geertsen Created Date: 10/26/2015 10:51:22 PM

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

NIO  High-­‐performance  IO  for  JAX-­‐RS  

25  

Page 26: KeepLearningwithOracleUniversity · Title: JAXRS_TS.pptx Author: Santiago Pericas-Geertsen Created Date: 10/26/2015 10:51:22 PM

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

MoDvaDon  • Certain  apps  need  more  control  over  IO  • Higher  throughput  is  hard  with  blocking  IO  • StreamingOutput  in  JAX-­‐RS  

 

26  

Page 27: KeepLearningwithOracleUniversity · Title: JAXRS_TS.pptx Author: Santiago Pericas-Geertsen Created Date: 10/26/2015 10:51:22 PM

Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved.       27  

 @GET  public  Response  get()  {          return  Response.ok(new  StreamingOutput()  {                  @Override                  public  void  write(OutputStream  out)  throws  …  {                          out.write(…);                  }          }).build();  }  

StreamingOutput  in  JAX-­‐RS  2.0  

Blocking  call  

Direct  access  to  stream  

Page 28: KeepLearningwithOracleUniversity · Title: JAXRS_TS.pptx Author: Santiago Pericas-Geertsen Created Date: 10/26/2015 10:51:22 PM

Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved.       28  

     @GET    public  Response  get()  {            return  Response.ok(out  -­‐>  {                      out.write(…);                    if  (moreData())  return  true;                    return  false;              }).build();    }                                            

NIO  in  JAX-­‐RS  2.1  

Non-­‐blocking  Call  

Yes,  we  have  lambdas  now!  

Page 29: KeepLearningwithOracleUniversity · Title: JAXRS_TS.pptx Author: Santiago Pericas-Geertsen Created Date: 10/26/2015 10:51:22 PM

Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved.       29  

   @POST  @Consumes(MediaType.APPLICATION_OCTET_STREAM)    public  void  upload(@QueryParam("path")  String  path,                                            @Context  Request  request,                                          @Suspend  AsyncResponse  response)  {            ByteArrayOutputStream  out  =  new  ByteArrayOutputStream();            byte[]  buffer  =  new  byte[FOUR_KB];              request.entity(in  -­‐>  {          //  reader  handler                            try  {                                    if  (in.isFinished())  {                                            files.put(path,  out.toByteArray());                                            out.close();                                            response.resume("Upload  completed");                                    }  else  {                                            final  int  n  =  in.read(buffer);                                            out.write(buffer,  0,  n);                                    }                            }  catch  (IOException  e)  {                                    throw  new  WebApplicationException(e);                            }  });  }                                          

NIO  Example  (Server)  

Async  Response  

Page 30: KeepLearningwithOracleUniversity · Title: JAXRS_TS.pptx Author: Santiago Pericas-Geertsen Created Date: 10/26/2015 10:51:22 PM

Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved.       30  

   @POST  @Consumes(MediaType.APPLICATION_OCTET_STREAM)    public  void  upload(@QueryParam("path")  String  path,                                            @Context  Request  request,                                          @Suspend  AsyncResponse  response)  {            ByteArrayOutputStream  out  =  new  ByteArrayOutputStream();            byte[]  buffer  =  new  byte[FOUR_KB];              request.entity(in  -­‐>  {          //  reader  handler                            try  {                                    if  (in.isFinished())  {                                            files.put(path,  out.toByteArray());                                            out.close();                                            response.resume("Upload  completed");                                    }  else  {                                            final  int  n  =  in.read(buffer);                                            out.write(buffer,  0,  n);                                    }                            }  catch  (IOException  e)  {                                    throw  new  WebApplicationException(e);                            }  });  }                                          

NIO  Example  (Server)  

Non-­‐blocking  Call  

Page 31: KeepLearningwithOracleUniversity · Title: JAXRS_TS.pptx Author: Santiago Pericas-Geertsen Created Date: 10/26/2015 10:51:22 PM

Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved.       31  

Client  client  =  ClientBuilder.newClient();  ByteArrayInputStream  in  =  new  ByteArrayInputStream(…);  byte[]  buffer  =  new  byte[FOUR_KB];    client.target("/file")              .request(MediaType.APPLICATION_OCTET_STREAM)              .nio().post(out  -­‐>  {                                        //  writer  handler                                              try  {                                                      final  int  n  =  in.read(buffer);                                                      if  (n  >=  0)  {                                                              out.write(buffer,  0,  n);                                                              return  true;        //  more  to  write                                                      }                                                      in.close();                                                      return  false;              //  we're  done                                              }  catch  (IOException  e)  {                                                      throw  new  WebApplicationException(e);  }  });  

NIO  Example  (Client)  

Stream  to    read  file  

Page 32: KeepLearningwithOracleUniversity · Title: JAXRS_TS.pptx Author: Santiago Pericas-Geertsen Created Date: 10/26/2015 10:51:22 PM

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

Client  client  =  ClientBuilder.newClient();  ByteArrayInputStream  in  =  new  ByteArrayInputStream(…);  byte[]  buffer  =  new  byte[FOUR_KB];    client.target("/file")              .request(MediaType.APPLICATION_OCTET_STREAM)              .nio().post(out  -­‐>  {                                        //  writer  handler                                              try  {                                                      final  int  n  =  in.read(buffer);                                                      if  (n  >=  0)  {                                                              out.write(buffer,  0,  n);                                                              return  true;        //  more  to  write                                                      }                                                      in.close();                                                      return  false;              //  we're  done                                              }  catch  (IOException  e)  {                                                      throw  new  WebApplicationException(e);  }  });  

NIO  Example  (Client)  

Non-­‐blocking  Call  

Page 33: KeepLearningwithOracleUniversity · Title: JAXRS_TS.pptx Author: Santiago Pericas-Geertsen Created Date: 10/26/2015 10:51:22 PM

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

NIO  in  JAX-­‐RS  2.1  • Presented  proposal  for  resource  methods  

– Direct  access  to  underlying  stream  à  la  StreamingOutput  – Using  lambdas  as  event  handlers:  read/write,  compleDon  and  error  

• What  about  NIO  on  MBR  and  MBW’s?  – SDll  under  invesDgaDon  

   

33  

Page 34: KeepLearningwithOracleUniversity · Title: JAXRS_TS.pptx Author: Santiago Pericas-Geertsen Created Date: 10/26/2015 10:51:22 PM

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

SSE  Event  stream  support  for  JAX-­‐RS  

34  

Page 35: KeepLearningwithOracleUniversity · Title: JAXRS_TS.pptx Author: Santiago Pericas-Geertsen Created Date: 10/26/2015 10:51:22 PM

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

What  is  SSE?  • A  W3C  standard  that  is  part  of  the  HTML5  family  • Defines  EventSource  API  and  format  text/event-­‐stream  •  Server  push  only  • Runs  over  HTTP  • Much  beOer  alternaDve  to  polling  

– Regardless  of  size:  short,  long,  etc.  

 

35  

Page 36: KeepLearningwithOracleUniversity · Title: JAXRS_TS.pptx Author: Santiago Pericas-Geertsen Created Date: 10/26/2015 10:51:22 PM

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

Sample  SSE  Stream  

event:  javaone15\n  data:  must  not  miss\n  data:  JAX-­‐RS  presentation!\n\n    event:  lateparty\n  data:  must  drink  lots  of\n  data:  free  beer!\n\n  

 36  

Also  available  id:  and  retry:    

Most  apps  just  use  data:  

Page 37: KeepLearningwithOracleUniversity · Title: JAXRS_TS.pptx Author: Santiago Pericas-Geertsen Created Date: 10/26/2015 10:51:22 PM

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

SSE  Sample  

37  

JAX-­‐RS  Resource  Class  

REST  Client  

SSE  Client  

SSE  Client  

SSE  Client  

HTTP  PUT  

SSE  Broadcas

t  

Page 38: KeepLearningwithOracleUniversity · Title: JAXRS_TS.pptx Author: Santiago Pericas-Geertsen Created Date: 10/26/2015 10:51:22 PM

Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved.       38  

@Path(“message/stream”)  public  class  MessageStreamResource  {            …            @Inject          public  MessageStreamResource(SseContext  ctx)  {                  this.ctx  =  ctx;                  this.bc  =  ctx.newBroadcaster();          }              @GET  @Produces(“text/event-­‐stream”)          public  SseEventOutput  getMessageStream()  {                  SeeEventOutput  eventOutput  =  ctx.newOutput();                  bc.register(eventOutput);                  return  eventOutput;          }          …  

SSE  Example:  Broadcaster  

Leaves  HTTP  ConnecDon  Open  

Injects  SSE  Context  

Page 39: KeepLearningwithOracleUniversity · Title: JAXRS_TS.pptx Author: Santiago Pericas-Geertsen Created Date: 10/26/2015 10:51:22 PM

Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved.       39  

@Path(“message/stream”)  public  class  MessageStreamResource  {          …          @PUT          @Consumes(“text/plain”)          public  void  putMessage(String  message)  {                  OutboundSseEvent  event  =  ctx.newEvent()                          .data(message).build();                  bc.broadcast(event);          }          }      

SSE  Example:  Messages  

Broadcast  to  all  connecDons  

Page 40: KeepLearningwithOracleUniversity · Title: JAXRS_TS.pptx Author: Santiago Pericas-Geertsen Created Date: 10/26/2015 10:51:22 PM

Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved.       40  

 WebTarget  wt  =  ClientBuilder.newClient().target(“…”);    SseEventInput  input  =  target.request(“text/event-­‐stream”)                                                          .get(SseEventInput.class);    //  Consume  all  events  until  closed  while  (!input.isClosed())  {          System.out.println(input.read().readData());  }    

SSE  in  JAX-­‐RS  2.1  Client  API  (Pull  Style)  

Page 41: KeepLearningwithOracleUniversity · Title: JAXRS_TS.pptx Author: Santiago Pericas-Geertsen Created Date: 10/26/2015 10:51:22 PM

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

Summary  Almost  done  …  

41  

Page 42: KeepLearningwithOracleUniversity · Title: JAXRS_TS.pptx Author: Santiago Pericas-Geertsen Created Date: 10/26/2015 10:51:22 PM

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

JAX-­‐RS  2.1  • Dot  release  that  focuses  on  “modern”  features  •  TargeDng  Early  Drao  (EDR)  end  of  2015  • Runs  on  JDK  8:    

– Lambdas  – CompletableFuture<T>  

•  Subscribe  to  users@jax-­‐rs-­‐spec.java.net  

 

42  

Page 43: KeepLearningwithOracleUniversity · Title: JAXRS_TS.pptx Author: Santiago Pericas-Geertsen Created Date: 10/26/2015 10:51:22 PM

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

Q/A  It  is  7me  to  REST  now  

SanDago  Pericas-­‐Geertsen  JSR  370  Spec  Lead  Oracle