REST in an Async World

David Delabassee
David DelabasseeDevRel - Java Platform Group - Oracle
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
David	Delabassee	
@delabassee	
Oracle	
REST	in	an	Async	World	
Israel	–	July	2017
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	 2
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	 3
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
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Agenda	
•  REST	&	JAX-RS	
•  Synchronous	vs.	Asynchronous	
•  Client-side	vs.	Server-side	
5
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Client-side	REST	
ConfidenPal	–	Oracle	Internal/Restricted/Highly	Restricted	 6
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
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
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
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
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>>()	{});
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);
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();
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)	{	
					…		
}
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
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
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!	
													}		
								});
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	 18	
The	Travel	Service
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
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
The	Travel	Service	-	Asynchronous	
20	
730	ms
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	 21	
The	Travel	Service
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();	
																													}
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	}	
									});
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();
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
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
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)	);
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
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
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Server-side	REST	
ConfidenPal	–	Oracle	Internal/Restricted/Highly	Restricted	 30
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();	
			}	
}
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!	
																				}	
																}	
												});	
				...
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
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Server-side	Async	
34	
Client	 Server	
@Suspended		
AsyncResponse.resume(…)	
Long	running	operaPon…	
Request	
Response
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
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
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
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();	
}
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();
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Wrap-up	
ConfidenPal	–	Oracle	Internal/Restricted/Highly	Restricted	 40
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
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
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	 ✗	 ✗	 ✔
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
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
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
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
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
	 .‫רבה‬ ‫תודה‬
ConfidenPal	–	Oracle	Internal/Restricted/Highly	Restricted	 48
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
REST in an Async World
1 of 50

Recommended

JAX-RS 2.1 Reloaded by
JAX-RS 2.1 ReloadedJAX-RS 2.1 Reloaded
JAX-RS 2.1 ReloadedDavid Delabassee
1.7K views43 slides
Java EE Next by
Java EE NextJava EE Next
Java EE NextDavid Delabassee
2.2K views44 slides
Java EE 8 - February 2017 update by
Java EE 8 - February 2017 updateJava EE 8 - February 2017 update
Java EE 8 - February 2017 updateDavid Delabassee
6K views65 slides
Java EE Next - BeJUG JavaOne Afterglow 2016 by
Java EE Next - BeJUG JavaOne Afterglow 2016Java EE Next - BeJUG JavaOne Afterglow 2016
Java EE Next - BeJUG JavaOne Afterglow 2016David Delabassee
433 views26 slides
Application Development with Oracle Database by
Application Development with Oracle DatabaseApplication Development with Oracle Database
Application Development with Oracle Databasegvenzl
3.3K views127 slides
Oow MySQL Whats new in security overview sept 2017 v1 by
Oow MySQL Whats new in security overview sept 2017 v1Oow MySQL Whats new in security overview sept 2017 v1
Oow MySQL Whats new in security overview sept 2017 v1Mark Swarbrick
98 views42 slides

More Related Content

What's hot

TLV - Whats new in MySQL 8 by
TLV - Whats new in MySQL 8TLV - Whats new in MySQL 8
TLV - Whats new in MySQL 8Mark Swarbrick
222 views41 slides
Rootconf admin101 by
Rootconf admin101Rootconf admin101
Rootconf admin101Ligaya Turmelle
516 views45 slides
TDC2018SP | Trilha Java Enterprise - O Java EE morreu? EE4J e so um plugin? E... by
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...
TDC2018SP | Trilha Java Enterprise - O Java EE morreu? EE4J e so um plugin? E...tdc-globalcode
141 views27 slides
Java @ Rio Meetup #1 - Java @ Oracle Cloud by
Java @ Rio Meetup #1 - Java @ Oracle CloudJava @ Rio Meetup #1 - Java @ Oracle Cloud
Java @ Rio Meetup #1 - Java @ Oracle CloudPaulo Alberto Simoes ∴
529 views32 slides
11회 Oracle Developer Meetup 발표 자료: Oracle NoSQL (2019.05.18) oracle-nosql pu... by
11회 Oracle Developer Meetup 발표 자료: Oracle NoSQL  (2019.05.18) oracle-nosql pu...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
342 views61 slides
JSON support in Java EE 8 by
JSON support in Java EE 8JSON support in Java EE 8
JSON support in Java EE 8Lukas Jungmann
2.4K views77 slides

