SlideShare a Scribd company logo
1 of 32
Download to read offline
Copyright © 2005 - 2014 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
Asynchronous OSGi – Promises for the masses Jun 2014
Asynchronous OSGi:
Promises for the masses
Tim Ward
http://www.paremus.com
info@paremus.com
Copyright © 2005 - 2014 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
Asynchronous OSGi – Promises for the masses Jun 2014
•Senior Consulting Engineer, Trainer and Architect at Paremus

•5 years at IBM developing WebSphere Application Server

• Container Implementations for Java EE and OSGi, including Blueprint, JPA, EJB and JTA

•OSGi Specification lead for JPA, Weaving Hooks and Asynchronous Services

•PMC member of the Apache Aries project

•Previous speaker at Java One, EclipseCon, Devoxx, Jazoon, JAX London,
OSGi Community Event...

•Author of Manning’s Enterprise OSGi in Action

•http://www.manning.com/cummins
Who is Tim Ward?
@TimothyWard
Copyright © 2005 - 2014 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
Asynchronous OSGi – Promises for the masses Jun 2014
What we’re going to cover
•Why is the World Going Asynchronous?

!
•Async Programming Primitives

!
•Making Synchronous Services Asynchronous

!
•Optimising Calls into Asynchronous Services

!
•Demo
Copyright © 2005 - 2014 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
Asynchronous OSGi – Promises for the masses Jun 2014
New OSGi Specifications
Last week the OSGi Core Release 6 Specification received final approval!
!
It’s available now at http://www.osgi.org/Specifications/HomePage!
!
!
The OSGi Board also approved a public draft of OSGi Enterprise Release 6!
!
Available at http://www.osgi.org/Specifications/Drafts!
!
This draft contains the specifications we’re going to be talking about!
NEW
Copyright © 2005 - 2014 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
Asynchronous OSGi – Promises for the masses Jun 2014
Why is the World Going Asynchronous?
Copyright © 2005 - 2014 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
Asynchronous OSGi – Promises for the masses Jun 2014
Origins of Asynchronous Programming
Asynchronous Programming concepts have been with us for a long time!
User Interface EventHandler callbacks
“must not block the UI thread!” 

The terms “Promise” and “Future” originate
from 1970s research papers

Proposed as mechanisms to handle
large-scale parallel execution 

Many peopler think of Async Programming as “recently popular”…
•Asynchronous systems offer better performance

•This does assume that there isn’t a single bottleneck!

!
•Asynchronous Distributed systems typically scale better

•Less time spent waiting for high-latency calls

•More reasonable failure characteristics

!
•Parallelism is easier to exploit

!
•Network Infrastructure is intrinsically asynchronous

•Network Engineers have been working this way for decades
Copyright © 2005 - 2014 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
Asynchronous OSGi – Promises for the masses Jun 2014
Advantages of Asynchronous Programming
100% 100%
Copyright © 2005 - 2014 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
Asynchronous OSGi – Promises for the masses Jun 2014
Problems with Asynchronous Programming
Human brains aren’t really designed to cope with asynchronous logic

•Thought processes tend to be “do A”, then “do B” then “the result is C”

•Asynchronous Programming is only useful if the benefits of using it
outweigh the extra cognitive overhead

!
Synchronous calls offer a natural “brake” in RPC

•Asynchronous “Event Storms” can overwhelm remote systems, even using
a single client thread.

!
Deadlocks are still possible, and can be hard to diagnose
Copyright © 2005 - 2014 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
Asynchronous OSGi – Promises for the masses Jun 2014
So what’s changed?
The latest asynchronous revolution seems to be sticking!
JavaScript has been a major
driver in the last 5-10 years, in a
single threaded environment.
Async is a necessity!

Multi-core is pervasive now,
request-level parallelism isn’t always
enough to max out hardware any
more
Commonly used OO languages are
becoming more “functional”

Java and C++ have added lambdas
Copyright © 2005 - 2014 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
Asynchronous OSGi – Promises for the masses Jun 2014
Async Programming Primitives
Copyright © 2005 - 2014 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
Asynchronous OSGi – Promises for the masses Jun 2014
Async Basics
The Promise is the primitive of Asynchronous Programming
Strictly, the OSGi (and most JavaScript) Promises are “Future” types as
they have no methods for resolving themselves

In both cases a Deferred type can create and resolve a default
Promise implementation
A “Promise” represents a delayed value that will be “resolved” in the future
“Resolving” a promise sets its value, or its failure

OSGi Promises are based on JavaScript
Promise concepts, but also significantly
influenced by Scala
Copyright © 2005 - 2014 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
Asynchronous OSGi – Promises for the masses Jun 2014
The OSGi Promise
The Promise Contract (based on JavaScript Promises)

•The Promise is resolved or failed with a single value, at most once

•Listener callbacks are called at most once

•Promises remember their state (including their resolution / failure value)

•Promises behave the same way regardless of whether they are already
resolved or resolved in the future.

!
Promises can be treated as a shareable value type

•Effectively immutable (unless you created it!)

•Thread safe

•No need to unwrap it…
Copyright © 2005 - 2014 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
Asynchronous OSGi – Promises for the masses Jun 2014
The Deferred
OSGi provides a default Promise implementation for clients to use

The Deferred is held by the provider of the Promise, and can be used to set
its value or failure

!
! ! final Deferred<Long> deferred = new Deferred<Long>();!
!
! ! new Thread() {!
! ! ! public void run() {!
! ! ! ! try {!
! ! ! ! ! Long total = service.calculateDifficultSum();!
! ! ! ! ! deferred.resolve(total);!
! ! ! ! } catch (Exception e) {!
! ! ! ! ! deferred.fail(e);!
! ! ! ! }!
! ! ! }!
! ! }.start();!
!
! ! Promise<Long> promise = deferred.getPromise();
Copyright © 2005 - 2014 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
Asynchronous OSGi – Promises for the masses Jun 2014
Promise Callbacks
Promises do support “synchronous” usage similar to Java’s Future

•isDone(), getValue(), getFailure()

•The getXxx() methods block

!
It’s better to use Promises with callbacks (never block, remember?)

•then(Success) or then(Success, Failure)!
!
Success and Failure are both SAM interfaces, suitable for Lambda usage

then((p) -> success(p.getValue()), !
! (p) -> fail(p.getFailure()));!
!
Callbacks should be fast - Success can return a Promise for longer tasks
Copyright © 2005 - 2014 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
Asynchronous OSGi – Promises for the masses Jun 2014
Chaining Promises
Basic chaining uses then(…), a new Promise is created that resolves when:

•the success callback returns null; or

•the success callback throws an error; or

•the Promise returned by the success callback resolves

!
Chaining allows you to compose sequences of events

•Promises are Monads

•Complex behaviours can be achieved without if/else branching

!
More complex functional chains are natively supported

•Filtering/Mapping values, recovering failures…
Copyright © 2005 - 2014 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
Asynchronous OSGi – Promises for the masses Jun 2014
The Promises utility class
The Promises type provides number of common functions

•Creating Promises that are already resolved or failed

•Very useful when mapping / recovering promises

!
Another useful utility is Promises.all(Promise…)

•It creates a “latch” Promise that resolves when all others are complete

•Good for final clean up, or for notifying users about aggregate tasks

