Enviar búsqueda
Cargar
REST in an Async World
•
3 recomendaciones
•
2,300 vistas
David Delabassee
Seguir
Presented at Oracle Code Israel (July 2017)
Leer menos
Leer más
Software
Denunciar
Compartir
Denunciar
Compartir
1 de 50
Descargar ahora
Descargar para leer sin conexión
Recomendados
JAX-RS 2.1 Reloaded
JAX-RS 2.1 Reloaded
David Delabassee
Java EE Next
Java EE Next
David Delabassee
Java EE 8 - February 2017 update
Java EE 8 - February 2017 update
David Delabassee
Java EE Next - BeJUG JavaOne Afterglow 2016
Java EE Next - BeJUG JavaOne Afterglow 2016
David Delabassee
Application Development with Oracle Database
Application Development with Oracle Database
gvenzl
Oow MySQL Whats new in security overview sept 2017 v1
Oow MySQL Whats new in security overview sept 2017 v1
Mark Swarbrick
No sql from the web’s favourite relational database MySQL
No sql from the web’s favourite relational database MySQL
Mark Swarbrick
MySQL as a Document Store
MySQL as a Document Store
Mark Swarbrick
Recomendados
JAX-RS 2.1 Reloaded
JAX-RS 2.1 Reloaded
David Delabassee
Java EE Next
Java EE Next
David Delabassee
Java EE 8 - February 2017 update
Java EE 8 - February 2017 update
David Delabassee
Java EE Next - BeJUG JavaOne Afterglow 2016
Java EE Next - BeJUG JavaOne Afterglow 2016
David Delabassee
Application Development with Oracle Database
Application Development with Oracle Database
gvenzl
Oow MySQL Whats new in security overview sept 2017 v1
Oow MySQL Whats new in security overview sept 2017 v1
Mark Swarbrick
No sql from the web’s favourite relational database MySQL
No sql from the web’s favourite relational database MySQL
Mark Swarbrick
MySQL as a Document Store
MySQL as a Document Store
Mark Swarbrick
TLV - Whats new in MySQL 8
TLV - Whats new in MySQL 8
Mark Swarbrick
Rootconf admin101
Rootconf admin101
Ligaya Turmelle
TDC2018SP | Trilha Java Enterprise - O Java EE morreu? EE4J e so um plugin? E...
TDC2018SP | Trilha Java Enterprise - O Java EE morreu? EE4J e so um plugin? E...
tdc-globalcode
Java @ Rio Meetup #1 - Java @ Oracle Cloud
Java @ Rio Meetup #1 - Java @ Oracle Cloud
Paulo Alberto Simoes ∴
11회 Oracle Developer Meetup 발표 자료: Oracle NoSQL (2019.05.18) oracle-nosql pu...
11회 Oracle Developer Meetup 발표 자료: Oracle NoSQL (2019.05.18) oracle-nosql pu...
Taewan Kim
JSON support in Java EE 8
JSON support in Java EE 8
Lukas Jungmann
Performance in Spark 2.0, PDX Spark Meetup 8/18/16
Performance in Spark 2.0, PDX Spark Meetup 8/18/16
pdx_spark
2018 Oracle Impact 발표자료: Oracle Enterprise AI
2018 Oracle Impact 발표자료: Oracle Enterprise AI
Taewan Kim
Aneez Hasan_Resume
Aneez Hasan_Resume
Aneez Hasan Mohamed Rafi
Jfokus 2017 Oracle Dev Cloud and Containers
Jfokus 2017 Oracle Dev Cloud and Containers
Mika Rinne
MySQL Devops Webinar
MySQL Devops Webinar
Frederic Descamps
Oracle databáze – Konsolidovaná Data Management Platforma
Oracle databáze – Konsolidovaná Data Management Platforma
MarketingArrowECS_CZ
토드(Toad) 신제품 및 크로스 플랫폼 전략(1)
토드(Toad) 신제품 및 크로스 플랫폼 전략(1)
mosaicnet
The Future of Java and You
The Future of Java and You
Heather VanCura
Introduction to MySQL InnoDB Cluster
Introduction to MySQL InnoDB Cluster
Frederic Descamps
MySQL Innovation: from 5.7 to 8.0
MySQL Innovation: from 5.7 to 8.0
Frederic Descamps
MySQL Community Meetup in China : Innovation driven by the Community
MySQL Community Meetup in China : Innovation driven by the Community
Frederic Descamps
What's coming in Java EE 8
What's coming in Java EE 8
David Delabassee
Cisco Connect Vancouver 2017 - Embedding IR into the DNA of the business
Cisco Connect Vancouver 2017 - Embedding IR into the DNA of the business
Cisco Canada
DataOps Barcelona - MySQL HA so easy... that's insane !
DataOps Barcelona - MySQL HA so easy... that's insane !
Frederic Descamps
TDC2018SP | Trilha Arq Java - Crie arquiteturas escalaveis, multi-language e ...
TDC2018SP | Trilha Arq Java - Crie arquiteturas escalaveis, multi-language e ...
tdc-globalcode
Why MySQL High Availability Matters
Why MySQL High Availability Matters
Mark Swarbrick
Más contenido relacionado
La actualidad más candente
TLV - Whats new in MySQL 8
TLV - Whats new in MySQL 8
Mark Swarbrick
Rootconf admin101
Rootconf admin101
Ligaya Turmelle
TDC2018SP | Trilha Java Enterprise - O Java EE morreu? EE4J e so um plugin? E...
TDC2018SP | Trilha Java Enterprise - O Java EE morreu? EE4J e so um plugin? E...
tdc-globalcode
Java @ Rio Meetup #1 - Java @ Oracle Cloud
Java @ Rio Meetup #1 - Java @ Oracle Cloud
Paulo Alberto Simoes ∴
11회 Oracle Developer Meetup 발표 자료: Oracle NoSQL (2019.05.18) oracle-nosql pu...
11회 Oracle Developer Meetup 발표 자료: Oracle NoSQL (2019.05.18) oracle-nosql pu...
Taewan Kim
JSON support in Java EE 8
JSON support in Java EE 8
Lukas Jungmann
Performance in Spark 2.0, PDX Spark Meetup 8/18/16
Performance in Spark 2.0, PDX Spark Meetup 8/18/16
pdx_spark
2018 Oracle Impact 발표자료: Oracle Enterprise AI
2018 Oracle Impact 발표자료: Oracle Enterprise AI
Taewan Kim
Aneez Hasan_Resume
Aneez Hasan_Resume
Aneez Hasan Mohamed Rafi
Jfokus 2017 Oracle Dev Cloud and Containers
Jfokus 2017 Oracle Dev Cloud and Containers
Mika Rinne
MySQL Devops Webinar
MySQL Devops Webinar
Frederic Descamps
Oracle databáze – Konsolidovaná Data Management Platforma
Oracle databáze – Konsolidovaná Data Management Platforma
MarketingArrowECS_CZ
토드(Toad) 신제품 및 크로스 플랫폼 전략(1)
토드(Toad) 신제품 및 크로스 플랫폼 전략(1)
mosaicnet
The Future of Java and You
The Future of Java and You
Heather VanCura
Introduction to MySQL InnoDB Cluster
Introduction to MySQL InnoDB Cluster
Frederic Descamps
MySQL Innovation: from 5.7 to 8.0
MySQL Innovation: from 5.7 to 8.0
Frederic Descamps
MySQL Community Meetup in China : Innovation driven by the Community
MySQL Community Meetup in China : Innovation driven by the Community
Frederic Descamps
What's coming in Java EE 8
What's coming in Java EE 8
David Delabassee
Cisco Connect Vancouver 2017 - Embedding IR into the DNA of the business
Cisco Connect Vancouver 2017 - Embedding IR into the DNA of the business
Cisco Canada
DataOps Barcelona - MySQL HA so easy... that's insane !
DataOps Barcelona - MySQL HA so easy... that's insane !
Frederic Descamps
La actualidad más candente
(20)
TLV - Whats new in MySQL 8
TLV - Whats new in MySQL 8
Rootconf admin101
Rootconf admin101
TDC2018SP | Trilha Java Enterprise - O Java EE morreu? EE4J e so um plugin? E...
TDC2018SP | Trilha Java Enterprise - O Java EE morreu? EE4J e so um plugin? E...
Java @ Rio Meetup #1 - Java @ Oracle Cloud
Java @ Rio Meetup #1 - Java @ Oracle Cloud
11회 Oracle Developer Meetup 발표 자료: Oracle NoSQL (2019.05.18) oracle-nosql pu...
11회 Oracle Developer Meetup 발표 자료: Oracle NoSQL (2019.05.18) oracle-nosql pu...
JSON support in Java EE 8
JSON support in Java EE 8
Performance in Spark 2.0, PDX Spark Meetup 8/18/16
Performance in Spark 2.0, PDX Spark Meetup 8/18/16
2018 Oracle Impact 발표자료: Oracle Enterprise AI
2018 Oracle Impact 발표자료: Oracle Enterprise AI
Aneez Hasan_Resume
Aneez Hasan_Resume
Jfokus 2017 Oracle Dev Cloud and Containers
Jfokus 2017 Oracle Dev Cloud and Containers
MySQL Devops Webinar
MySQL Devops Webinar
Oracle databáze – Konsolidovaná Data Management Platforma
Oracle databáze – Konsolidovaná Data Management Platforma
토드(Toad) 신제품 및 크로스 플랫폼 전략(1)
토드(Toad) 신제품 및 크로스 플랫폼 전략(1)
The Future of Java and You
The Future of Java and You
Introduction to MySQL InnoDB Cluster
Introduction to MySQL InnoDB Cluster
MySQL Innovation: from 5.7 to 8.0
MySQL Innovation: from 5.7 to 8.0
MySQL Community Meetup in China : Innovation driven by the Community
MySQL Community Meetup in China : Innovation driven by the Community
What's coming in Java EE 8
What's coming in Java EE 8
Cisco Connect Vancouver 2017 - Embedding IR into the DNA of the business
Cisco Connect Vancouver 2017 - Embedding IR into the DNA of the business
DataOps Barcelona - MySQL HA so easy... that's insane !
DataOps Barcelona - MySQL HA so easy... that's insane !
Similar a REST in an Async World
TDC2018SP | Trilha Arq Java - Crie arquiteturas escalaveis, multi-language e ...
TDC2018SP | Trilha Arq Java - Crie arquiteturas escalaveis, multi-language e ...
tdc-globalcode
Why MySQL High Availability Matters
Why MySQL High Availability Matters
Mark Swarbrick
MySQL Shell - The DevOps Tool for MySQL
MySQL Shell - The DevOps Tool for MySQL
Miguel Araújo
TDC2018 | Trilha Java - The quest to the Language Graal: One VM to rule them...
TDC2018 | Trilha Java - The quest to the Language Graal: One VM to rule them...
tdc-globalcode
CDI 2.0 (JSR 365) - Java Day Tokyo 2017 (English)
CDI 2.0 (JSR 365) - Java Day Tokyo 2017 (English)
Logico
Migrating your infrastructure to OpenStack - Avi Miller, Oracle
Migrating your infrastructure to OpenStack - Avi Miller, Oracle
OpenStack
Building a Serverless State Service for the Cloud
Building a Serverless State Service for the Cloud
Edward Burns
MOUG17 Keynote: What's New from Oracle Database Development
MOUG17 Keynote: What's New from Oracle Database Development
Monica Li
Data Mobility for the Oracle Database by JWilliams and RGonzalez
Data Mobility for the Oracle Database by JWilliams and RGonzalez
Markus Michalewicz
Trivadis TechEvent 2017 Leveraging the Oracle Cloud by Kris Bhanushali tech_e...
Trivadis TechEvent 2017 Leveraging the Oracle Cloud by Kris Bhanushali tech_e...
Trivadis
Democratizing Serverless—The Open Source Fn Project - Serverless Summit
Democratizing Serverless—The Open Source Fn Project - Serverless Summit
CodeOps Technologies LLP
NZOUG-GroundBreakers-2018 - Troubleshooting and Diagnosing 18c RAC
NZOUG-GroundBreakers-2018 - Troubleshooting and Diagnosing 18c RAC
Sandesh Rao
Building Modern Applications Using APIs, Microservices and Chatbots
Building Modern Applications Using APIs, Microservices and Chatbots
Oracle Developers
Polyglot on the JVM with Graal (English)
Polyglot on the JVM with Graal (English)
Logico
Time-series Analytics using Matrix Profile and SAX
Time-series Analytics using Matrix Profile and SAX
SUPREET OBEROI
Modern Application Development for the Enterprise
Modern Application Development for the Enterprise
Juarez Junior
JCP 20 Year Anniversary
JCP 20 Year Anniversary
Heather VanCura
AIOUG : OTNYathra - Troubleshooting and Diagnosing Oracle Database 12.2 and O...
AIOUG : OTNYathra - Troubleshooting and Diagnosing Oracle Database 12.2 and O...
Sandesh Rao
Polyglot on the JVM with Graal (Japanese)
Polyglot on the JVM with Graal (Japanese)
Logico
Harnessing the Power of Optimizer Hints
Harnessing the Power of Optimizer Hints
Maria Colgan
Similar a REST in an Async World
(20)
TDC2018SP | Trilha Arq Java - Crie arquiteturas escalaveis, multi-language e ...
TDC2018SP | Trilha Arq Java - Crie arquiteturas escalaveis, multi-language e ...
Why MySQL High Availability Matters
Why MySQL High Availability Matters
MySQL Shell - The DevOps Tool for MySQL
MySQL Shell - The DevOps Tool for MySQL
TDC2018 | Trilha Java - The quest to the Language Graal: One VM to rule them...
TDC2018 | Trilha Java - The quest to the Language Graal: One VM to rule them...
CDI 2.0 (JSR 365) - Java Day Tokyo 2017 (English)
CDI 2.0 (JSR 365) - Java Day Tokyo 2017 (English)
Migrating your infrastructure to OpenStack - Avi Miller, Oracle
Migrating your infrastructure to OpenStack - Avi Miller, Oracle
Building a Serverless State Service for the Cloud
Building a Serverless State Service for the Cloud
MOUG17 Keynote: What's New from Oracle Database Development
MOUG17 Keynote: What's New from Oracle Database Development
Data Mobility for the Oracle Database by JWilliams and RGonzalez
Data Mobility for the Oracle Database by JWilliams and RGonzalez
Trivadis TechEvent 2017 Leveraging the Oracle Cloud by Kris Bhanushali tech_e...
Trivadis TechEvent 2017 Leveraging the Oracle Cloud by Kris Bhanushali tech_e...
Democratizing Serverless—The Open Source Fn Project - Serverless Summit
Democratizing Serverless—The Open Source Fn Project - Serverless Summit
NZOUG-GroundBreakers-2018 - Troubleshooting and Diagnosing 18c RAC
NZOUG-GroundBreakers-2018 - Troubleshooting and Diagnosing 18c RAC
Building Modern Applications Using APIs, Microservices and Chatbots
Building Modern Applications Using APIs, Microservices and Chatbots
Polyglot on the JVM with Graal (English)
Polyglot on the JVM with Graal (English)
Time-series Analytics using Matrix Profile and SAX
Time-series Analytics using Matrix Profile and SAX
Modern Application Development for the Enterprise
Modern Application Development for the Enterprise
JCP 20 Year Anniversary
JCP 20 Year Anniversary
AIOUG : OTNYathra - Troubleshooting and Diagnosing Oracle Database 12.2 and O...
AIOUG : OTNYathra - Troubleshooting and Diagnosing Oracle Database 12.2 and O...
Polyglot on the JVM with Graal (Japanese)
Polyglot on the JVM with Graal (Japanese)
Harnessing the Power of Optimizer Hints
Harnessing the Power of Optimizer Hints
Más de David Delabassee
JVMs in Containers - Best Practices
JVMs in Containers - Best Practices
David Delabassee
JVMs in Containers
JVMs in Containers
David Delabassee
Serverless Java Challenges & Triumphs
Serverless Java Challenges & Triumphs
David Delabassee
Serverless Java - Challenges and Triumphs
Serverless Java - Challenges and Triumphs
David Delabassee
Randstad Docker meetup - Serverless
Randstad Docker meetup - Serverless
David Delabassee
Java Serverless in Action - Voxxed Banff
Java Serverless in Action - Voxxed Banff
David Delabassee
Serverless Kotlin
Serverless Kotlin
David Delabassee
HTTP/2 comes to Java
HTTP/2 comes to Java
David Delabassee
Java EE 8 - Work in progress
Java EE 8 - Work in progress
David Delabassee
HTTP/2 comes to Java (Dec. 2015 version)
HTTP/2 comes to Java (Dec. 2015 version)
David Delabassee
EJB and CDI - Alignment and Strategy
EJB and CDI - Alignment and Strategy
David Delabassee
HTTP/2 Comes to Java
HTTP/2 Comes to Java
David Delabassee
Java EE 8 - What’s new on the Web front
Java EE 8 - What’s new on the Web front
David Delabassee
HTTP/2 Comes to Java
HTTP/2 Comes to Java
David Delabassee
Java EE 8 Adopt a JSR : JSON-P 1.1 & MVC 1.0
Java EE 8 Adopt a JSR : JSON-P 1.1 & MVC 1.0
David Delabassee
MVC 1.0 / JSR 371
MVC 1.0 / JSR 371
David Delabassee
Java EE 8 - An instant snapshot
Java EE 8 - An instant snapshot
David Delabassee
Avatar 2.0
Avatar 2.0
David Delabassee
Java EE 8 - An instant snapshot
Java EE 8 - An instant snapshot
David Delabassee
HTTP/2 Comes to Java - What Servlet 4.0 Means to You
HTTP/2 Comes to Java - What Servlet 4.0 Means to You
David Delabassee
Más de David Delabassee
(20)
JVMs in Containers - Best Practices
JVMs in Containers - Best Practices
JVMs in Containers
JVMs in Containers
Serverless Java Challenges & Triumphs
Serverless Java Challenges & Triumphs
Serverless Java - Challenges and Triumphs
Serverless Java - Challenges and Triumphs
Randstad Docker meetup - Serverless
Randstad Docker meetup - Serverless
Java Serverless in Action - Voxxed Banff
Java Serverless in Action - Voxxed Banff
Serverless Kotlin
Serverless Kotlin
HTTP/2 comes to Java
HTTP/2 comes to Java
Java EE 8 - Work in progress
Java EE 8 - Work in progress
HTTP/2 comes to Java (Dec. 2015 version)
HTTP/2 comes to Java (Dec. 2015 version)
EJB and CDI - Alignment and Strategy
EJB and CDI - Alignment and Strategy
HTTP/2 Comes to Java
HTTP/2 Comes to Java
Java EE 8 - What’s new on the Web front
Java EE 8 - What’s new on the Web front
HTTP/2 Comes to Java
HTTP/2 Comes to Java
Java EE 8 Adopt a JSR : JSON-P 1.1 & MVC 1.0
Java EE 8 Adopt a JSR : JSON-P 1.1 & MVC 1.0
MVC 1.0 / JSR 371
MVC 1.0 / JSR 371
Java EE 8 - An instant snapshot
Java EE 8 - An instant snapshot
Avatar 2.0
Avatar 2.0
Java EE 8 - An instant snapshot
Java EE 8 - An instant snapshot
HTTP/2 Comes to Java - What Servlet 4.0 Means to You
HTTP/2 Comes to Java - What Servlet 4.0 Means to You
Último
eSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration tools
osttopstonverter
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
RTS corp
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
Christian Birchler
Ronisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited Catalogue
itservices996
Salesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZ
ABSYZ Inc
Keeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository world
Roberto Pérez Alcolea
Leveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Applitools
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Rob Geurden
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
OnePlan Solutions
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identity
team-WIBU
Osi security architecture in network.pptx
Osi security architecture in network.pptx
VinzoCenzo
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
RTS corp
2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards
Christopher Curtin
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data Streams
Safe Software
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive Goal
Lionel Briand
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their Engineering
Hironori Washizaki
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and Repair
Lionel Briand
Best Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh IT
manoharjgpsolutions
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf
Andrey Devyatkin
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Drew Moseley
Último
(20)
eSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration tools
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
Ronisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited Catalogue
Salesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZ
Keeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository world
Leveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identity
Osi security architecture in network.pptx
Osi security architecture in network.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data Streams
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive Goal
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their Engineering
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and Repair
Best Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh IT
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdf
REST in an Async World
1.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | David Delabassee @delabassee Oracle REST in an Async World Israel – July 2017
2.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 2
3.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 3
4.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | Safe Harbor Statement The following is intended to outline our general product direcPon. It is intended for informaPon purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or funcPonality, and should not be relied upon in making purchasing decisions. The development, release, and Pming of any features or funcPonality described for Oracle’s products remains at the sole discrePon of Oracle. 4
5.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | Agenda • REST & JAX-RS • Synchronous vs. Asynchronous •
Client-side vs. Server-side 5
6.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | Client-side REST ConfidenPal – Oracle Internal/Restricted/Highly Restricted 6
7.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | JAX-RS • Java API for RESTful Web Services – JAX-RS 2.0 – JSR 339 (*) – JAX-RS 2.1 – JSR 370 • Standard based RESTful framework – Server-side and client-side – Jersey, JBoss RESTEasy, Restlet, Apache CXF, Apache Wink, IBM JAX-RS, … •
Java SE and Java EE 7
8.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 8 Client client = ClientBuilder.newClient(); WebTarget target = client.target("http://weath.er/api") .queryParam("city", "Paris”); Forecast forecast = target.request() .get(Forecast.class); … client.close(); JAX-RS Client API
9.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | JAX-RS Client API • Client – Client side container – Customizable & tunable • E.g. executorService() (new in JAX-RS 2.1!) • WebTarget – Target remote URI – Build from a client – path() + resolveTemplates(), queryParam(), matrixParam() javax.ws.rs.client.Client interface 9
10.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | JAX-RS Client API • Request invocaPon builder – Build from a WebTarget – acceptXXX(), cookie(), header(), cacheControl()… – HTTP methods javax.ws.rs.client.Client interface 10
11.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | JAX-RS Client API • Fluent API – Client Builder è Client è Web Target è Request building è Response javax.ws.rs.client.Client interface 11 List<Forecast> forecast = ClientBuilder.newClient() .target("http://weath.er/cities") .request() .accept("application/json") .header("Foo","bar") .get(new GenericType<List<Forecast>>() {});
12.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | JAX-RS Client API • Synchronous invoker • Asynchronous invoker 12 String city = client.target("http://locati.on/api") .queryParam("city", "Paris") .request() .get(String.class); Future<String> fCity = client.target("http://locati.on/api") .queryParam("city", "Paris") .request() .async() .get(String.class);
13.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | JAX-RS Client API Asynchronous invoca.on 13 Future<String> fCity = client.target("http://locati.on/api") … .request() .async() .get(String.class); String city = future.get();
14.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | JAX-RS Client API Asynchronous invoca.on 14 Future<String> fCity = client.target("http://locati.on/api") … .request() .async() .get(String.class); try { String city = future.get(4, TimeUnit.SECONDS); } catch(TimeoutException timeout) { … }
15.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | JAX-RS Client API Asynchronous invoca.on 15 Future<String> future = client.target("http://locati.on/api") … .request() .async() .get(String.class); while (!future.isDone()) { // response hasn't been received yet … } String city = f.get(); … // Set ClientProperties.CONNECT_TIMEOUT & READ_TIMEOUT
16.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | JAX-RS Client API • InvocaPonCallback Interface – javax.ws.rs.client.InvocaPonCallback<RESPONSE> • Container will receive asynchronous processing events from an invocaPon – completed(RESPONSE response) – failed(Throwable throwable) 16 Asynchronous invoca.on
17.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | JAX-RS Client API 17 Invoca.onCallback … WebTarget myResource = client.target("http://examp.le/api/read"); Future<Customer> future = myResource.request(MediaType.TEXT_PLAIN) .async() .get(new InvocationCallback<Customer>() { @Override public void completed (Customer customer) { // do something with the given customer } @Override public void failed (Throwable throwable) { // Oops! } });
18.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 18 The Travel Service
19.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | The Travel Service - Synchronous • Customer details: 150 ms • Recommended desPnaPons: 250 ms •
Price calculaPon for a customer and desPnaPon: 170 ms (each) • Weather forecast for a desPnaPon: 330 ms (each) 19 5 400 ms
20.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | The Travel Service - Asynchronous 20 730 ms
21.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 21 The Travel Service
22.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 22 The Travel Service destination.path("recommended").request() .header("Rx-User", "Async") .async() .get(new InvocationCallback<List<Destination>>() { @Override public void completed(final List<Destination> recommended) { final CountDownLatch innerLatch = new CountDownLatch(recommended.size()); final Map<String, Forecast> forecasts = Collections.synchronizedMap(new HashMap<>()); for (final Destination dest : recommended) { forecast.resolveTemplate("dest", dest.getDestination()).request() .async() .get(new InvocationCallback<Forecast>() { @Override public void completed(final Forecast forecast) { forecasts.put(dest.getDestination(), forecast); innerLatch.countDown(); }
23.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 23 JAX-RS 2.0 @Override public void failed(final Throwable throwable) { innerLatch.countDown(); } }); } try { if (!innerLatch.await(10, TimeUnit.SECONDS)) { // timeout } } catch (final InterruptedException e) { // Ooops, interrupted! } // Continue with processing… } @Override public void failed(final Throwable throwable) { // Recommendation error } });
24.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 24 JAX-RS 2.1 // JAX-RS 2.1 CompletionStage<Response> csResponse = ClientBuilder.newClient() .target("http://example.com/api") .request() .rx() .get(); Future<Response> fResponse = ClientBuilder.newClient() .target("http://example.com/api") .request() .async() .get(); Response response = ClientBuilder.newClient() .target("http://example.com/api") .request() .get();
25.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | ComplePonStage interface • “A stage of a possibly asynchronous computaPon, that performs an ac.on or computes a value” • “On termina.on a stage may in turn trigger other dependent stages.” •
Stage execuPon triggered by complePon of – “then” - a single stage – “combine” - both of two stages – “either” - either of two stages 25
26.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | ComplePonStage interface • ComputaPon takes an argument and returns a result? – “apply” – Func.on take result of the previous stage as argument, return a result – “accept” – Consumer only take an argument – “run” – Runnable no argument and doesn’t return a result • How the execuPon of the computaPon is arranged? – Doesn't end with “async” – execute using the stage’s default execuPon facility – End with “async” - use the stage’s default asynchronous execuPon facility •
… 26 hsps://docs.oracle.com/javase/8/docs/api/java/uPl/concurrent/ComplePonStage.html
27.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 27 JAX-RS 2.1 CompletionStage<Number> csPrice = client.target("price/{destination}") .resolveTemplate("destination", "Paris") .request() .rx() .get(Number.class); CompletionStage<String> csForecast = client.target("forecast/{destination}") .resolveTemplate("destination", "Paris") .request() .rx() .get(String.class); csPrice.thenCombine( csForecast, (price, forecast) -> book(price, forecast) );
28.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 28 Demo The Travel Service hsps://github.com/jersey/jersey/tree/master/examples/rx-client-webapp
29.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | JAX-RS Client API • REST Client Side container • Synchronous invoker – Default invoker - javax.ws.rs.client.SyncInvoker •
Asynchronous invokers – async() invoker - javax.ws.rs.client.AsyncInvoker • Might block -> InvocaPonCallback – ReacPve rx() invoker - javax.ws.rs.client.RxInvoker • New in JAX-RS 2.1! • ComplePonStage API + other ReacPve library (opt.) 29 Summary
30.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | Server-side REST ConfidenPal – Oracle Internal/Restricted/Highly Restricted 30
31.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 31 Server-side @Path("/Item") public class ItemResource { @Path("{id}") @Produces(MediaType.APPLICATION_XML) public ItemResource getItemResource(@PathParam("id") String id) { return ItemResource.getInstance(id); } @POST @Consumes(MediaType.APPLICATION_XML) @Produces(MediaType.APPLICATION_XML) public Response createItem(@QueryParam("name") String name) { //... return Response.status(Status.OK).entity(…).build(); } }
32.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 32 Server-side Async @Path("/Async") public class ItemResource { @GET public void heavyResource(@Suspended AsyncResponse ar) { mes.execute(new Runnable() { @Override public void run() { try { // long running computation... ar.resume(Response.ok(...).build()); } catch (InterruptedException ex) { // Ooops! } } }); ...
33.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | Server-side Async • Provides means for asynchronous server side response processing – Injectable via @Suspended OR – Resource method can return a ComplePonStage<T> instance (new in JAX-RS 2.1!) • Bound to the request – Suspend – Resume – Configure – Cancel 33 AsyncResponse interface
34.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | Server-side Async 34 Client Server @Suspended AsyncResponse.resume(…) Long running operaPon… Request Response
35.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | Long running REST operaPons è POST ... long running operaPon ... ç ‘201 Created’ + LocaPon 35 è
POST ç ‘202 Accepted’ + Temp LocaPon è GET Temp LocaPon ç ‘200 OK’ (+ ETA) … è GET Temp LocaPon ç ‘303 See Other’ + Final LocaPon
36.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | Server-sent Events • Persistent, one-way communicaPon channel • Text protocol, special media type "text/event-stream" •
Server can send mulPple messages (events) to a client • Can contain id, name, comment retry interval • Supported in all modern browsers 36
37.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | JAX-RS 2.1 37 SSE • SseEvent – ID, Name, Comment, … • OutboundSseEvent – Server-side representaPon of a Server-sent event – OutboundSseEvent.Builder() •
InboundSseEvent – Client-side representaPon of a Server-sent event
38.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | JAX-RS 2.1 38 SSE – Server side • SseEventSink – Outbound Server-Sent Events stream – SseBroadcaster @GET @Path ("sse") @Produces(MediaType.SERVER_SENT_EVENTS) public void eventStream(@Context SseEventSink eventSink, @Context SSE sse) { ... eventSink.send( sse.newEvent("an event") ); eventSink.send( sse.newEvent("another event") ); ... eventSink.close(); }
39.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | JAX-RS 2.1 39 SSE – Client side • SseEventSource – Client for processing incoming Server-Sent Events SseEventSource es = SseEventSource.target(SSE_target) .reconnectingEvery(5, SECONDS) .build(); es.register(System.out::println); // InboundSseEvent consumer es.register(...); // Throwable consumer es.open(); ... es.close();
40.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | Wrap-up ConfidenPal – Oracle Internal/Restricted/Highly Restricted 40
41.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | JAX-RS • Java API for RESTful Web Services – JAX-RS 2.0 – JSR 339 (*) – JAX-RS 2.1 – JSR 370 • Standard based RESTful framework – Server-side and client-side – Java SE and Java EE – Jersey, JBoss RESTEasy, Restlet, Apache CXF, Apache Wink, IBM JAX-RS, … 41
42.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | JAX-RS – Client-side • REST Client Side container • Invokers – Synchronous •
javax.ws.rs.client.SyncInvoker • Default – Asynchronous • javax.ws.rs.client.AsyncInvoker – ReacPve • New in JAX-RS 2.1! • javax.ws.rs.client.AsyncInvoker 42
43.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | JAX-RS – Client-side 43 Sync Async RX Performance and scalability
✗✗ ✔ ✔ Easy to develop and maintain ✔ ✗ ✔ … complex workflow ✗ ✗ ✔ … error handling ✗ ✗ ✔ Leverage new Java SE feature ✗ ✗ ✔
44.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | JAX-RS –ReacPve Client API • Java SE 8 ComplePon Stage – As mandated by the spec. • Jersey – RxJava - rx.Observable – RxJava 2 - io.reacPvex.Flowable – Guava - ListenableFuture 44
45.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | JAX-RS – Server-side • AsyncResponse – Resume execuPon on a different thread – @Suspended – Resource method returning a ComplePonStage<T> instance • Long running operaPon pasern •
Server-sent Events 45
46.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | Java EE 8 46 Bean Valida.on CDI 2.0 JSON-B 1.0 Security 1.0 Bean Valida.on 2.0 JSF 2.3 Servlet 4.0 JSON-P 1.1 JAX-RS 2.1 ReacPve client API, Server-sent events, … HTTP/2, server push, … Java <-> JSON binding Updates to JSON standards, JSON Collectors, … Async event, event priority, SE support, … Embrace Java SE 8, new constraints Improved CDI, WebSocket, SE 8 integraPon, … Standardized IdenPty Store, AuthenPcaPon, Security Context
47.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | Java EE 8 • Work in progress – Final Release - Summer 2017 (plan) • Open Source Reference ImplementaPons – hsps://github.com/jersey – hsps://github.com/javaee •
Stay tuned… – hsps://blogs.oracle.com/theaquarium/ 47
48.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | .רבה תודה ConfidenPal – Oracle Internal/Restricted/Highly Restricted
48
49.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | Resources • JAX-RS specificaPon – hsps://github.com/jax-rs/api • Jersey – Asynchronous Services and Clients – hsps://jersey.java.net/documentaPon/latest/async.html#d0e8611 – hsps://github.com/jersey/jersey/tree/master/examples/rx-client-webapp •
ComplePonStage – hsps://docs.oracle.com/javase/8/docs/api/java/uPl/concurrent/ComplePonStage.html • Java EE Tutorial – hsps://docs.oracle.com/javaee/7/tutorial/ 49
Descargar ahora