What's hot(20)

TDC2018SP | Trilha Java Enterprise - O Java EE morreu? EE4J e so um plugin? E... by tdc-globalcode
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...
TDC2018SP | Trilha Java Enterprise - O Java EE morreu? EE4J e so um plugin? E...
tdc-globalcode141 views
11회 Oracle Developer Meetup 발표 자료: Oracle NoSQL (2019.05.18) oracle-nosql pu... by Taewan Kim
11회 Oracle Developer Meetup 발표 자료: Oracle NoSQL  (2019.05.18) oracle-nosql pu...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 Kim342 views
JSON support in Java EE 8 by Lukas Jungmann
JSON support in Java EE 8JSON support in Java EE 8
JSON support in Java EE 8
Lukas Jungmann2.4K views
Performance in Spark 2.0, PDX Spark Meetup 8/18/16 by pdx_spark
Performance in Spark 2.0, PDX Spark Meetup 8/18/16Performance in Spark 2.0, PDX Spark Meetup 8/18/16
Performance in Spark 2.0, PDX Spark Meetup 8/18/16
pdx_spark701 views
2018 Oracle Impact 발표자료: Oracle Enterprise AI by Taewan Kim
2018  Oracle Impact 발표자료: Oracle Enterprise AI2018  Oracle Impact 발표자료: Oracle Enterprise AI
2018 Oracle Impact 발표자료: Oracle Enterprise AI
Taewan Kim444 views
Jfokus 2017 Oracle Dev Cloud and Containers by Mika Rinne
Jfokus 2017 Oracle Dev Cloud and ContainersJfokus 2017 Oracle Dev Cloud and Containers
Jfokus 2017 Oracle Dev Cloud and Containers
Mika Rinne257 views
Oracle databáze – Konsolidovaná Data Management Platforma by MarketingArrowECS_CZ
Oracle databáze – Konsolidovaná Data Management PlatformaOracle databáze – Konsolidovaná Data Management Platforma
Oracle databáze – Konsolidovaná Data Management Platforma
토드(Toad) 신제품 및 크로스 플랫폼 전략(1) by mosaicnet
토드(Toad) 신제품 및 크로스 플랫폼 전략(1)토드(Toad) 신제품 및 크로스 플랫폼 전략(1)
토드(Toad) 신제품 및 크로스 플랫폼 전략(1)
mosaicnet1.5K views
MySQL Community Meetup in China : Innovation driven by the Community by Frederic Descamps
MySQL Community Meetup in China : Innovation driven by the CommunityMySQL Community Meetup in China : Innovation driven by the Community
MySQL Community Meetup in China : Innovation driven by the Community
Frederic Descamps211 views
Cisco Connect Vancouver 2017 - Embedding IR into the DNA of the business by Cisco Canada
Cisco Connect Vancouver 2017 - Embedding IR into the DNA of the businessCisco Connect Vancouver 2017 - Embedding IR into the DNA of the business
Cisco Connect Vancouver 2017 - Embedding IR into the DNA of the business
Cisco Canada279 views
DataOps Barcelona - MySQL HA so easy... that's insane ! by Frederic Descamps
DataOps Barcelona - MySQL HA so easy... that's insane !DataOps Barcelona - MySQL HA so easy... that's insane !
DataOps Barcelona - MySQL HA so easy... that's insane !
Frederic Descamps342 views

Similar to REST in an Async World