!
Remember that chains and latches work even if a Promise is already resolved!
Copyright © 2005 - 2014 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
Asynchronous OSGi – Promises for the masses Jun 2014
A Chaining Example
Download an XML file, preferably from a mirror URL, and parse it using JAXB
! Promise<Library> promise = getMirror(libraryURL)!
! ! ! ! .fallbackTo(Promises.resolved(libraryURL))!
! ! ! ! .then((p) -> downloadFile(p.getValue()))!
! ! ! ! .map((p) -> (Library) JAXB.unmarshal(p, Library.class)));!
!
!
! public Promise<URL> getMirror(URL url)!
! ! throws Exception {!
! ! . . .!
! }!
! !
! public Promise<File> downloadFile(URL url) !
! ! throws Exception {!
! ! . . .!
! }!
Copyright © 2005 - 2014 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
Asynchronous OSGi – Promises for the masses Jun 2014
Making Synchronous Services
Asynchronous
Copyright © 2005 - 2014 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
Asynchronous OSGi – Promises for the masses Jun 2014
The OSGi service model
The OSGi service model is useful and widely used 

!
!
!
!
Service objects are obtained from the Service Registry and invoked

•The call semantics depend upon the Service API

•Most APIs are synchronous in operation
!
Consumer
!
Provider
Copyright © 2005 - 2014 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
Asynchronous OSGi – Promises for the masses Jun 2014
Question?
As a service client, how do I make an asynchronous call to a service?

•I can’t / don’t want to rewrite the service

•I’d prefer not to start threads or manage a thread pool

•I’d also like my code to stay as clean as possible

!
Ad-hoc solutions are messy, but have been the only choice up to now

!
Copyright © 2005 - 2014 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
Asynchronous OSGi – Promises for the masses Jun 2014
The Async Service - Requirements
•Allow arbitrary OSGi services to be called asynchronously

•The call must be transparent to the backing service, no opt-in required

!
•Must support methods that have a return value, as well as void

!
•Must not rely on generated source, client-local interfaces or reflection

•Source gets out of sync, and is hard to maintain

•Reflection is just ugly!

!
•Must allow services that are already asynchronous to “hook-in” to the model

•This does require opt-in
Copyright © 2005 - 2014 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
Asynchronous OSGi – Promises for the masses Jun 2014
Unit testing Mocks - Requirements
•Allow arbitrary Objects to be called, remembering the calls that are made

•The mocking must be transparent, no opt-in required

!
•Mocks must allow methods to return a specific value

!
•Must not rely on generated source, client-local interfaces or reflection

•The test code is using the real interfaces/objects

!
!
!
Notice any similarities?
Copyright © 2005 - 2014 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
Asynchronous OSGi – Promises for the masses Jun 2014
How to use the Async Service
To make asynchronous calls on a service you need an Async Mediator

! MyService mediated = async.mediate(myService);!
!
Services can be mediated from a ServiceReference or the service object

•ServiceReference is better because the mediator can track availability

!
Clients then use the mediated object to make a normal method call

•This records the call, just like a mock would in a test

!
To begin the asynchronous task you pass the return value to async.call(T)

! Promise<Long> p = async.call(mediated.pianosInNYC());!
Copyright © 2005 - 2014 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
Asynchronous OSGi – Promises for the masses Jun 2014
How to use the Async Service (2)
Void methods can be slightly trickier

•There’s a no-args version of call() which returns Promise<?>

•Promises for void methods resolve with null when they complete

!
If you don’t need a Promise, then consider fire-and-forget

•The execute() method doesn’t create a Promise

•Fire-and-forget can be much more efficient*

!
The Async Service is Thread Safe, but mediators may not be

•Never share the Async object between Bundles, always get your own

•Failure to do the above can lead to class space errors and security flaws!
* More about this later!
Copyright © 2005 - 2014 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
Asynchronous OSGi – Promises for the masses Jun 2014
Async Service Example
Perform two long running calls in parallel, then aggregate the result
! public void setAsync(Async async) {!
! ! this.async = async;!
! }!
! !
! public void setMyService(ServiceReference<MyService> myService) {!
! ! this.myService = myService;!
! }!
!
! public Long getCombinedTotal() throws Exception {!
! ! MyService mediated = async.mediate(myService);!
! ! !
! ! Promise<Long> bars = async.call(mediated.barsInNYC());!
!
! ! return async.call(mediated.pianosInNYC())!
! ! ! ! .flatMap((pVal) -> bars.map((bVal) -> pVal + bVal))!
! ! ! ! .getValue();!
! }
Copyright © 2005 - 2014 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
Asynchronous OSGi – Promises for the masses Jun 2014
Optimising Calls into Asynchronous
Services
Copyright © 2005 - 2014 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
Asynchronous OSGi – Promises for the masses Jun 2014
What if we can do better?
Sometimes there’s more to a service than meets the eye…

!
Some service implementations are asynchronous under the covers

• Blocking a thread from the Async Service to call these services is a waste!

!
We need to allow these services to provide a Promise to the Async Service

• Enter the AsyncDelegate interface!

!
Services that implement AsyncDelegate are given the opportunity to provide
their own Promise, bypassing the Async Service

null can be returned if the AsyncDelegate can’t optimise a particular call
Copyright © 2005 - 2014 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
Asynchronous OSGi – Promises for the masses Jun 2014
Isn’t this a bit niche?
Implementing AsyncDelegate may seem like a micro-optimisation

• Short lived objects are cheap

• How many services does this really apply to?

!
Remote Services allows most OSGi services to be transparently remoted

• The details of the distribution mechanism are hidden

• If the distribution provider supports asynchronous communications then it
can optimise calls that it knows to be asynchronous

Distribution
Provider
Distribution
Provider
Copyright © 2005 - 2014 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
Asynchronous OSGi – Promises for the masses Jun 2014
Further optimising our calls
Earlier we talked about fire-and-forget calls…

!
Fire and forget ignores return values, and offers no callback on completion

• This is often less useful, but can be exactly what you need

• It can also be very heavily optimised by remote services!

!
!
!
!
Removing the return flow decreases work at both the local and remote ends

• It also significantly reduces the load on the network
Distribution
Provider
Distribution
Provider
Copyright © 2005 - 2014 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
Asynchronous OSGi – Promises for the masses Jun 2014
Implementing your own AsyncDelegate
The AsyncDelegate interface defines two methods:

• Promise<?> async(Method, Object[]) throws Exception;

• boolean execute(Method, Object[]) throws Exception;

!
It’s only worth implementing if:

• You can optimise the asynchronous execution of one or more methods

• Your service is likely to be called asynchronously

!
Return null or false if the call can’t be optimised

Exceptions should only be thrown if the call is impossible (e.g. too few args)
Copyright © 2005 - 2014 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
Asynchronous OSGi – Promises for the masses Jun 2014
Demonstration: using the Async Service
Copyright © 2005 - 2014 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
Asynchronous OSGi – Promises for the masses Jun 2014
•For more about OSGi...

• Specifications at http://www.osgi.org

• Enterprise OSGi in Action

• http://www.manning.com/cummins

!
•For Service Fabric examples and docs

• http://docs.paremus.com/

!
•For more about the demo (including source code)

• http://bit.ly/paremus-async

Questions?
Thanks!
44% off OSGi
books using
code osgi14cf at
manning.com
http://www.paremus.com
info@paremus.com

More Related Content

What's hot

Embrace Change - Embrace OSGi
Embrace Change - Embrace OSGiEmbrace Change - Embrace OSGi
Embrace Change - Embrace OSGiCarsten Ziegeler
 
Use Case: Building OSGi Enterprise Applications (QCon 14)
Use Case: Building OSGi Enterprise Applications (QCon 14)Use Case: Building OSGi Enterprise Applications (QCon 14)
Use Case: Building OSGi Enterprise Applications (QCon 14)Carsten Ziegeler
 
Sviluppo di architetture orientate ai servizi con EclipseSOA
Sviluppo di architetture orientate ai servizi con EclipseSOA Sviluppo di architetture orientate ai servizi con EclipseSOA
Sviluppo di architetture orientate ai servizi con EclipseSOA Alberto Lagna
 
