SlideShare une entreprise Scribd logo
1  sur  46
How to bake reactive
behavior into your Java EE
applications
Ondrej Mihályi
@OMihalyi
@OMihalyi
AgendaAgenda
➢
What is a reactive app
➢
Support in Java EE 7
➢
Java 8 joins the game
➢
Payara Micro additions
➢
Live demo
➢
Common pitfalls
@OMihalyi
Ondrej
Mihályi
Web:
itblog.inginea.eu
Twitter:
Ondrej
Mihályi
Web:
itblog.inginea.eu
Twitter:
Payara suppor
engineer
Java EE developer
Java EE lecturer
Java blogger
Scrummaster
@OMihalyi
Reactive applicationReactive application
@OMihalyi
Possible in Enterprise?Possible in Enterprise?
New tools and frameworks
➔
High risks and costs
Fully reactive approach
➔
High cost of development
➔
Harder to avoid and track bugs
Advice → reactive where it’s worth
→ leave the door open for future
@OMihalyi
Java EE leaves the door openJava EE leaves the door open
Established and wide-spread
– Built with resilience in mind (Transactions)
– Messaging is first-class citizen (JMS)
Continuous improvements
– Asynchronous API, thread-management
– Scalability improvements (JCache)
– Portable CDI extensions
@OMihalyi
Traditional approachTraditional approach
Request started
→ external resource required (DB, WS, files)
→ request external resource
→ external resource is slow
→ what do we do?
We SIMPLY wait…
@OMihalyi
Traditional approachTraditional approach
We SIMPLY wait…
Simple
Thread-safe
Sufficient when waiting time is
negligible
@OMihalyi
Traditional approachTraditional approach
Blocking calls:
JDBC:
ResultSet rs =
stmt.executeQuery(q);
@OMihalyi
Traditional approachTraditional approach
Blocking calls:
JPA:
List r =
query.getResultList();
Servlet:
response.getWriter()
.print(s);
@OMihalyi
Traditional approachTraditional approach
Blocking design:
– Servlet filters
– Interceptors
– JSF lifecycle
@OMihalyi
Spawn a separate threadSpawn a separate thread
Idea:
– Blocking call in a new thread
– Do something while waiting
– Join the thread and retrieve results
– Fail after timeout vs. block infinitely
@OMihalyi
java.util.concurrent.Futurejava.util.concurrent.Future
Solution in Java world (since Java 5)
@Asynchronous methods since Java EE 6
– Solves the problem for fire-and-forget
– Still drawbacks when result needed
●
Complexity – keep asking “Are you ready?”
●
Requires one more thread
– blocked when nothing to do while waiting
@OMihalyi
@Asynchronous@Asynchronous
Any EJB method or all methods of an EJB
Executes in another thread in pool
Fire-and-forget with void result
Return result as a Future
– Future not efficient enough, we’ll improve later
@OMihalyi
@Asynchronous - Fire-and-
forget
@Asynchronous - Fire-and-
forget
@Asynchronous
void fireAndForget
(String message)
{
… // long-running task
}
@OMihalyi
Non-blocking API in Java EE 7Non-blocking API in Java EE 7
AsyncContext in Servlet (since 3.0, Java EE 6)
// get context for another thread
AsyncContext ctx =
req.startAsync();
AsyncContext
.getResponse()
.getOutputStream()…
ctx.complete();
@OMihalyi
Non-blocking API in Java EE 7Non-blocking API in Java EE 7
AsyncContext in Servlet
AsyncContext ctx =
req.startAsync();
AsyncContext // build response (in any thread)
.getResponse()
.getOutputStream()…
// finish (in new thread)
ctx.complete();
@OMihalyi
Non-blocking API in Java EE 7Non-blocking API in Java EE 7
AsyncContext in Servlet
– Requires to turn on async support
●
Using @WebServlet annotation
●
In web.xml descriptor
@WebServlet
(asyncSupported=true)
@OMihalyi
Non-blocking API in Java EE 7Non-blocking API in Java EE 7
Async IO in Servlet 3.1 (Java EE 7)
– Non-blocking reading of multi-part form
– Non-blocking writing of response body
Non-blocking IO in Java (NIO)
– to read HTML from files
@OMihalyi
Non-blocking APINon-blocking API
JAX-RS AsyncResponse
@Suspended@GET
void get(@Suspended
AsyncResponse r)
…
// in another thread
response.resume("OK");
@OMihalyi
Non-blocking APINon-blocking API
JAX-RS AsyncResponse
@Suspendedvoid get(@Suspended
AsyncResponse response)
…
// in another thread
response
.resume("OK");
@OMihalyi
Non-blocking APINon-blocking API
JAX-RS async client
resourceTarget
.request(MediaType.TEXT_PLAIN)
.async()
.get(new
InvocationCallback
() { … });
@OMihalyi
CDI events + @AsynchronousCDI events + @Asynchronous
CDI events decouple components
– one-way communication
– handlers triggered in the same thread
→ emitter is blocked
Handlers are asynchronous EJB methods
– triggered in anyther thread
→ emitter not blocked
@OMihalyi
@Inject
Event<MyEvent> ev;
…
ev.fire(new MyEvent());
…
@Asynchronous
void handle(@Observes
MyEvent ev) { … }
@OMihalyi
Summary of approachesSummary of approaches
Traditional blocking API
– Easy to use, halts execution until finished
→→
@OMihalyi
Summary of approachesSummary of approaches
Traditional blocking API
– Easy to use, halts execution until finished
Asynchronous call with Future
– not blocking, +1 thread
Asynchronous call with callback
– Not blocking, 1 thread at a time, callback hell
@OMihalyi
Java 8Java 8
CompletableFuture (CompletionStage)
– Chain callbacks (like promises)
– Execute in the same or another thread
● thenRun(), thenRunAsync(), …
● thenCompose(),…
– Complete execution in any thread at any time
● completableFuture.complete()
thenComposeAsync()
@OMihalyi
thenComposeAsync()thenComposeAsync()
CompletableFuture<String>
cf = new
CompletableFuture<>();
…
cf.thenComposeAsync( r ->
return callThatReturnsCF(r);
), executor)
…
cf.complete(awaitResult())
@OMihalyi
thenComposeAsync()thenComposeAsync()
…
cf.thenComposeAsync(
r -> returnsCF(r)
), executor)
.thenComposeAsync(…
…
cf.complete(r);
@OMihalyi
Java EE + Java 8Java EE + Java 8
Future → CompletableFuture ?
– No, not compatible
Callbacks → CompletableFuture
– callback triggers cf.complete()
Pass CF as additional parameter
@OMihalyi
Pass CF as additional parameterPass CF as additional parameter
void asyncCall(CompletableFuture cf) {
… cf.complete(result);
}
… cf = new CompletableFuture<String>();
asyncCall(cf);
cf.thenComposeAsync(
result -> … , executor);
@OMihalyi
Use managed executorsUse managed executors
CF async methods use ForkJoinPool
– Not managed by Java EE
Always use a managed executor
@Resource
ManagedExecutorService
executor;
@OMihalyi
Other parts of being ReactiveOther parts of being Reactive
We’ve shown responsive API
The other 3 reactive concepts:
– Resilience
– Messaging
– Elasticity
@OMihalyi
ResilienceResilience
Responsive in the face of failures
Server clusters and transaction isolation
Load balancer in front
Microservices (embedded server)
… reduce single points of failure
@OMihalyi
Payara MicroPayara Micro
Application server as executable JAR
Runs WAR apps from command line
automatic and elastic clustering
→ spawn many micro services dynamically
→ replication using distributed cache
→ shared 60MB runtime, 40MB in heap
www.payara.fish
→ → V
@OMihalyi
Messaging in Java EEMessaging in Java EE
JMS – traditional solution
– Topics, Queues, Persistence,
Transactional, Repeated delivery
– Simplified API in Java EE 7
●
some bioler-plate still necessary
@OMihalyi
Why not make it even simpler?
@Inject @Outbound
Event<MyMsg> ev;
// handle in different JVM
void handle(@Observes
@Inbound MyMsg ev) {
… }
@OMihalyi
Payara Micro event busPayara Micro event bus
events handled by any distributed node
– Asynchronous (reactive) micro services
– No need for service registry
On top of CDI events, just 2 qualifiers
– @Outbound event, @Inbound observer
Uses Hazelcast distributed executor
@OMihalyi
Elasticity in Java EEElasticity in Java EE
Weakest point of Java EE specs
– Clusters do not scale dynamically
Many provider-specific solutions
JCache JSR – targets Java EE 8
@OMihalyi
JCacheJCache
Standard Java API for caching
Distributed
API and CDI binding
Supported by many cache providers
Built in to Payara Server and Payara Micro
@OMihalyi
@Inject MyCache cache;
…
value = cache.get(key);
…
@CacheResult
Object get(
@CacheKey Object key)
JCache CDI bindingJCache CDI binding
@OMihalyi
mycache.put(key, value);
…
@CachePut
void put(
@CacheKey Object key,
@CacheValue Object v)
{ // body can be empty }
JCache CDI bindingJCache CDI binding
@OMihalyi
Dynamic scalingDynamic scaling
Just run repeatedly
– binds to a free port to avoid port collisions
All instances autoconnect to a cluster
– Even across network (multicast)
java -jar payara-micro.java
--deploy app.war
--autoBindHttp
@OMihalyi
Payara Micro examplePayara Micro example
web service on single node, computation
service scaled to multiple nodes
– Web service fires an @Outbound event
– Computation started on a computation node
●
Synchronisation using Jcache API
– An event with result fired
– Observed by web service and returned
@OMihalyi
Fully reactive comes at a greater cost
– Dealing with threads, hard to track origin,
communication overhead
Don’t over-engineer, but leave doors open
Java EE enables gradual improvement
General adviceGeneral advice
@OMihalyi
Questions?Questions?
Thank you

Contenu connexe

Tendances

Java EE 7: Boosting Productivity and Embracing HTML5
Java EE 7: Boosting Productivity and Embracing HTML5Java EE 7: Boosting Productivity and Embracing HTML5
Java EE 7: Boosting Productivity and Embracing HTML5
Arun Gupta
 
Web Tech Java Servlet Update1
Web Tech   Java Servlet Update1Web Tech   Java Servlet Update1
Web Tech Java Servlet Update1
vikram singh
 
Advanced java programming-contents
Advanced java programming-contentsAdvanced java programming-contents
Advanced java programming-contents
Self-Employed
 

Tendances (19)

Threads and concurrency in Java 1.5
Threads and concurrency in Java 1.5Threads and concurrency in Java 1.5
Threads and concurrency in Java 1.5
 
Rapid Network Application Development with Apache MINA
Rapid Network Application Development with Apache MINARapid Network Application Development with Apache MINA
Rapid Network Application Development with Apache MINA
 
Introduction to Node.js Platform
Introduction to Node.js PlatformIntroduction to Node.js Platform
Introduction to Node.js Platform
 
What's New in Java 8
What's New in Java 8What's New in Java 8
What's New in Java 8
 
Java EE 7: Boosting Productivity and Embracing HTML5
Java EE 7: Boosting Productivity and Embracing HTML5Java EE 7: Boosting Productivity and Embracing HTML5
Java EE 7: Boosting Productivity and Embracing HTML5
 
Modern Java Concurrency
Modern Java ConcurrencyModern Java Concurrency
Modern Java Concurrency
 
Java concurrency in practice
Java concurrency in practiceJava concurrency in practice
Java concurrency in practice
 
Vert.x vs akka
Vert.x vs akkaVert.x vs akka
Vert.x vs akka
 
Java Concurrency, Memory Model, and Trends
Java Concurrency, Memory Model, and TrendsJava Concurrency, Memory Model, and Trends
Java Concurrency, Memory Model, and Trends
 
Java servlet technology
Java servlet technologyJava servlet technology
Java servlet technology
 
Knowledge Sharing : Java Servlet
Knowledge Sharing : Java ServletKnowledge Sharing : Java Servlet
Knowledge Sharing : Java Servlet
 
Servlets
ServletsServlets
Servlets
 
Intrinsic Methods in HotSpot VM
Intrinsic Methods in HotSpot VMIntrinsic Methods in HotSpot VM
Intrinsic Methods in HotSpot VM
 
Java 9, JShell, and Modularity
Java 9, JShell, and ModularityJava 9, JShell, and Modularity
Java 9, JShell, and Modularity
 
Java Servlet
Java Servlet Java Servlet
Java Servlet
 
Web Tech Java Servlet Update1
Web Tech   Java Servlet Update1Web Tech   Java Servlet Update1
Web Tech Java Servlet Update1
 
Java Performance Tuning
Java Performance TuningJava Performance Tuning
Java Performance Tuning
 
Java EE 7, what's in it for me?
Java EE 7, what's in it for me?Java EE 7, what's in it for me?
Java EE 7, what's in it for me?
 
Advanced java programming-contents
Advanced java programming-contentsAdvanced java programming-contents
Advanced java programming-contents
 

En vedette

Ημερολόγιο Δραστηριοτήτων Π.Ο. 2015-16
Ημερολόγιο Δραστηριοτήτων Π.Ο. 2015-16Ημερολόγιο Δραστηριοτήτων Π.Ο. 2015-16
Ημερολόγιο Δραστηριοτήτων Π.Ο. 2015-16
Ioannis Kevrekidis
 
Presentación sobre el hiv
Presentación sobre el hivPresentación sobre el hiv
Presentación sobre el hiv
luzdelalba82
 

En vedette (20)

Social metadata on the web
Social metadata on the webSocial metadata on the web
Social metadata on the web
 
University Talks #2 | Елена Шилова — Свет и безопасность
University Talks #2 | Елена Шилова — Свет и безопасностьUniversity Talks #2 | Елена Шилова — Свет и безопасность
University Talks #2 | Елена Шилова — Свет и безопасность
 
Ημερολόγιο Δραστηριοτήτων Π.Ο. 2015-16
Ημερολόγιο Δραστηριοτήτων Π.Ο. 2015-16Ημερολόγιο Δραστηριοτήτων Π.Ο. 2015-16
Ημερολόγιο Δραστηριοτήτων Π.Ο. 2015-16
 
Presentación sobre el hiv
Presentación sobre el hivPresentación sobre el hiv
Presentación sobre el hiv
 
Presentation for Catalyst workshop, with notes
Presentation for Catalyst workshop, with notesPresentation for Catalyst workshop, with notes
Presentation for Catalyst workshop, with notes
 
University Talks #1 | Екатерина Мамонтова - Счастье не поддается инфляции
University Talks #1 | Екатерина Мамонтова - Счастье не поддается инфляцииUniversity Talks #1 | Екатерина Мамонтова - Счастье не поддается инфляции
University Talks #1 | Екатерина Мамонтова - Счастье не поддается инфляции
 
STORYTELLING
STORYTELLINGSTORYTELLING
STORYTELLING
 
Bozza della Legge di Bilancio 2017
Bozza della Legge di Bilancio 2017 Bozza della Legge di Bilancio 2017
Bozza della Legge di Bilancio 2017
 
Somar com o outono I
Somar com o outono I Somar com o outono I
Somar com o outono I
 
University Talks #2 | Анастасия Чекрыжова — Свежий взгляд на современное иску...
University Talks #2 | Анастасия Чекрыжова — Свежий взгляд на современное иску...University Talks #2 | Анастасия Чекрыжова — Свежий взгляд на современное иску...
University Talks #2 | Анастасия Чекрыжова — Свежий взгляд на современное иску...
 
Piracy
PiracyPiracy
Piracy
 
Social Media Trends 2014
Social Media Trends 2014Social Media Trends 2014
Social Media Trends 2014
 
Becoming a Systematic Entrepreneur?
Becoming a Systematic Entrepreneur?Becoming a Systematic Entrepreneur?
Becoming a Systematic Entrepreneur?
 
Meilleures photos national geo 2015
Meilleures photos national geo 2015Meilleures photos national geo 2015
Meilleures photos national geo 2015
 
Keynote 4: Leadership and Education for Sustainable Development, Philip Vaughter
Keynote 4: Leadership and Education for Sustainable Development, Philip VaughterKeynote 4: Leadership and Education for Sustainable Development, Philip Vaughter
Keynote 4: Leadership and Education for Sustainable Development, Philip Vaughter
 
Media, Technology and Consumer Trends to Watch in 2016
Media, Technology and Consumer Trends to Watch in 2016Media, Technology and Consumer Trends to Watch in 2016
Media, Technology and Consumer Trends to Watch in 2016
 
Proyecto "Song for a change"
Proyecto "Song for a change"Proyecto "Song for a change"
Proyecto "Song for a change"
 
Exakat for PHP : smart code reviewing engine
Exakat for PHP : smart code reviewing engineExakat for PHP : smart code reviewing engine
Exakat for PHP : smart code reviewing engine
 
University Talks #1 | Никита Булгаков и Алексей Ушаков - Дзен и искусство пои...
University Talks #1 | Никита Булгаков и Алексей Ушаков - Дзен и искусство пои...University Talks #1 | Никита Булгаков и Алексей Ушаков - Дзен и искусство пои...
University Talks #1 | Никита Булгаков и Алексей Ушаков - Дзен и искусство пои...
 
EyeEM
EyeEMEyeEM
EyeEM
 

Similaire à How to bake reactive behavior into your Java EE applications

Similaire à How to bake reactive behavior into your Java EE applications (20)

How to bake reactive behavior into your Java EE applications
How to bake reactive behavior into your Java EE applicationsHow to bake reactive behavior into your Java EE applications
How to bake reactive behavior into your Java EE applications
 
How to bake reactive behavior into your Java EE applications
How to bake reactive behavior into your Java EE applicationsHow to bake reactive behavior into your Java EE applications
How to bake reactive behavior into your Java EE applications
 
JDD 2016 - Ondrej Mihalyi - How to bake reactive behavior into your Java EE ...
JDD 2016 - Ondrej Mihalyi -  How to bake reactive behavior into your Java EE ...JDD 2016 - Ondrej Mihalyi -  How to bake reactive behavior into your Java EE ...
JDD 2016 - Ondrej Mihalyi - How to bake reactive behavior into your Java EE ...
 
How to bake reactive behavior into your Java EE applications
How to bake reactive behavior into your Java EE applicationsHow to bake reactive behavior into your Java EE applications
How to bake reactive behavior into your Java EE applications
 
How to bake_reactive_behavior_into_your_java_ee_applications
How to bake_reactive_behavior_into_your_java_ee_applicationsHow to bake_reactive_behavior_into_your_java_ee_applications
How to bake_reactive_behavior_into_your_java_ee_applications
 
Everything you wanted to know about writing async, concurrent http apps in java
Everything you wanted to know about writing async, concurrent http apps in java Everything you wanted to know about writing async, concurrent http apps in java
Everything you wanted to know about writing async, concurrent http apps in java
 
Concurrent Programming in Java
Concurrent Programming in JavaConcurrent Programming in Java
Concurrent Programming in Java
 
Ruby vs Node ShiningRay Shanghai
Ruby vs Node ShiningRay ShanghaiRuby vs Node ShiningRay Shanghai
Ruby vs Node ShiningRay Shanghai
 
Async programming and python
Async programming and pythonAsync programming and python
Async programming and python
 
Here comes the Loom - Ya!vaConf.pdf
Here comes the Loom - Ya!vaConf.pdfHere comes the Loom - Ya!vaConf.pdf
Here comes the Loom - Ya!vaConf.pdf
 
S314168 - What's New in Enterprise Java Bean Technology @ JavaOne Brazil 2010
S314168 - What's New in Enterprise Java Bean Technology @ JavaOne Brazil 2010S314168 - What's New in Enterprise Java Bean Technology @ JavaOne Brazil 2010
S314168 - What's New in Enterprise Java Bean Technology @ JavaOne Brazil 2010
 
Play Framework
Play FrameworkPlay Framework
Play Framework
 
Don't Wait! Develop responsive applications with Java EE7 instead
Don't Wait! Develop responsive applications with Java EE7 insteadDon't Wait! Develop responsive applications with Java EE7 instead
Don't Wait! Develop responsive applications with Java EE7 instead
 
The art of concurrent programming
The art of concurrent programmingThe art of concurrent programming
The art of concurrent programming
 
Java Course 15: Ant, Scripting, Spring, Hibernate
Java Course 15: Ant, Scripting, Spring, HibernateJava Course 15: Ant, Scripting, Spring, Hibernate
Java Course 15: Ant, Scripting, Spring, Hibernate
 
No callbacks, No Threads - Cooperative web servers in Ruby 1.9
No callbacks, No Threads - Cooperative web servers in Ruby 1.9No callbacks, No Threads - Cooperative web servers in Ruby 1.9
No callbacks, No Threads - Cooperative web servers in Ruby 1.9
 
Java util concurrent
Java util concurrentJava util concurrent
Java util concurrent
 
Back to the future with Java 7 (Geekout June/2011)
Back to the future with Java 7 (Geekout June/2011)Back to the future with Java 7 (Geekout June/2011)
Back to the future with Java 7 (Geekout June/2011)
 
Plack - LPW 2009
Plack - LPW 2009Plack - LPW 2009
Plack - LPW 2009
 
"Service Worker: Let Your Web App Feel Like a Native "
"Service Worker: Let Your Web App Feel Like a Native ""Service Worker: Let Your Web App Feel Like a Native "
"Service Worker: Let Your Web App Feel Like a Native "
 

Plus de Ondrej Mihályi

Plus de Ondrej Mihályi (8)

Easily scale enterprise applications using distributed data grids
Easily scale enterprise applications using distributed data gridsEasily scale enterprise applications using distributed data grids
Easily scale enterprise applications using distributed data grids
 
Elastic and Cloud-ready Applications with Payara Micro
Elastic and Cloud-ready Applications with Payara MicroElastic and Cloud-ready Applications with Payara Micro
Elastic and Cloud-ready Applications with Payara Micro
 
Bed con - MicroProfile: A Quest for a lightweight and reactive Enterprise Ja...
Bed con - MicroProfile:  A Quest for a lightweight and reactive Enterprise Ja...Bed con - MicroProfile:  A Quest for a lightweight and reactive Enterprise Ja...
Bed con - MicroProfile: A Quest for a lightweight and reactive Enterprise Ja...
 
Easily scale enterprise applications using distributed data grids
Easily scale enterprise applications using distributed data gridsEasily scale enterprise applications using distributed data grids
Easily scale enterprise applications using distributed data grids
 
Business layer and transactions
Business layer and transactionsBusiness layer and transactions
Business layer and transactions
 
Working with jpa
Working with jpaWorking with jpa
Working with jpa
 
Maven in Java EE project
Maven in Java EE projectMaven in Java EE project
Maven in Java EE project
 
Java EE web project introduction
Java EE web project introductionJava EE web project introduction
Java EE web project introduction
 

Dernier

introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
VishalKumarJha10
 

Dernier (20)

Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
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
 
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
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
 
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
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdfAzure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
 
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 🔝✔️✔️
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
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
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
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 🔝✔️✔️
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 

How to bake reactive behavior into your Java EE applications

Notes de l'éditeur

  1. dfds
  2. Why apps are not inherently like this? - because of traditionally blocking API and monolithic architectures - because it is hard (for programmers) Solutions - Completely new frameworks (Vert.x) - learn everything from scratch - not easy to reuse knowledge - Improve existing approaches - add non-blocking API - continuous improvements where it adds most value
  3. Established → small costs of upgrade or redesign Improvements → simplifications (EJB3, CDI, JMS 2.0 simplified API, managed executor)
  4. Established → small costs of upgrade or redesign Improvements → simplifications (EJB3, CDI, JMS 2.0, managed executor)
  5. Established → small costs of upgrade or redesign Improvements → simplifications (EJB3, CDI, JMS 2.0, managed executor)
  6. Established → small costs of upgrade or redesign Improvements → simplifications (EJB3, CDI, JMS 2.0, managed executor)
  7. Established → small costs of upgrade or redesign Improvements → simplifications (EJB3, CDI, JMS 2.0, managed executor)
  8. Established → small costs of upgrade or redesign Improvements → simplifications (EJB3, CDI, JMS 2.0, managed executor)
  9. Established → small costs of upgrade or redesign Improvements → simplifications (EJB3, CDI, JMS 2.0, managed executor)
  10. Established → small costs of upgrade or redesign Improvements → simplifications (EJB3, CDI, JMS 2.0, managed executor)
  11. Established → small costs of upgrade or redesign Improvements → simplifications (EJB3, CDI, JMS 2.0, managed executor)
  12. Established → small costs of upgrade or redesign Improvements → simplifications (EJB3, CDI, JMS 2.0, managed executor)
  13. Established → small costs of upgrade or redesign Improvements → simplifications (EJB3, CDI, JMS 2.0, managed executor)
  14. Established → small costs of upgrade or redesign Improvements → simplifications (EJB3, CDI, JMS 2.0, managed executor)
  15. Established → small costs of upgrade or redesign Improvements → simplifications (EJB3, CDI, JMS 2.0, managed executor)
  16. Established → small costs of upgrade or redesign Improvements → simplifications (EJB3, CDI, JMS 2.0, managed executor)
  17. Established → small costs of upgrade or redesign Improvements → simplifications (EJB3, CDI, JMS 2.0, managed executor)
  18. Established → small costs of upgrade or redesign Improvements → simplifications (EJB3, CDI, JMS 2.0, managed executor)
  19. Established → small costs of upgrade or redesign Improvements → simplifications (EJB3, CDI, JMS 2.0, managed executor)
  20. Established → small costs of upgrade or redesign Improvements → simplifications (EJB3, CDI, JMS 2.0, managed executor)
  21. Established → small costs of upgrade or redesign Improvements → simplifications (EJB3, CDI, JMS 2.0, managed executor)
  22. Established → small costs of upgrade or redesign Improvements → simplifications (EJB3, CDI, JMS 2.0, managed executor)
  23. Established → small costs of upgrade or redesign Improvements → simplifications (EJB3, CDI, JMS 2.0, managed executor)
  24. Established → small costs of upgrade or redesign Improvements → simplifications (EJB3, CDI, JMS 2.0, managed executor)
  25. Established → small costs of upgrade or redesign Improvements → simplifications (EJB3, CDI, JMS 2.0, managed executor)
  26. Established → small costs of upgrade or redesign Improvements → simplifications (EJB3, CDI, JMS 2.0, managed executor)
  27. Established → small costs of upgrade or redesign Improvements → simplifications (EJB3, CDI, JMS 2.0, managed executor)
  28. Established → small costs of upgrade or redesign Improvements → simplifications (EJB3, CDI, JMS 2.0, managed executor)
  29. Established → small costs of upgrade or redesign Improvements → simplifications (EJB3, CDI, JMS 2.0, managed executor)
  30. Established → small costs of upgrade or redesign Improvements → simplifications (EJB3, CDI, JMS 2.0, managed executor)
  31. Established → small costs of upgrade or redesign Improvements → simplifications (EJB3, CDI, JMS 2.0, managed executor)
  32. Established → small costs of upgrade or redesign Improvements → simplifications (EJB3, CDI, JMS 2.0, managed executor)
  33. Established → small costs of upgrade or redesign Improvements → simplifications (EJB3, CDI, JMS 2.0, managed executor)
  34. Established → small costs of upgrade or redesign Improvements → simplifications (EJB3, CDI, JMS 2.0, managed executor)
  35. Established → small costs of upgrade or redesign Improvements → simplifications (EJB3, CDI, JMS 2.0, managed executor)
  36. Established → small costs of upgrade or redesign Improvements → simplifications (EJB3, CDI, JMS 2.0, managed executor)
  37. Established → small costs of upgrade or redesign Improvements → simplifications (EJB3, CDI, JMS 2.0, managed executor)
  38. Established → small costs of upgrade or redesign Improvements → simplifications (EJB3, CDI, JMS 2.0, managed executor)
  39. Established → small costs of upgrade or redesign Improvements → simplifications (EJB3, CDI, JMS 2.0, managed executor)
  40. Established → small costs of upgrade or redesign Improvements → simplifications (EJB3, CDI, JMS 2.0, managed executor)
  41. Established → small costs of upgrade or redesign Improvements → simplifications (EJB3, CDI, JMS 2.0, managed executor)
  42. Established → small costs of upgrade or redesign Improvements → simplifications (EJB3, CDI, JMS 2.0, managed executor)