TDC2018SP | Trilha Arq Java - Crie arquiteturas escalaveis, multi-language e ... by
TDC2018SP | Trilha Arq Java - Crie arquiteturas escalaveis, multi-language e ...TDC2018SP | Trilha Arq Java - Crie arquiteturas escalaveis, multi-language e ...
TDC2018SP | Trilha Arq Java - Crie arquiteturas escalaveis, multi-language e ...tdc-globalcode
68 views18 slides
Why MySQL High Availability Matters by
Why MySQL High Availability MattersWhy MySQL High Availability Matters
Why MySQL High Availability MattersMark Swarbrick
315 views42 slides
MySQL Shell - The DevOps Tool for MySQL by
MySQL Shell - The DevOps Tool for MySQLMySQL Shell - The DevOps Tool for MySQL
MySQL Shell - The DevOps Tool for MySQLMiguel Araújo
176 views35 slides
TDC2018 | Trilha Java - The quest to the Language Graal: One VM to rule them... by
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...
TDC2018 | Trilha Java - The quest to the Language Graal: One VM to rule them...tdc-globalcode
132 views39 slides
CDI 2.0 (JSR 365) - Java Day Tokyo 2017 (English) by
CDI 2.0 (JSR 365) - Java Day Tokyo 2017 (English)CDI 2.0 (JSR 365) - Java Day Tokyo 2017 (English)
CDI 2.0 (JSR 365) - Java Day Tokyo 2017 (English)Logico
1.4K views81 slides
Migrating your infrastructure to OpenStack - Avi Miller, Oracle by
Migrating your infrastructure to OpenStack - Avi Miller, OracleMigrating your infrastructure to OpenStack - Avi Miller, Oracle
Migrating your infrastructure to OpenStack - Avi Miller, OracleOpenStack
373 views28 slides

Similar to REST in an Async World(20)