Running Vue Storefront in production (PWA Magento webshop)
Running Vue Storefront in production (PWA Magento webshop)Running Vue Storefront in production (PWA Magento webshop)
Running Vue Storefront in production (PWA Magento webshop)Vendic Magento, PWA & Marketing
 
RESTful Services and Distributed OSGi - 04/2009
RESTful Services and Distributed OSGi - 04/2009RESTful Services and Distributed OSGi - 04/2009
RESTful Services and Distributed OSGi - 04/2009Roland Tritsch
 
Java Modularity with OSGi
Java Modularity with OSGiJava Modularity with OSGi
Java Modularity with OSGiIlya Rybak
 
Smart IoTt on OSGi with Apache Openwhisk - C Ziegeler & D Bosschaert
Smart IoTt on OSGi with Apache Openwhisk - C Ziegeler & D BosschaertSmart IoTt on OSGi with Apache Openwhisk - C Ziegeler & D Bosschaert
Smart IoTt on OSGi with Apache Openwhisk - C Ziegeler & D Bosschaertmfrancis
 
Experiences of SOACS
Experiences of SOACSExperiences of SOACS
Experiences of SOACSSimon Haslam
 
What's next for Java API for WebSocket (JSR 356)
What's next for Java API for WebSocket (JSR 356)What's next for Java API for WebSocket (JSR 356)
What's next for Java API for WebSocket (JSR 356)Pavel Bucek
 
AEM (CQ) Dispatcher Caching Webinar 2013
AEM (CQ) Dispatcher Caching Webinar 2013AEM (CQ) Dispatcher Caching Webinar 2013
AEM (CQ) Dispatcher Caching Webinar 2013Andrew Khoury
 
Puppet devops wdec
Puppet devops wdecPuppet devops wdec
Puppet devops wdecWojciech Dec
 
Integrating Apache Wookie with AEM by Rima Mittal and Ankit Gubrani
Integrating Apache Wookie with AEM by Rima Mittal and Ankit GubraniIntegrating Apache Wookie with AEM by Rima Mittal and Ankit Gubrani
Integrating Apache Wookie with AEM by Rima Mittal and Ankit GubraniAEM HUB
 
Java EE 7 et ensuite pourquoi pas JavaScript sur le serveur!
Java EE 7 et ensuite pourquoi pas JavaScript sur le serveur! Java EE 7 et ensuite pourquoi pas JavaScript sur le serveur!
Java EE 7 et ensuite pourquoi pas JavaScript sur le serveur! David Delabassee
 
Cloud Foundry, Spring and Vaadin
Cloud Foundry, Spring and VaadinCloud Foundry, Spring and Vaadin
Cloud Foundry, Spring and VaadinJoshua Long
 

What's hot (20)

Embrace Change - Embrace OSGi
Embrace Change - Embrace OSGiEmbrace Change - Embrace OSGi
Embrace Change - Embrace OSGi
 
Use Case: Building OSGi Enterprise Applications (QCon 14)
Use Case: Building OSGi Enterprise Applications (QCon 14)Use Case: Building OSGi Enterprise Applications (QCon 14)
Use Case: Building OSGi Enterprise Applications (QCon 14)
 
Sviluppo di architetture orientate ai servizi con EclipseSOA
Sviluppo di architetture orientate ai servizi con EclipseSOA Sviluppo di architetture orientate ai servizi con EclipseSOA
Sviluppo di architetture orientate ai servizi con EclipseSOA
 
Running Vue Storefront in production (PWA Magento webshop)
Running Vue Storefront in production (PWA Magento webshop)Running Vue Storefront in production (PWA Magento webshop)
Running Vue Storefront in production (PWA Magento webshop)
 
RESTful Services and Distributed OSGi - 04/2009
RESTful Services and Distributed OSGi - 04/2009RESTful Services and Distributed OSGi - 04/2009
RESTful Services and Distributed OSGi - 04/2009
 
Java Modularity with OSGi
Java Modularity with OSGiJava Modularity with OSGi
Java Modularity with OSGi
 
Smart IoTt on OSGi with Apache Openwhisk - C Ziegeler & D Bosschaert
Smart IoTt on OSGi with Apache Openwhisk - C Ziegeler & D BosschaertSmart IoTt on OSGi with Apache Openwhisk - C Ziegeler & D Bosschaert
Smart IoTt on OSGi with Apache Openwhisk - C Ziegeler & D Bosschaert
 
Locking Down CF Servers
Locking Down CF ServersLocking Down CF Servers
Locking Down CF Servers
 
Experiences of SOACS
Experiences of SOACSExperiences of SOACS
Experiences of SOACS
 
PAPI and Promotional Deployment
PAPI and Promotional DeploymentPAPI and Promotional Deployment
PAPI and Promotional Deployment
 
What's next for Java API for WebSocket (JSR 356)
What's next for Java API for WebSocket (JSR 356)What's next for Java API for WebSocket (JSR 356)
What's next for Java API for WebSocket (JSR 356)
 
JavaCro'15 - Java Cloud - Marin Tadić
JavaCro'15 - Java Cloud - Marin TadićJavaCro'15 - Java Cloud - Marin Tadić
JavaCro'15 - Java Cloud - Marin Tadić
 
AEM (CQ) Dispatcher Caching Webinar 2013
AEM (CQ) Dispatcher Caching Webinar 2013AEM (CQ) Dispatcher Caching Webinar 2013
AEM (CQ) Dispatcher Caching Webinar 2013
 
JavaCro'15 - HTTP2 Comes to Java! - David Delabassee
JavaCro'15 - HTTP2 Comes to Java! - David DelabasseeJavaCro'15 - HTTP2 Comes to Java! - David Delabassee
JavaCro'15 - HTTP2 Comes to Java! - David Delabassee
 
Puppet devops wdec
Puppet devops wdecPuppet devops wdec
Puppet devops wdec
 
Integrating Apache Wookie with AEM by Rima Mittal and Ankit Gubrani
Integrating Apache Wookie with AEM by Rima Mittal and Ankit GubraniIntegrating Apache Wookie with AEM by Rima Mittal and Ankit Gubrani
Integrating Apache Wookie with AEM by Rima Mittal and Ankit Gubrani
 
Java EE 7 et ensuite pourquoi pas JavaScript sur le serveur!
Java EE 7 et ensuite pourquoi pas JavaScript sur le serveur! Java EE 7 et ensuite pourquoi pas JavaScript sur le serveur!
Java EE 7 et ensuite pourquoi pas JavaScript sur le serveur!
 
Cloud Foundry, Spring and Vaadin
Cloud Foundry, Spring and VaadinCloud Foundry, Spring and Vaadin
Cloud Foundry, Spring and Vaadin
 
Api manager preconference
Api manager preconferenceApi manager preconference
Api manager preconference
 
java
java java
java
 

Similar to Asynchronous OSGi – Promises for the Masses - T Ward

Asynchronous Services – A promising future for OSGi - T Ward
Asynchronous Services – A promising future for OSGi - T WardAsynchronous Services – A promising future for OSGi - T Ward
Asynchronous Services – A promising future for OSGi - T Wardmfrancis
 
Just-in-time Java EE - provisioning runtimes for enterprise applications - Ja...
Just-in-time Java EE - provisioning runtimes for enterprise applications - Ja...Just-in-time Java EE - provisioning runtimes for enterprise applications - Ja...
Just-in-time Java EE - provisioning runtimes for enterprise applications - Ja...mfrancis
 
StackStorm DevOps Automation Webinar
StackStorm DevOps Automation WebinarStackStorm DevOps Automation Webinar
StackStorm DevOps Automation WebinarStackStorm
 
