SlideShare une entreprise Scribd logo
1  sur  50
Télécharger pour lire hors ligne
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

Contenu connexe

Tendances

Tendances (20)

TLV - Whats new in MySQL 8
TLV - Whats new in MySQL 8TLV - Whats new in MySQL 8
TLV - Whats new in MySQL 8
 
Rootconf admin101
Rootconf admin101Rootconf 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...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 CloudJava @ 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...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 8JSON 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/16Performance 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 AI2018  Oracle Impact 발표자료: Oracle Enterprise AI
2018 Oracle Impact 발표자료: Oracle Enterprise AI
 
Aneez Hasan_Resume
Aneez Hasan_ResumeAneez Hasan_Resume
Aneez Hasan_Resume
 
Jfokus 2017 Oracle Dev Cloud and Containers
Jfokus 2017 Oracle Dev Cloud and ContainersJfokus 2017 Oracle Dev Cloud and Containers
Jfokus 2017 Oracle Dev Cloud and Containers
 
MySQL Devops Webinar
MySQL Devops WebinarMySQL Devops Webinar
MySQL Devops Webinar
 
Oracle databáze – Konsolidovaná Data Management Platforma
Oracle databáze – Konsolidovaná Data Management PlatformaOracle databáze – Konsolidovaná Data Management Platforma
Oracle databáze – Konsolidovaná Data Management Platforma
 
토드(Toad) 신제품 및 크로스 플랫폼 전략(1)
토드(Toad) 신제품 및 크로스 플랫폼 전략(1)토드(Toad) 신제품 및 크로스 플랫폼 전략(1)
토드(Toad) 신제품 및 크로스 플랫폼 전략(1)
 
The Future of Java and You
The Future of Java and YouThe Future of Java and You
The Future of Java and You
 
Introduction to MySQL InnoDB Cluster
Introduction to MySQL InnoDB ClusterIntroduction to MySQL InnoDB Cluster
Introduction to MySQL InnoDB Cluster
 
MySQL Innovation: from 5.7 to 8.0
MySQL Innovation:  from 5.7 to 8.0MySQL 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 CommunityMySQL 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 8What'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 businessCisco 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 !DataOps Barcelona - MySQL HA so easy... that's insane !
DataOps Barcelona - MySQL HA so easy... that's insane !
 

Similaire à REST in an Async World

Similaire à 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 ...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 MattersWhy MySQL High Availability Matters
Why MySQL High Availability Matters
 
MySQL Shell - The DevOps Tool for MySQL
MySQL Shell - The DevOps Tool for MySQLMySQL 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...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)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, OracleMigrating 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 CloudBuilding 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 DevelopmentMOUG17 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 RGonzalezData 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...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 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
NZOUG-GroundBreakers-2018 - Troubleshooting and Diagnosing 18c RACNZOUG-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 ChatbotsBuilding 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)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 SAXTime-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 EnterpriseModern Application Development for the Enterprise
Modern Application Development for the Enterprise
 
JCP 20 Year Anniversary
JCP 20 Year AnniversaryJCP 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...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)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 HintsHarnessing the Power of Optimizer Hints
Harnessing the Power of Optimizer Hints
 

Plus de David Delabassee

Plus de David Delabassee (20)

JVMs in Containers - Best Practices
JVMs in Containers - Best PracticesJVMs in Containers - Best Practices
JVMs in Containers - Best Practices
 
JVMs in Containers
JVMs in ContainersJVMs in Containers
JVMs in Containers
 
Serverless Java Challenges & Triumphs
Serverless Java Challenges & TriumphsServerless Java Challenges & Triumphs
Serverless Java Challenges & Triumphs
 
Serverless Java - Challenges and Triumphs
Serverless Java - Challenges and TriumphsServerless Java - Challenges and Triumphs
Serverless Java - Challenges and Triumphs
 
Randstad Docker meetup - Serverless
Randstad Docker meetup - ServerlessRandstad Docker meetup - Serverless
Randstad Docker meetup - Serverless
 
Java Serverless in Action - Voxxed Banff
Java Serverless in Action - Voxxed BanffJava Serverless in Action - Voxxed Banff
Java Serverless in Action - Voxxed Banff
 
Serverless Kotlin
Serverless KotlinServerless Kotlin
Serverless Kotlin
 
HTTP/2 comes to Java
HTTP/2 comes to JavaHTTP/2 comes to Java
HTTP/2 comes to Java
 
Java EE 8 - Work in progress
Java EE 8 - Work in progressJava 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)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 StrategyEJB and CDI - Alignment and Strategy
EJB and CDI - Alignment and Strategy
 
HTTP/2 Comes to Java
HTTP/2 Comes to JavaHTTP/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 frontJava 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 JavaHTTP/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.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
 
MVC 1.0 / JSR 371
MVC 1.0 / JSR 371MVC 1.0 / JSR 371
MVC 1.0 / JSR 371
 
Java EE 8 - An instant snapshot
Java EE 8 - An instant snapshot Java EE 8 - An instant snapshot
Java EE 8 - An instant snapshot
 
Avatar 2.0
Avatar 2.0Avatar 2.0
Avatar 2.0
 
Java EE 8 - An instant snapshot
Java EE 8 - An instant snapshotJava 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 YouHTTP/2 Comes to Java - What Servlet 4.0 Means to You
HTTP/2 Comes to Java - What Servlet 4.0 Means to You
 

Dernier

AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
VictorSzoltysek
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
masabamasaba
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
masabamasaba
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 

Dernier (20)

%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
%in Durban+277-882-255-28 abortion pills for sale in Durban
%in Durban+277-882-255-28 abortion pills for sale in Durban%in Durban+277-882-255-28 abortion pills for sale in Durban
%in Durban+277-882-255-28 abortion pills for sale in Durban
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
 
Generic or specific? Making sensible software design decisions
Generic or specific? Making sensible software design decisionsGeneric or specific? Making sensible software design decisions
Generic or specific? Making sensible software design decisions
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdf
 
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...
 
%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare
 

REST in an Async World