TDC2018SP | Trilha Arq Java - Crie arquiteturas escalaveis, multi-language e ... by tdc-globalcode
TDC2018SP | Trilha Arq Java - Crie arquiteturas escalaveis, multi-language e ...TDC2018SP | Trilha Arq Java - Crie arquiteturas escalaveis, multi-language e ...
TDC2018SP | Trilha Arq Java - Crie arquiteturas escalaveis, multi-language e ...
tdc-globalcode68 views
Why MySQL High Availability Matters by Mark Swarbrick
Why MySQL High Availability MattersWhy MySQL High Availability Matters
Why MySQL High Availability Matters
Mark Swarbrick315 views
MySQL Shell - The DevOps Tool for MySQL by Miguel Araújo
MySQL Shell - The DevOps Tool for MySQLMySQL Shell - The DevOps Tool for MySQL
MySQL Shell - The DevOps Tool for MySQL
Miguel Araújo176 views
TDC2018 | Trilha Java - The quest to the Language Graal: One VM to rule them... by tdc-globalcode
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...
TDC2018 | Trilha Java - The quest to the Language Graal: One VM to rule them...
tdc-globalcode132 views
CDI 2.0 (JSR 365) - Java Day Tokyo 2017 (English) by Logico
CDI 2.0 (JSR 365) - Java Day Tokyo 2017 (English)CDI 2.0 (JSR 365) - Java Day Tokyo 2017 (English)
CDI 2.0 (JSR 365) - Java Day Tokyo 2017 (English)
Logico 1.4K views
Migrating your infrastructure to OpenStack - Avi Miller, Oracle by OpenStack
Migrating your infrastructure to OpenStack - Avi Miller, OracleMigrating your infrastructure to OpenStack - Avi Miller, Oracle
Migrating your infrastructure to OpenStack - Avi Miller, Oracle
OpenStack373 views
Building a Serverless State Service for the Cloud by Edward Burns
Building a Serverless State Service for the CloudBuilding a Serverless State Service for the Cloud
Building a Serverless State Service for the Cloud
Edward Burns472 views
MOUG17 Keynote: What's New from Oracle Database Development by Monica Li
MOUG17 Keynote: What's New from Oracle Database DevelopmentMOUG17 Keynote: What's New from Oracle Database Development
MOUG17 Keynote: What's New from Oracle Database Development
Monica Li1.6K views
Data Mobility for the Oracle Database by JWilliams and RGonzalez by Markus Michalewicz
Data Mobility for the Oracle Database by JWilliams and RGonzalezData Mobility for the Oracle Database by JWilliams and RGonzalez
Data Mobility for the Oracle Database by JWilliams and RGonzalez
Markus Michalewicz775 views
Trivadis TechEvent 2017 Leveraging the Oracle Cloud by Kris Bhanushali tech_e... by Trivadis
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 TechEvent 2017 Leveraging the Oracle Cloud by Kris Bhanushali tech_e...
Trivadis91 views
Democratizing Serverless—The Open Source Fn Project - Serverless Summit by CodeOps Technologies LLP
Democratizing Serverless—The Open Source Fn Project - Serverless SummitDemocratizing 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 by Sandesh Rao
NZOUG-GroundBreakers-2018 - Troubleshooting and Diagnosing 18c RACNZOUG-GroundBreakers-2018 - Troubleshooting and Diagnosing 18c RAC
NZOUG-GroundBreakers-2018 - Troubleshooting and Diagnosing 18c RAC
Sandesh Rao606 views
Building Modern Applications Using APIs, Microservices and Chatbots by Oracle Developers
Building Modern Applications Using APIs, Microservices and ChatbotsBuilding Modern Applications Using APIs, Microservices and Chatbots
Building Modern Applications Using APIs, Microservices and Chatbots
Oracle Developers3.2K views
Polyglot on the JVM with Graal (English) by Logico
Polyglot on the JVM with Graal (English)Polyglot on the JVM with Graal (English)
Polyglot on the JVM with Graal (English)
Logico 5.4K views
Time-series Analytics using Matrix Profile and SAX by SUPREET OBEROI
Time-series Analytics using Matrix Profile and SAXTime-series Analytics using Matrix Profile and SAX
Time-series Analytics using Matrix Profile and SAX
SUPREET OBEROI459 views
Modern Application Development for the Enterprise by Juarez Junior
Modern Application Development for the EnterpriseModern Application Development for the Enterprise
Modern Application Development for the Enterprise
Juarez Junior136 views
AIOUG : OTNYathra - Troubleshooting and Diagnosing Oracle Database 12.2 and O... by Sandesh Rao
AIOUG : OTNYathra - Troubleshooting and Diagnosing Oracle Database 12.2 and O...AIOUG : OTNYathra - Troubleshooting and Diagnosing Oracle Database 12.2 and O...
AIOUG : OTNYathra - Troubleshooting and Diagnosing Oracle Database 12.2 and O...
Sandesh Rao701 views
Polyglot on the JVM with Graal (Japanese) by Logico
Polyglot on the JVM with Graal (Japanese)Polyglot on the JVM with Graal (Japanese)
Polyglot on the JVM with Graal (Japanese)
Logico 3.2K views
Harnessing the Power of Optimizer Hints by Maria Colgan
Harnessing the Power of Optimizer HintsHarnessing the Power of Optimizer Hints
Harnessing the Power of Optimizer Hints
Maria Colgan10.5K views

More from David Delabassee

JVMs in Containers - Best Practices by
JVMs in Containers - Best PracticesJVMs in Containers - Best Practices
JVMs in Containers - Best PracticesDavid Delabassee
726 views37 slides
JVMs in Containers by
JVMs in ContainersJVMs in Containers
JVMs in ContainersDavid Delabassee
1.3K views38 slides
Serverless Java Challenges & Triumphs by
Serverless Java Challenges & TriumphsServerless Java Challenges & Triumphs
Serverless Java Challenges & TriumphsDavid Delabassee
1.2K views46 slides
Serverless Java - Challenges and Triumphs by
Serverless Java - Challenges and TriumphsServerless Java - Challenges and Triumphs
Serverless Java - Challenges and TriumphsDavid Delabassee
282 views41 slides
Randstad Docker meetup - Serverless by
Randstad Docker meetup - ServerlessRandstad Docker meetup - Serverless
Randstad Docker meetup - ServerlessDavid Delabassee
322 views37 slides
Java Serverless in Action - Voxxed Banff by
Java Serverless in Action - Voxxed BanffJava Serverless in Action - Voxxed Banff
Java Serverless in Action - Voxxed BanffDavid Delabassee
232 views22 slides