JavaOne 2014: Java vs JavaScript
JavaOne 2014:   Java vs JavaScriptJavaOne 2014:   Java vs JavaScript
JavaOne 2014: Java vs JavaScriptChris Bailey
 
Transaction Control – a Functional Approach to Modular Transaction Management...
Transaction Control – a Functional Approach to Modular Transaction Management...Transaction Control – a Functional Approach to Modular Transaction Management...
Transaction Control – a Functional Approach to Modular Transaction Management...mfrancis
 
Dissecting and Attacking RMI Frameworks
Dissecting and Attacking RMI FrameworksDissecting and Attacking RMI Frameworks
Dissecting and Attacking RMI FrameworksOnapsis Inc.
 
Server Day 2009: Spring dm Server by Alef Arendsen
Server Day 2009: Spring dm Server by Alef ArendsenServer Day 2009: Spring dm Server by Alef Arendsen
Server Day 2009: Spring dm Server by Alef ArendsenJUG Genova
 
Dynamically assembled REST Microservices using JAX-RS and... Microservices? -...
Dynamically assembled REST Microservices using JAX-RS and... Microservices? -...Dynamically assembled REST Microservices using JAX-RS and... Microservices? -...
Dynamically assembled REST Microservices using JAX-RS and... Microservices? -...mfrancis
 
Servidores de Aplicação: por que ainda precisamos deles?
Servidores de Aplicação: por que ainda precisamos deles?Servidores de Aplicação: por que ainda precisamos deles?
Servidores de Aplicação: por que ainda precisamos deles?Bruno Borges
 
Creating an all-purpose REST API for Cloud services using OSGi and Sling - C ...
Creating an all-purpose REST API for Cloud services using OSGi and Sling - C ...Creating an all-purpose REST API for Cloud services using OSGi and Sling - C ...
Creating an all-purpose REST API for Cloud services using OSGi and Sling - C ...mfrancis
 
Fine-Tuning of Agile Development
Fine-Tuning of Agile DevelopmentFine-Tuning of Agile Development
Fine-Tuning of Agile DevelopmentThoughtworks
 
Zero Downtime Deployment
Zero Downtime DeploymentZero Downtime Deployment
Zero Downtime DeploymentJoel Dickson
 
Why you should choose Angular and why you should not
Why you should choose Angular and why you should notWhy you should choose Angular and why you should not
Why you should choose Angular and why you should notGeorge Georgiadis
 
Full Speed Ahead! (Ahead-of-Time Compilation for Java SE) [JavaOne 2017 CON3738]
Full Speed Ahead! (Ahead-of-Time Compilation for Java SE) [JavaOne 2017 CON3738]Full Speed Ahead! (Ahead-of-Time Compilation for Java SE) [JavaOne 2017 CON3738]
Full Speed Ahead! (Ahead-of-Time Compilation for Java SE) [JavaOne 2017 CON3738]David Buck
 
Automating and Accelerating Application Deployments to IBM WebSphere without ...
Automating and Accelerating Application Deployments to IBM WebSphere without ...Automating and Accelerating Application Deployments to IBM WebSphere without ...
Automating and Accelerating Application Deployments to IBM WebSphere without ...XebiaLabs
 
Stapling and patching the web of now - ForwardJS3, San Francisco
Stapling and patching the web of now - ForwardJS3, San FranciscoStapling and patching the web of now - ForwardJS3, San Francisco
Stapling and patching the web of now - ForwardJS3, San FranciscoChristian Heilmann
 
Chris Mathias Presents Advanced API Design Considerations at LA CTO Forum
Chris Mathias Presents Advanced API Design Considerations at LA CTO ForumChris Mathias Presents Advanced API Design Considerations at LA CTO Forum
Chris Mathias Presents Advanced API Design Considerations at LA CTO ForumChris Mathias
 
Serverless @ oracle meetup
Serverless @ oracle meetupServerless @ oracle meetup
Serverless @ oracle meetupJonggyou Kim
 
Serverless Computing 친해지기,Hands on실습 (한국오라클 김종규 컨설턴트)
Serverless Computing 친해지기,Hands on실습 (한국오라클 김종규 컨설턴트)Serverless Computing 친해지기,Hands on실습 (한국오라클 김종규 컨설턴트)
Serverless Computing 친해지기,Hands on실습 (한국오라클 김종규 컨설턴트)Oracle Korea
 

Similar to Asynchronous OSGi – Promises for the Masses - T Ward (20)

Asynchronous Services – A promising future for OSGi - T Ward
Asynchronous Services – A promising future for OSGi - T WardAsynchronous Services – A promising future for OSGi - T Ward
Asynchronous Services – A promising future for OSGi - T Ward
 
Just-in-time Java EE - provisioning runtimes for enterprise applications - Ja...
Just-in-time Java EE - provisioning runtimes for enterprise applications - Ja...Just-in-time Java EE - provisioning runtimes for enterprise applications - Ja...
Just-in-time Java EE - provisioning runtimes for enterprise applications - Ja...
 
StackStorm DevOps Automation Webinar
StackStorm DevOps Automation WebinarStackStorm DevOps Automation Webinar
StackStorm DevOps Automation Webinar
 
JavaOne 2014: Java vs JavaScript
JavaOne 2014:   Java vs JavaScriptJavaOne 2014:   Java vs JavaScript
JavaOne 2014: Java vs JavaScript
 
Transaction Control – a Functional Approach to Modular Transaction Management...
Transaction Control – a Functional Approach to Modular Transaction Management...Transaction Control – a Functional Approach to Modular Transaction Management...
Transaction Control – a Functional Approach to Modular Transaction Management...
 
JavaCro'15 - Everything a Java EE Developer needs to know about the JavaScrip...
JavaCro'15 - Everything a Java EE Developer needs to know about the JavaScrip...JavaCro'15 - Everything a Java EE Developer needs to know about the JavaScrip...
JavaCro'15 - Everything a Java EE Developer needs to know about the JavaScrip...
 
Dissecting and Attacking RMI Frameworks
Dissecting and Attacking RMI FrameworksDissecting and Attacking RMI Frameworks
Dissecting and Attacking RMI Frameworks
 
Server Day 2009: Spring dm Server by Alef Arendsen
Server Day 2009: Spring dm Server by Alef ArendsenServer Day 2009: Spring dm Server by Alef Arendsen
Server Day 2009: Spring dm Server by Alef Arendsen
 
Dynamically assembled REST Microservices using JAX-RS and... Microservices? -...
Dynamically assembled REST Microservices using JAX-RS and... Microservices? -...Dynamically assembled REST Microservices using JAX-RS and... Microservices? -...
Dynamically assembled REST Microservices using JAX-RS and... Microservices? -...
 
Servidores de Aplicação: por que ainda precisamos deles?
Servidores de Aplicação: por que ainda precisamos deles?Servidores de Aplicação: por que ainda precisamos deles?
Servidores de Aplicação: por que ainda precisamos deles?
 
Creating an all-purpose REST API for Cloud services using OSGi and Sling - C ...
Creating an all-purpose REST API for Cloud services using OSGi and Sling - C ...Creating an all-purpose REST API for Cloud services using OSGi and Sling - C ...
Creating an all-purpose REST API for Cloud services using OSGi and Sling - C ...
 
Fine-Tuning of Agile Development
Fine-Tuning of Agile DevelopmentFine-Tuning of Agile Development
Fine-Tuning of Agile Development
 
Zero Downtime Deployment
Zero Downtime DeploymentZero Downtime Deployment
Zero Downtime Deployment
 
Why you should choose Angular and why you should not
Why you should choose Angular and why you should notWhy you should choose Angular and why you should not
Why you should choose Angular and why you should not
 