More from David Delabassee(20)

Serverless Java Challenges & Triumphs by David Delabassee
Serverless Java Challenges & TriumphsServerless Java Challenges & Triumphs
Serverless Java Challenges & Triumphs
David Delabassee1.2K views
Serverless Java - Challenges and Triumphs by David Delabassee
Serverless Java - Challenges and TriumphsServerless Java - Challenges and Triumphs
Serverless Java - Challenges and Triumphs
David Delabassee282 views
Java Serverless in Action - Voxxed Banff by David Delabassee
Java Serverless in Action - Voxxed BanffJava Serverless in Action - Voxxed Banff
Java Serverless in Action - Voxxed Banff
David Delabassee232 views
HTTP/2 comes to Java (Dec. 2015 version) by David Delabassee
HTTP/2 comes to Java (Dec. 2015 version)HTTP/2 comes to Java (Dec. 2015 version)
HTTP/2 comes to Java (Dec. 2015 version)
David Delabassee690 views
EJB and CDI - Alignment and Strategy by David Delabassee
EJB and CDI - Alignment and StrategyEJB and CDI - Alignment and Strategy
EJB and CDI - Alignment and Strategy
David Delabassee31.9K views
Java EE 8 - What’s new on the Web front by David Delabassee
Java EE 8 - What’s new on the Web frontJava EE 8 - What’s new on the Web front
Java EE 8 - What’s new on the Web front
David Delabassee960 views
Java EE 8 Adopt a JSR : JSON-P 1.1 & MVC 1.0 by David Delabassee
Java EE 8 Adopt a JSR : JSON-P 1.1 & MVC 1.0Java 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 Delabassee1.8K views
Java EE 8 - An instant snapshot by David Delabassee
Java EE 8 - An instant snapshot Java EE 8 - An instant snapshot
Java EE 8 - An instant snapshot
David Delabassee10.7K views
HTTP/2 Comes to Java - What Servlet 4.0 Means to You by David Delabassee
HTTP/2 Comes to Java - What Servlet 4.0 Means to YouHTTP/2 Comes to Java - What Servlet 4.0 Means to You
HTTP/2 Comes to Java - What Servlet 4.0 Means to You
David Delabassee13.8K views

Recently uploaded

2023-November-Schneider Electric-Meetup-BCN Admin Group.pptx by
2023-November-Schneider Electric-Meetup-BCN Admin Group.pptx2023-November-Schneider Electric-Meetup-BCN Admin Group.pptx
2023-November-Schneider Electric-Meetup-BCN Admin Group.pptxanimuscrm
15 views19 slides
EV Charging App Case by
EV Charging App Case EV Charging App Case
EV Charging App Case iCoderz Solutions
8 views1 slide
Agile 101 by
Agile 101Agile 101
Agile 101John Valentino
9 views20 slides
Team Transformation Tactics for Holistic Testing and Quality (Japan Symposium... by
Team Transformation Tactics for Holistic Testing and Quality (Japan Symposium...Team Transformation Tactics for Holistic Testing and Quality (Japan Symposium...
Team Transformation Tactics for Holistic Testing and Quality (Japan Symposium...Lisi Hocke
35 views124 slides
FIMA 2023 Neo4j & FS - Entity Resolution.pptx by
FIMA 2023 Neo4j & FS - Entity Resolution.pptxFIMA 2023 Neo4j & FS - Entity Resolution.pptx
FIMA 2023 Neo4j & FS - Entity Resolution.pptxNeo4j
12 views26 slides
Myths and Facts About Hospice Care: Busting Common Misconceptions by
Myths and Facts About Hospice Care: Busting Common MisconceptionsMyths and Facts About Hospice Care: Busting Common Misconceptions
Myths and Facts About Hospice Care: Busting Common MisconceptionsCare Coordinations
6 views1 slide

Recently uploaded(20)

2023-November-Schneider Electric-Meetup-BCN Admin Group.pptx by animuscrm
2023-November-Schneider Electric-Meetup-BCN Admin Group.pptx2023-November-Schneider Electric-Meetup-BCN Admin Group.pptx
2023-November-Schneider Electric-Meetup-BCN Admin Group.pptx
animuscrm15 views
Team Transformation Tactics for Holistic Testing and Quality (Japan Symposium... by Lisi Hocke
Team Transformation Tactics for Holistic Testing and Quality (Japan Symposium...Team Transformation Tactics for Holistic Testing and Quality (Japan Symposium...
Team Transformation Tactics for Holistic Testing and Quality (Japan Symposium...
Lisi Hocke35 views
FIMA 2023 Neo4j & FS - Entity Resolution.pptx by Neo4j
FIMA 2023 Neo4j & FS - Entity Resolution.pptxFIMA 2023 Neo4j & FS - Entity Resolution.pptx
FIMA 2023 Neo4j & FS - Entity Resolution.pptx
Neo4j12 views
Myths and Facts About Hospice Care: Busting Common Misconceptions by Care Coordinations
Myths and Facts About Hospice Care: Busting Common MisconceptionsMyths and Facts About Hospice Care: Busting Common Misconceptions
Myths and Facts About Hospice Care: Busting Common Misconceptions
Copilot Prompting Toolkit_All Resources.pdf by Riccardo Zamana
Copilot Prompting Toolkit_All Resources.pdfCopilot Prompting Toolkit_All Resources.pdf
Copilot Prompting Toolkit_All Resources.pdf
Riccardo Zamana11 views
Fleet Management Software in India by Fleetable
Fleet Management Software in India Fleet Management Software in India
Fleet Management Software in India
Fleetable12 views
Gen Apps on Google Cloud PaLM2 and Codey APIs in Action by Márton Kodok
Gen Apps on Google Cloud PaLM2 and Codey APIs in ActionGen Apps on Google Cloud PaLM2 and Codey APIs in Action
Gen Apps on Google Cloud PaLM2 and Codey APIs in Action
Márton Kodok11 views
Quality Engineer: A Day in the Life by John Valentino
Quality Engineer: A Day in the LifeQuality Engineer: A Day in the Life
Quality Engineer: A Day in the Life
John Valentino6 views
Introduction to Git Source Control by John Valentino
Introduction to Git Source ControlIntroduction to Git Source Control
Introduction to Git Source Control
John Valentino5 views
20231129 - Platform @ localhost 2023 - Application-driven infrastructure with... by sparkfabrik
20231129 - Platform @ localhost 2023 - Application-driven infrastructure with...20231129 - Platform @ localhost 2023 - Application-driven infrastructure with...
20231129 - Platform @ localhost 2023 - Application-driven infrastructure with...
sparkfabrik8 views
Generic or specific? Making sensible software design decisions by Bert Jan Schrijver
Generic or specific? Making sensible software design decisionsGeneric or specific? Making sensible software design decisions
Generic or specific? Making sensible software design decisions
Bootstrapping vs Venture Capital.pptx by Zeljko Svedic
Bootstrapping vs Venture Capital.pptxBootstrapping vs Venture Capital.pptx
Bootstrapping vs Venture Capital.pptx
Zeljko Svedic12 views
Navigating container technology for enhanced security by Niklas Saari by Metosin Oy
Navigating container technology for enhanced security by Niklas SaariNavigating container technology for enhanced security by Niklas Saari
Navigating container technology for enhanced security by Niklas Saari
Metosin Oy14 views

REST in an Async World