Full Speed Ahead! (Ahead-of-Time Compilation for Java SE) [JavaOne 2017 CON3738]
Full Speed Ahead! (Ahead-of-Time Compilation for Java SE) [JavaOne 2017 CON3738]Full Speed Ahead! (Ahead-of-Time Compilation for Java SE) [JavaOne 2017 CON3738]
Full Speed Ahead! (Ahead-of-Time Compilation for Java SE) [JavaOne 2017 CON3738]
 
Automating and Accelerating Application Deployments to IBM WebSphere without ...
Automating and Accelerating Application Deployments to IBM WebSphere without ...Automating and Accelerating Application Deployments to IBM WebSphere without ...
Automating and Accelerating Application Deployments to IBM WebSphere without ...
 
Stapling and patching the web of now - ForwardJS3, San Francisco
Stapling and patching the web of now - ForwardJS3, San FranciscoStapling and patching the web of now - ForwardJS3, San Francisco
Stapling and patching the web of now - ForwardJS3, San Francisco
 
Chris Mathias Presents Advanced API Design Considerations at LA CTO Forum
Chris Mathias Presents Advanced API Design Considerations at LA CTO ForumChris Mathias Presents Advanced API Design Considerations at LA CTO Forum
Chris Mathias Presents Advanced API Design Considerations at LA CTO Forum
 
Serverless @ oracle meetup
Serverless @ oracle meetupServerless @ oracle meetup
Serverless @ oracle meetup
 
Serverless Computing 친해지기,Hands on실습 (한국오라클 김종규 컨설턴트)
Serverless Computing 친해지기,Hands on실습 (한국오라클 김종규 컨설턴트)Serverless Computing 친해지기,Hands on실습 (한국오라클 김종규 컨설턴트)
Serverless Computing 친해지기,Hands on실습 (한국오라클 김종규 컨설턴트)
 

More from mfrancis

Eclipse Modeling Framework and plain OSGi the easy way - Mark Hoffman (Data I...
Eclipse Modeling Framework and plain OSGi the easy way - Mark Hoffman (Data I...Eclipse Modeling Framework and plain OSGi the easy way - Mark Hoffman (Data I...
Eclipse Modeling Framework and plain OSGi the easy way - Mark Hoffman (Data I...mfrancis
 
OSGi and Java 9+ - BJ Hargrave (IBM)
OSGi and Java 9+ - BJ Hargrave (IBM)OSGi and Java 9+ - BJ Hargrave (IBM)
OSGi and Java 9+ - BJ Hargrave (IBM)mfrancis
 
Simplify Web UX Coding using OSGi Modularity Magic - Paul Fraser (A2Z Living)
Simplify Web UX Coding using OSGi Modularity Magic - Paul Fraser (A2Z Living)Simplify Web UX Coding using OSGi Modularity Magic - Paul Fraser (A2Z Living)
Simplify Web UX Coding using OSGi Modularity Magic - Paul Fraser (A2Z Living)mfrancis
 
OSGi for the data centre - Connecting OSGi to Kubernetes - Frank Lyaruu
OSGi for the data centre - Connecting OSGi to Kubernetes - Frank LyaruuOSGi for the data centre - Connecting OSGi to Kubernetes - Frank Lyaruu
OSGi for the data centre - Connecting OSGi to Kubernetes - Frank Lyaruumfrancis
 
Remote Management and Monitoring of Distributed OSGi Applications - Tim Verbe...
Remote Management and Monitoring of Distributed OSGi Applications - Tim Verbe...Remote Management and Monitoring of Distributed OSGi Applications - Tim Verbe...
Remote Management and Monitoring of Distributed OSGi Applications - Tim Verbe...mfrancis
 
OSGi with Docker - a powerful way to develop Java systems - Udo Hafermann (So...
OSGi with Docker - a powerful way to develop Java systems - Udo Hafermann (So...OSGi with Docker - a powerful way to develop Java systems - Udo Hafermann (So...
OSGi with Docker - a powerful way to develop Java systems - Udo Hafermann (So...mfrancis
 
A real world use case with OSGi R7 - Jurgen Albert (Data In Motion Consulting...
A real world use case with OSGi R7 - Jurgen Albert (Data In Motion Consulting...A real world use case with OSGi R7 - Jurgen Albert (Data In Motion Consulting...
A real world use case with OSGi R7 - Jurgen Albert (Data In Motion Consulting...mfrancis
 
OSGi Feature Model - Where Art Thou - David Bosschaert (Adobe)
OSGi Feature Model - Where Art Thou - David Bosschaert (Adobe)OSGi Feature Model - Where Art Thou - David Bosschaert (Adobe)
OSGi Feature Model - Where Art Thou - David Bosschaert (Adobe)mfrancis
 
Migrating from PDE to Bndtools in Practice - Amit Kumar Mondal (Deutsche Tele...
Migrating from PDE to Bndtools in Practice - Amit Kumar Mondal (Deutsche Tele...Migrating from PDE to Bndtools in Practice - Amit Kumar Mondal (Deutsche Tele...
Migrating from PDE to Bndtools in Practice - Amit Kumar Mondal (Deutsche Tele...mfrancis
 
OSGi CDI Integration Specification - Ray Augé (Liferay)
OSGi CDI Integration Specification - Ray Augé (Liferay)OSGi CDI Integration Specification - Ray Augé (Liferay)
OSGi CDI Integration Specification - Ray Augé (Liferay)mfrancis
 
How OSGi drives cross-sector energy management - Jörn Tümmler (SMA Solar Tech...
How OSGi drives cross-sector energy management - Jörn Tümmler (SMA Solar Tech...How OSGi drives cross-sector energy management - Jörn Tümmler (SMA Solar Tech...
How OSGi drives cross-sector energy management - Jörn Tümmler (SMA Solar Tech...mfrancis
 
Improved developer productivity thanks to Maven and OSGi - Lukasz Dywicki (Co...
Improved developer productivity thanks to Maven and OSGi - Lukasz Dywicki (Co...Improved developer productivity thanks to Maven and OSGi - Lukasz Dywicki (Co...
Improved developer productivity thanks to Maven and OSGi - Lukasz Dywicki (Co...mfrancis
 
It Was Twenty Years Ago Today - Building an OSGi based Smart Home System - Ch...
It Was Twenty Years Ago Today - Building an OSGi based Smart Home System - Ch...It Was Twenty Years Ago Today - Building an OSGi based Smart Home System - Ch...
It Was Twenty Years Ago Today - Building an OSGi based Smart Home System - Ch...mfrancis
 
Popular patterns revisited on OSGi - Christian Schneider (Adobe)
Popular patterns revisited on OSGi - Christian Schneider (Adobe)Popular patterns revisited on OSGi - Christian Schneider (Adobe)
Popular patterns revisited on OSGi - Christian Schneider (Adobe)mfrancis
 
Integrating SLF4J and the new OSGi LogService 1.4 - BJ Hargrave (IBM)
Integrating SLF4J and the new OSGi LogService 1.4 - BJ Hargrave (IBM)Integrating SLF4J and the new OSGi LogService 1.4 - BJ Hargrave (IBM)
Integrating SLF4J and the new OSGi LogService 1.4 - BJ Hargrave (IBM)mfrancis
 
OSG(a)i: because AI needs a runtime - Tim Verbelen (imec)
OSG(a)i: because AI needs a runtime - Tim Verbelen (imec)OSG(a)i: because AI needs a runtime - Tim Verbelen (imec)
OSG(a)i: because AI needs a runtime - Tim Verbelen (imec)mfrancis
 
Flying to Jupiter with OSGi - Tony Walsh (ESA) & Hristo Indzhov (Telespazio V...
Flying to Jupiter with OSGi - Tony Walsh (ESA) & Hristo Indzhov (Telespazio V...Flying to Jupiter with OSGi - Tony Walsh (ESA) & Hristo Indzhov (Telespazio V...
Flying to Jupiter with OSGi - Tony Walsh (ESA) & Hristo Indzhov (Telespazio V...mfrancis
 
MicroProfile, OSGi was meant for this - Ray Auge (Liferay)
MicroProfile, OSGi was meant for this - Ray Auge (Liferay)MicroProfile, OSGi was meant for this - Ray Auge (Liferay)
MicroProfile, OSGi was meant for this - Ray Auge (Liferay)mfrancis
 
Prototyping IoT systems with a hybrid OSGi & Node-RED platform - Bruce Jackso...
Prototyping IoT systems with a hybrid OSGi & Node-RED platform - Bruce Jackso...Prototyping IoT systems with a hybrid OSGi & Node-RED platform - Bruce Jackso...
Prototyping IoT systems with a hybrid OSGi & Node-RED platform - Bruce Jackso...mfrancis
 
How to connect your OSGi application - Dirk Fauth (Bosch)
How to connect your OSGi application - Dirk Fauth (Bosch)How to connect your OSGi application - Dirk Fauth (Bosch)
How to connect your OSGi application - Dirk Fauth (Bosch)mfrancis
 

More from mfrancis (20)

Eclipse Modeling Framework and plain OSGi the easy way - Mark Hoffman (Data I...
Eclipse Modeling Framework and plain OSGi the easy way - Mark Hoffman (Data I...Eclipse Modeling Framework and plain OSGi the easy way - Mark Hoffman (Data I...
Eclipse Modeling Framework and plain OSGi the easy way - Mark Hoffman (Data I...
 
OSGi and Java 9+ - BJ Hargrave (IBM)
OSGi and Java 9+ - BJ Hargrave (IBM)OSGi and Java 9+ - BJ Hargrave (IBM)
OSGi and Java 9+ - BJ Hargrave (IBM)
 
Simplify Web UX Coding using OSGi Modularity Magic - Paul Fraser (A2Z Living)
Simplify Web UX Coding using OSGi Modularity Magic - Paul Fraser (A2Z Living)Simplify Web UX Coding using OSGi Modularity Magic - Paul Fraser (A2Z Living)
Simplify Web UX Coding using OSGi Modularity Magic - Paul Fraser (A2Z Living)
 
OSGi for the data centre - Connecting OSGi to Kubernetes - Frank Lyaruu
OSGi for the data centre - Connecting OSGi to Kubernetes - Frank LyaruuOSGi for the data centre - Connecting OSGi to Kubernetes - Frank Lyaruu
OSGi for the data centre - Connecting OSGi to Kubernetes - Frank Lyaruu
 
Remote Management and Monitoring of Distributed OSGi Applications - Tim Verbe...
Remote Management and Monitoring of Distributed OSGi Applications - Tim Verbe...Remote Management and Monitoring of Distributed OSGi Applications - Tim Verbe...
Remote Management and Monitoring of Distributed OSGi Applications - Tim Verbe...
 
OSGi with Docker - a powerful way to develop Java systems - Udo Hafermann (So...
OSGi with Docker - a powerful way to develop Java systems - Udo Hafermann (So...OSGi with Docker - a powerful way to develop Java systems - Udo Hafermann (So...
OSGi with Docker - a powerful way to develop Java systems - Udo Hafermann (So...
 
A real world use case with OSGi R7 - Jurgen Albert (Data In Motion Consulting...
A real world use case with OSGi R7 - Jurgen Albert (Data In Motion Consulting...A real world use case with OSGi R7 - Jurgen Albert (Data In Motion Consulting...
A real world use case with OSGi R7 - Jurgen Albert (Data In Motion Consulting...
 
OSGi Feature Model - Where Art Thou - David Bosschaert (Adobe)
OSGi Feature Model - Where Art Thou - David Bosschaert (Adobe)OSGi Feature Model - Where Art Thou - David Bosschaert (Adobe)
OSGi Feature Model - Where Art Thou - David Bosschaert (Adobe)
 
Migrating from PDE to Bndtools in Practice - Amit Kumar Mondal (Deutsche Tele...
Migrating from PDE to Bndtools in Practice - Amit Kumar Mondal (Deutsche Tele...Migrating from PDE to Bndtools in Practice - Amit Kumar Mondal (Deutsche Tele...
Migrating from PDE to Bndtools in Practice - Amit Kumar Mondal (Deutsche Tele...
 
OSGi CDI Integration Specification - Ray Augé (Liferay)
OSGi CDI Integration Specification - Ray Augé (Liferay)OSGi CDI Integration Specification - Ray Augé (Liferay)
OSGi CDI Integration Specification - Ray Augé (Liferay)
 
How OSGi drives cross-sector energy management - Jörn Tümmler (SMA Solar Tech...
How OSGi drives cross-sector energy management - Jörn Tümmler (SMA Solar Tech...How OSGi drives cross-sector energy management - Jörn Tümmler (SMA Solar Tech...
How OSGi drives cross-sector energy management - Jörn Tümmler (SMA Solar Tech...
 
Improved developer productivity thanks to Maven and OSGi - Lukasz Dywicki (Co...
Improved developer productivity thanks to Maven and OSGi - Lukasz Dywicki (Co...Improved developer productivity thanks to Maven and OSGi - Lukasz Dywicki (Co...
Improved developer productivity thanks to Maven and OSGi - Lukasz Dywicki (Co...
 
It Was Twenty Years Ago Today - Building an OSGi based Smart Home System - Ch...
It Was Twenty Years Ago Today - Building an OSGi based Smart Home System - Ch...It Was Twenty Years Ago Today - Building an OSGi based Smart Home System - Ch...
It Was Twenty Years Ago Today - Building an OSGi based Smart Home System - Ch...
 
Popular patterns revisited on OSGi - Christian Schneider (Adobe)
Popular patterns revisited on OSGi - Christian Schneider (Adobe)Popular patterns revisited on OSGi - Christian Schneider (Adobe)
Popular patterns revisited on OSGi - Christian Schneider (Adobe)
 
Integrating SLF4J and the new OSGi LogService 1.4 - BJ Hargrave (IBM)
Integrating SLF4J and the new OSGi LogService 1.4 - BJ Hargrave (IBM)Integrating SLF4J and the new OSGi LogService 1.4 - BJ Hargrave (IBM)
Integrating SLF4J and the new OSGi LogService 1.4 - BJ Hargrave (IBM)
 
OSG(a)i: because AI needs a runtime - Tim Verbelen (imec)
OSG(a)i: because AI needs a runtime - Tim Verbelen (imec)OSG(a)i: because AI needs a runtime - Tim Verbelen (imec)
OSG(a)i: because AI needs a runtime - Tim Verbelen (imec)
 
Flying to Jupiter with OSGi - Tony Walsh (ESA) & Hristo Indzhov (Telespazio V...
Flying to Jupiter with OSGi - Tony Walsh (ESA) & Hristo Indzhov (Telespazio V...Flying to Jupiter with OSGi - Tony Walsh (ESA) & Hristo Indzhov (Telespazio V...
Flying to Jupiter with OSGi - Tony Walsh (ESA) & Hristo Indzhov (Telespazio V...
 
MicroProfile, OSGi was meant for this - Ray Auge (Liferay)
MicroProfile, OSGi was meant for this - Ray Auge (Liferay)MicroProfile, OSGi was meant for this - Ray Auge (Liferay)
MicroProfile, OSGi was meant for this - Ray Auge (Liferay)
 
Prototyping IoT systems with a hybrid OSGi & Node-RED platform - Bruce Jackso...
Prototyping IoT systems with a hybrid OSGi & Node-RED platform - Bruce Jackso...Prototyping IoT systems with a hybrid OSGi & Node-RED platform - Bruce Jackso...
Prototyping IoT systems with a hybrid OSGi & Node-RED platform - Bruce Jackso...
 
How to connect your OSGi application - Dirk Fauth (Bosch)
How to connect your OSGi application - Dirk Fauth (Bosch)How to connect your OSGi application - Dirk Fauth (Bosch)
How to connect your OSGi application - Dirk Fauth (Bosch)
 

Recently uploaded

Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Mark Goldstein
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesKari Kakkonen
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfpanagenda
 
Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditSkynet Technologies
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Hiroshi SHIBATA
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityIES VE
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality AssuranceInflectra
 
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Scott Andery
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesThousandEyes
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 

Recently uploaded (20)

Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examples
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
 
Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance Audit
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a reality
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
 
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 

Asynchronous OSGi – Promises for the Masses - T Ward

  • 1. Copyright © 2005 - 2014 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Asynchronous OSGi – Promises for the masses Jun 2014 Asynchronous OSGi: Promises for the masses Tim Ward http://www.paremus.com info@paremus.com
  • 2. Copyright © 2005 - 2014 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Asynchronous OSGi – Promises for the masses Jun 2014 •Senior Consulting Engineer, Trainer and Architect at Paremus •5 years at IBM developing WebSphere Application Server • Container Implementations for Java EE and OSGi, including Blueprint, JPA, EJB and JTA •OSGi Specification lead for JPA, Weaving Hooks and Asynchronous Services •PMC member of the Apache Aries project •Previous speaker at Java One, EclipseCon, Devoxx, Jazoon, JAX London, OSGi Community Event... •Author of Manning’s Enterprise OSGi in Action •http://www.manning.com/cummins Who is Tim Ward? @TimothyWard
  • 3. Copyright © 2005 - 2014 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Asynchronous OSGi – Promises for the masses Jun 2014 What we’re going to cover •Why is the World Going Asynchronous? ! •Async Programming Primitives ! •Making Synchronous Services Asynchronous ! •Optimising Calls into Asynchronous Services ! •Demo
  • 4. Copyright © 2005 - 2014 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Asynchronous OSGi – Promises for the masses Jun 2014 New OSGi Specifications Last week the OSGi Core Release 6 Specification received final approval! ! It’s available now at http://www.osgi.org/Specifications/HomePage! ! ! The OSGi Board also approved a public draft of OSGi Enterprise Release 6! ! Available at http://www.osgi.org/Specifications/Drafts! ! This draft contains the specifications we’re going to be talking about! NEW
  • 5. Copyright © 2005 - 2014 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Asynchronous OSGi – Promises for the masses Jun 2014 Why is the World Going Asynchronous?
  • 6. Copyright © 2005 - 2014 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Asynchronous OSGi – Promises for the masses Jun 2014 Origins of Asynchronous Programming Asynchronous Programming concepts have been with us for a long time! User Interface EventHandler callbacks “must not block the UI thread!” The terms “Promise” and “Future” originate from 1970s research papers Proposed as mechanisms to handle large-scale parallel execution Many peopler think of Async Programming as “recently popular”…
  • 7. •Asynchronous systems offer better performance •This does assume that there isn’t a single bottleneck! ! •Asynchronous Distributed systems typically scale better •Less time spent waiting for high-latency calls •More reasonable failure characteristics ! •Parallelism is easier to exploit ! •Network Infrastructure is intrinsically asynchronous •Network Engineers have been working this way for decades Copyright © 2005 - 2014 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Asynchronous OSGi – Promises for the masses Jun 2014 Advantages of Asynchronous Programming 100% 100%
  • 8. Copyright © 2005 - 2014 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Asynchronous OSGi – Promises for the masses Jun 2014 Problems with Asynchronous Programming Human brains aren’t really designed to cope with asynchronous logic •Thought processes tend to be “do A”, then “do B” then “the result is C” •Asynchronous Programming is only useful if the benefits of using it outweigh the extra cognitive overhead ! Synchronous calls offer a natural “brake” in RPC •Asynchronous “Event Storms” can overwhelm remote systems, even using a single client thread. ! Deadlocks are still possible, and can be hard to diagnose
  • 9. Copyright © 2005 - 2014 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Asynchronous OSGi – Promises for the masses Jun 2014 So what’s changed? The latest asynchronous revolution seems to be sticking! JavaScript has been a major driver in the last 5-10 years, in a single threaded environment. Async is a necessity! Multi-core is pervasive now, request-level parallelism isn’t always enough to max out hardware any more Commonly used OO languages are becoming more “functional” Java and C++ have added lambdas
  • 10. Copyright © 2005 - 2014 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Asynchronous OSGi – Promises for the masses Jun 2014 Async Programming Primitives
  • 11. Copyright © 2005 - 2014 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Asynchronous OSGi – Promises for the masses Jun 2014 Async Basics The Promise is the primitive of Asynchronous Programming Strictly, the OSGi (and most JavaScript) Promises are “Future” types as they have no methods for resolving themselves In both cases a Deferred type can create and resolve a default Promise implementation A “Promise” represents a delayed value that will be “resolved” in the future “Resolving” a promise sets its value, or its failure OSGi Promises are based on JavaScript Promise concepts, but also significantly influenced by Scala
  • 12. Copyright © 2005 - 2014 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Asynchronous OSGi – Promises for the masses Jun 2014 The OSGi Promise The Promise Contract (based on JavaScript Promises) •The Promise is resolved or failed with a single value, at most once •Listener callbacks are called at most once •Promises remember their state (including their resolution / failure value) •Promises behave the same way regardless of whether they are already resolved or resolved in the future. ! Promises can be treated as a shareable value type •Effectively immutable (unless you created it!) •Thread safe •No need to unwrap it…
  • 13. Copyright © 2005 - 2014 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Asynchronous OSGi – Promises for the masses Jun 2014 The Deferred OSGi provides a default Promise implementation for clients to use The Deferred is held by the provider of the Promise, and can be used to set its value or failure ! ! ! final Deferred<Long> deferred = new Deferred<Long>();! ! ! ! new Thread() {! ! ! ! public void run() {! ! ! ! ! try {! ! ! ! ! ! Long total = service.calculateDifficultSum();! ! ! ! ! ! deferred.resolve(total);! ! ! ! ! } catch (Exception e) {! ! ! ! ! ! deferred.fail(e);! ! ! ! ! }! ! ! ! }! ! ! }.start();! ! ! ! Promise<Long> promise = deferred.getPromise();
  • 14. Copyright © 2005 - 2014 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Asynchronous OSGi – Promises for the masses Jun 2014 Promise Callbacks Promises do support “synchronous” usage similar to Java’s Future •isDone(), getValue(), getFailure() •The getXxx() methods block ! It’s better to use Promises with callbacks (never block, remember?) •then(Success) or then(Success, Failure)! ! Success and Failure are both SAM interfaces, suitable for Lambda usage then((p) -> success(p.getValue()), ! ! (p) -> fail(p.getFailure()));! ! Callbacks should be fast - Success can return a Promise for longer tasks
  • 15. Copyright © 2005 - 2014 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Asynchronous OSGi – Promises for the masses Jun 2014 Chaining Promises Basic chaining uses then(…), a new Promise is created that resolves when: •the success callback returns null; or •the success callback throws an error; or •the Promise returned by the success callback resolves ! Chaining allows you to compose sequences of events •Promises are Monads •Complex behaviours can be achieved without if/else branching ! More complex functional chains are natively supported •Filtering/Mapping values, recovering failures…
  • 16. Copyright © 2005 - 2014 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Asynchronous OSGi – Promises for the masses Jun 2014 The Promises utility class The Promises type provides number of common functions •Creating Promises that are already resolved or failed •Very useful when mapping / recovering promises ! Another useful utility is Promises.all(Promise…) •It creates a “latch” Promise that resolves when all others are complete •Good for final clean up, or for notifying users about aggregate tasks ! Remember that chains and latches work even if a Promise is already resolved!
  • 17. Copyright © 2005 - 2014 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Asynchronous OSGi – Promises for the masses Jun 2014 A Chaining Example Download an XML file, preferably from a mirror URL, and parse it using JAXB ! Promise<Library> promise = getMirror(libraryURL)! ! ! ! ! .fallbackTo(Promises.resolved(libraryURL))! ! ! ! ! .then((p) -> downloadFile(p.getValue()))! ! ! ! ! .map((p) -> (Library) JAXB.unmarshal(p, Library.class)));! ! ! ! public Promise<URL> getMirror(URL url)! ! ! throws Exception {! ! ! . . .! ! }! ! ! ! public Promise<File> downloadFile(URL url) ! ! ! throws Exception {! ! ! . . .! ! }!
  • 18. Copyright © 2005 - 2014 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Asynchronous OSGi – Promises for the masses Jun 2014 Making Synchronous Services Asynchronous
  • 19. Copyright © 2005 - 2014 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Asynchronous OSGi – Promises for the masses Jun 2014 The OSGi service model The OSGi service model is useful and widely used ! ! ! ! Service objects are obtained from the Service Registry and invoked •The call semantics depend upon the Service API •Most APIs are synchronous in operation ! Consumer ! Provider
  • 20. Copyright © 2005 - 2014 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Asynchronous OSGi – Promises for the masses Jun 2014 Question? As a service client, how do I make an asynchronous call to a service? •I can’t / don’t want to rewrite the service •I’d prefer not to start threads or manage a thread pool •I’d also like my code to stay as clean as possible ! Ad-hoc solutions are messy, but have been the only choice up to now !
  • 21. Copyright © 2005 - 2014 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Asynchronous OSGi – Promises for the masses Jun 2014 The Async Service - Requirements •Allow arbitrary OSGi services to be called asynchronously •The call must be transparent to the backing service, no opt-in required ! •Must support methods that have a return value, as well as void ! •Must not rely on generated source, client-local interfaces or reflection •Source gets out of sync, and is hard to maintain •Reflection is just ugly! ! •Must allow services that are already asynchronous to “hook-in” to the model •This does require opt-in
  • 22. Copyright © 2005 - 2014 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Asynchronous OSGi – Promises for the masses Jun 2014 Unit testing Mocks - Requirements •Allow arbitrary Objects to be called, remembering the calls that are made •The mocking must be transparent, no opt-in required ! •Mocks must allow methods to return a specific value ! •Must not rely on generated source, client-local interfaces or reflection •The test code is using the real interfaces/objects ! ! ! Notice any similarities?
  • 23. Copyright © 2005 - 2014 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Asynchronous OSGi – Promises for the masses Jun 2014 How to use the Async Service To make asynchronous calls on a service you need an Async Mediator ! MyService mediated = async.mediate(myService);! ! Services can be mediated from a ServiceReference or the service object •ServiceReference is better because the mediator can track availability ! Clients then use the mediated object to make a normal method call •This records the call, just like a mock would in a test ! To begin the asynchronous task you pass the return value to async.call(T) ! Promise<Long> p = async.call(mediated.pianosInNYC());!
  • 24. Copyright © 2005 - 2014 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Asynchronous OSGi – Promises for the masses Jun 2014 How to use the Async Service (2) Void methods can be slightly trickier •There’s a no-args version of call() which returns Promise<?> •Promises for void methods resolve with null when they complete ! If you don’t need a Promise, then consider fire-and-forget •The execute() method doesn’t create a Promise •Fire-and-forget can be much more efficient* ! The Async Service is Thread Safe, but mediators may not be •Never share the Async object between Bundles, always get your own •Failure to do the above can lead to class space errors and security flaws! * More about this later!
  • 25. Copyright © 2005 - 2014 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Asynchronous OSGi – Promises for the masses Jun 2014 Async Service Example Perform two long running calls in parallel, then aggregate the result ! public void setAsync(Async async) {! ! ! this.async = async;! ! }! ! ! ! public void setMyService(ServiceReference<MyService> myService) {! ! ! this.myService = myService;! ! }! ! ! public Long getCombinedTotal() throws Exception {! ! ! MyService mediated = async.mediate(myService);! ! ! ! ! ! Promise<Long> bars = async.call(mediated.barsInNYC());! ! ! ! return async.call(mediated.pianosInNYC())! ! ! ! ! .flatMap((pVal) -> bars.map((bVal) -> pVal + bVal))! ! ! ! ! .getValue();! ! }
  • 26. Copyright © 2005 - 2014 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Asynchronous OSGi – Promises for the masses Jun 2014 Optimising Calls into Asynchronous Services
  • 27. Copyright © 2005 - 2014 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Asynchronous OSGi – Promises for the masses Jun 2014 What if we can do better? Sometimes there’s more to a service than meets the eye… ! Some service implementations are asynchronous under the covers • Blocking a thread from the Async Service to call these services is a waste! ! We need to allow these services to provide a Promise to the Async Service • Enter the AsyncDelegate interface! ! Services that implement AsyncDelegate are given the opportunity to provide their own Promise, bypassing the Async Service null can be returned if the AsyncDelegate can’t optimise a particular call
  • 28. Copyright © 2005 - 2014 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Asynchronous OSGi – Promises for the masses Jun 2014 Isn’t this a bit niche? Implementing AsyncDelegate may seem like a micro-optimisation • Short lived objects are cheap • How many services does this really apply to? ! Remote Services allows most OSGi services to be transparently remoted • The details of the distribution mechanism are hidden • If the distribution provider supports asynchronous communications then it can optimise calls that it knows to be asynchronous Distribution Provider Distribution Provider
  • 29. Copyright © 2005 - 2014 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Asynchronous OSGi – Promises for the masses Jun 2014 Further optimising our calls Earlier we talked about fire-and-forget calls… ! Fire and forget ignores return values, and offers no callback on completion • This is often less useful, but can be exactly what you need • It can also be very heavily optimised by remote services! ! ! ! ! Removing the return flow decreases work at both the local and remote ends • It also significantly reduces the load on the network Distribution Provider Distribution Provider
  • 30. Copyright © 2005 - 2014 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Asynchronous OSGi – Promises for the masses Jun 2014 Implementing your own AsyncDelegate The AsyncDelegate interface defines two methods: • Promise<?> async(Method, Object[]) throws Exception; • boolean execute(Method, Object[]) throws Exception; ! It’s only worth implementing if: • You can optimise the asynchronous execution of one or more methods • Your service is likely to be called asynchronously ! Return null or false if the call can’t be optimised Exceptions should only be thrown if the call is impossible (e.g. too few args)
  • 31. Copyright © 2005 - 2014 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Asynchronous OSGi – Promises for the masses Jun 2014 Demonstration: using the Async Service
  • 32. Copyright © 2005 - 2014 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Asynchronous OSGi – Promises for the masses Jun 2014 •For more about OSGi... • Specifications at http://www.osgi.org • Enterprise OSGi in Action • http://www.manning.com/cummins ! •For Service Fabric examples and docs • http://docs.paremus.com/ ! •For more about the demo (including source code) • http://bit.ly/paremus-async Questions? Thanks! 44% off OSGi books using code osgi14cf at manning.com http://www.paremus.com info@paremus.com