SlideShare a Scribd company logo
1 of 46
Download to read offline
When is ‘optional’ really optional?
http://www.paremus.com
info@paremus.com

Tim Ward
When is ‘optional’ really optional?

Tuesday, 29 October 13

Copyright © 2005 - 2013 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.

Oct 2013
Who is Tim Ward?
@TimothyWard

• Senior Consulting Engineer and Architect at Paremus
• 5 years at IBM developing WebSphere Application Server
• Container Implementation experience with Java EE and OSGi, including Blueprint, JPA, EJB
and JTA

• OSGi Specification lead for JPA and Bytecode Weaving
• PMC member of the Apache Aries project
• Previous speaker at EclipseCon, Devoxx, Jazoon, JAX London, OSGi
Community Event...

• Author of Manning’s Enterprise OSGi in Action
• http://www.manning.com/cummins
When is ‘optional’ really optional?

Tuesday, 29 October 13

Copyright © 2005 - 2013 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.

Oct 2013
Optional Services

When is ‘optional’ really optional?

Tuesday, 29 October 13

Copyright © 2005 - 2013 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.

Oct 2013
Optional Services

• OSGi bundles communicate and collaborate using loosely coupled services
• Making a service dependency “optional” is pretty easy
OSGi API
ServiceReference<Foo> ref = ctx
.getServiceReference(Foo.class);

Declarative Services API
private Foo fooService;
@Reference(cardinality = OPTIONAL)
public synchronized void setFoo(Foo service) {
fooService = service;
}

if(ref != null) {
Foo service = ctx.getService(ref);
if(service != null) {
try {
...
public synchronized void unsetFoo(Foo service) {
} finally {
fooService = (fooService == service) ? null :
ctx.ungetService(ref);
service;
}
}
}
Copyright © 2005 - 2013 Paremus Ltd.
Oct 2013
} When is ‘optional’ really optional?
May not be reproduced by any means without express permission. All rights reserved.
Tuesday, 29 October 13
Difficulties with Optional Services

• The OSGi API and DS need null checks, which is messy
• Blueprint injects a proxy to the service - No more nulls!
Blueprint code

Blueprint XML

private Foo fooService;

<blueprint>

public void setFoo(Foo service) {
fooService = service;
}

<reference interface=com.paremus.Foo
id=”foo” availability=”optional”/>
<bean id=”bar” class=”com.paremus.Bar>
<property name=”foo” ref=”foo”>
</bean>
</blueprint>

When is ‘optional’ really optional?

Tuesday, 29 October 13

Copyright © 2005 - 2013 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.

Oct 2013
Blueprint is the winner! Or is it?

When is ‘optional’ really optional?

Tuesday, 29 October 13

Copyright © 2005 - 2013 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.

Oct 2013
Blueprint is the winner! Or is it?

• At first inspection Blueprint looks much simpler

When is ‘optional’ really optional?

Tuesday, 29 October 13

Copyright © 2005 - 2013 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.

Oct 2013
Blueprint is the winner! Or is it?

• At first inspection Blueprint looks much simpler
• But what happens when there is no backing service?

When is ‘optional’ really optional?

Tuesday, 29 October 13

Copyright © 2005 - 2013 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.

Oct 2013
Blueprint is the winner! Or is it?

• At first inspection Blueprint looks much simpler
• But what happens when there is no backing service?
• Calling an unbound blueprint service proxy blocks up to the “timeout”. If no
service arrives then you get a ServiceUnavailableException

When is ‘optional’ really optional?

Tuesday, 29 October 13

Copyright © 2005 - 2013 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.

Oct 2013
Blueprint is the winner! Or is it?

• At first inspection Blueprint looks much simpler
• But what happens when there is no backing service?
• Calling an unbound blueprint service proxy blocks up to the “timeout”. If no
service arrives then you get a ServiceUnavailableException

• The default timeout is 5 minutes!!!

When is ‘optional’ really optional?

Tuesday, 29 October 13

Copyright © 2005 - 2013 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.

Oct 2013
Blueprint is the winner! Or is it?

• At first inspection Blueprint looks much simpler
• But what happens when there is no backing service?
• Calling an unbound blueprint service proxy blocks up to the “timeout”. If no
service arrives then you get a ServiceUnavailableException

• The default timeout is 5 minutes!!!
• You can decrease the timeout (but not to zero)

When is ‘optional’ really optional?

Tuesday, 29 October 13

Copyright © 2005 - 2013 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.

Oct 2013
Blueprint is the winner! Or is it?

• At first inspection Blueprint looks much simpler
• But what happens when there is no backing service?
• Calling an unbound blueprint service proxy blocks up to the “timeout”. If no
service arrives then you get a ServiceUnavailableException

• The default timeout is 5 minutes!!!
• You can decrease the timeout (but not to zero)
• You can use a ReferenceListener (this is horrible code, and risks deadlock)
When is ‘optional’ really optional?

Tuesday, 29 October 13

Copyright © 2005 - 2013 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.

Oct 2013
Blueprint is the winner! Or is it?

• At first inspection Blueprint looks much simpler
• But what happens when there is no backing service?
• Calling an unbound blueprint service proxy blocks up to the “timeout”. If no
service arrives then you get a ServiceUnavailableException

• The default timeout is 5 minutes!!!
• You can decrease the timeout (but not to zero)
• You can use a ReferenceListener (this is horrible code, and risks deadlock)
• You can inject a ReferenceList (like DS, but with the wrong cardinality)
When is ‘optional’ really optional?

Tuesday, 29 October 13

Copyright © 2005 - 2013 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.

Oct 2013
Blueprint 1.1 to the rescue

When is ‘optional’ really optional?

Tuesday, 29 October 13

Copyright © 2005 - 2013 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.

Oct 2013
Blueprint 1.1 to the rescue

• Despite aiming to be “simple” Blueprint 1.0 sucked at optionality...

When is ‘optional’ really optional?

Tuesday, 29 October 13

Copyright © 2005 - 2013 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.

Oct 2013
Blueprint 1.1 to the rescue

• Despite aiming to be “simple” Blueprint 1.0 sucked at optionality...
• Blueprint 1.1 proposes several fixes:

When is ‘optional’ really optional?

Tuesday, 29 October 13

Copyright © 2005 - 2013 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.

Oct 2013
Blueprint 1.1 to the rescue

• Despite aiming to be “simple” Blueprint 1.0 sucked at optionality...
• Blueprint 1.1 proposes several fixes:
• Allow users to have an immediate timeout (no service, no waiting)

When is ‘optional’ really optional?

Tuesday, 29 October 13

Copyright © 2005 - 2013 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.

Oct 2013
Blueprint 1.1 to the rescue

• Despite aiming to be “simple” Blueprint 1.0 sucked at optionality...
• Blueprint 1.1 proposes several fixes:
• Allow users to have an immediate timeout (no service, no waiting)
• Still have to cope with a ServiceUnavailableException

When is ‘optional’ really optional?

Tuesday, 29 October 13

Copyright © 2005 - 2013 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.

Oct 2013
Blueprint 1.1 to the rescue

• Despite aiming to be “simple” Blueprint 1.0 sucked at optionality...
• Blueprint 1.1 proposes several fixes:
• Allow users to have an immediate timeout (no service, no waiting)
• Still have to cope with a ServiceUnavailableException
• Allow users to specify a “default” service implementation

When is ‘optional’ really optional?

Tuesday, 29 October 13

Copyright © 2005 - 2013 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.

Oct 2013
Blueprint 1.1 to the rescue

• Despite aiming to be “simple” Blueprint 1.0 sucked at optionality...
• Blueprint 1.1 proposes several fixes:
• Allow users to have an immediate timeout (no service, no waiting)
• Still have to cope with a ServiceUnavailableException
• Allow users to specify a “default” service implementation
• This can be a nice way to avoid branches in your code

When is ‘optional’ really optional?

Tuesday, 29 October 13

Copyright © 2005 - 2013 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.

Oct 2013
Blueprint 1.1 to the rescue

• Despite aiming to be “simple” Blueprint 1.0 sucked at optionality...
• Blueprint 1.1 proposes several fixes:
• Allow users to have an immediate timeout (no service, no waiting)
• Still have to cope with a ServiceUnavailableException
• Allow users to specify a “default” service implementation
• This can be a nice way to avoid branches in your code
• Allows users to use a “null proxy” as the default implementation

When is ‘optional’ really optional?

Tuesday, 29 October 13

Copyright © 2005 - 2013 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.

Oct 2013
Blueprint 1.1 to the rescue

• Despite aiming to be “simple” Blueprint 1.0 sucked at optionality...
• Blueprint 1.1 proposes several fixes:
• Allow users to have an immediate timeout (no service, no waiting)
• Still have to cope with a ServiceUnavailableException
• Allow users to specify a “default” service implementation
• This can be a nice way to avoid branches in your code
• Allows users to use a “null proxy” as the default implementation
• Avoids making you an API provider
When is ‘optional’ really optional?

Tuesday, 29 October 13

Copyright © 2005 - 2013 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.

Oct 2013
Is Service Optionality really ‘optional’

When is ‘optional’ really optional?

Tuesday, 29 October 13

Copyright © 2005 - 2013 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.

Oct 2013
Is Service Optionality really ‘optional’

• The optionality so far has made an implicit assumption

When is ‘optional’ really optional?

Tuesday, 29 October 13

Copyright © 2005 - 2013 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.

Oct 2013
Is Service Optionality really ‘optional’

• The optionality so far has made an implicit assumption
• The API was not optional!

When is ‘optional’ really optional?

Tuesday, 29 October 13

Copyright © 2005 - 2013 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.

Oct 2013
Is Service Optionality really ‘optional’

• The optionality so far has made an implicit assumption
• The API was not optional!
• OSGi does a great job of managing dependencies

When is ‘optional’ really optional?

Tuesday, 29 October 13

Copyright © 2005 - 2013 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.

Oct 2013
Is Service Optionality really ‘optional’

• The optionality so far has made an implicit assumption
• The API was not optional!
• OSGi does a great job of managing dependencies
• Automatic dependency provisioning

When is ‘optional’ really optional?

Tuesday, 29 October 13

Copyright © 2005 - 2013 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.

Oct 2013
Is Service Optionality really ‘optional’

• The optionality so far has made an implicit assumption
• The API was not optional!
• OSGi does a great job of managing dependencies
• Automatic dependency provisioning
• Prevent resolution unless dependencies are satisfied

When is ‘optional’ really optional?

Tuesday, 29 October 13

Copyright © 2005 - 2013 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.

Oct 2013
Is Service Optionality really ‘optional’

• The optionality so far has made an implicit assumption
• The API was not optional!
• OSGi does a great job of managing dependencies
• Automatic dependency provisioning
• Prevent resolution unless dependencies are satisfied
• Optional dependencies don’t have the same guarantees!
When is ‘optional’ really optional?

Tuesday, 29 October 13

Copyright © 2005 - 2013 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.

Oct 2013
Optional Packages

When is ‘optional’ really optional?

Tuesday, 29 October 13

Copyright © 2005 - 2013 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.

Oct 2013
Handling Package Optionality

When is ‘optional’ really optional?

Tuesday, 29 October 13

Copyright © 2005 - 2013 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.

Oct 2013
Handling Package Optionality

• Having optional package imports makes OSGi more like a normal classpath

When is ‘optional’ really optional?

Tuesday, 29 October 13

Copyright © 2005 - 2013 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.

Oct 2013
Handling Package Optionality

• Having optional package imports makes OSGi more like a normal classpath
• You need to be defensive - ClassNotFoundException could happen!

When is ‘optional’ really optional?

Tuesday, 29 October 13

Copyright © 2005 - 2013 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.

Oct 2013
Handling Package Optionality

• Having optional package imports makes OSGi more like a normal classpath
• You need to be defensive - ClassNotFoundException could happen!
• Unusually for OSGi the factory pattern can be helpful

When is ‘optional’ really optional?

Tuesday, 29 October 13

Copyright © 2005 - 2013 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.

Oct 2013
Handling Package Optionality

• Having optional package imports makes OSGi more like a normal classpath
• You need to be defensive - ClassNotFoundException could happen!
• Unusually for OSGi the factory pattern can be helpful
• Select the implementation with or without the dependency as appropriate

When is ‘optional’ really optional?

Tuesday, 29 October 13

Copyright © 2005 - 2013 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.

Oct 2013
Handling Package Optionality

• Having optional package imports makes OSGi more like a normal classpath
• You need to be defensive - ClassNotFoundException could happen!
• Unusually for OSGi the factory pattern can be helpful
• Select the implementation with or without the dependency as appropriate
• Blueprint can use factories to create managed beans

When is ‘optional’ really optional?

Tuesday, 29 October 13

Copyright © 2005 - 2013 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.

Oct 2013
Handling Package Optionality

• Having optional package imports makes OSGi more like a normal classpath
• You need to be defensive - ClassNotFoundException could happen!
• Unusually for OSGi the factory pattern can be helpful
• Select the implementation with or without the dependency as appropriate
• Blueprint can use factories to create managed beans
• It can be useful to isolate dependent code in a handler class
When is ‘optional’ really optional?

Tuesday, 29 October 13

Copyright © 2005 - 2013 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.

Oct 2013
Handling Package Optionality (2)

When is ‘optional’ really optional?

Tuesday, 29 October 13

Copyright © 2005 - 2013 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.

Oct 2013
Handling Package Optionality (2)

• Optional packages can be very hard to manage

When is ‘optional’ really optional?

Tuesday, 29 October 13

Copyright © 2005 - 2013 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.

Oct 2013
Handling Package Optionality (2)

• Optional packages can be very hard to manage
• Having multiple optional dependencies can explode complexity

When is ‘optional’ really optional?

Tuesday, 29 October 13

Copyright © 2005 - 2013 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.

Oct 2013
Handling Package Optionality (2)

• Optional packages can be very hard to manage
• Having multiple optional dependencies can explode complexity
• Effectively you’re back to the complexity of a Java Classpath!

When is ‘optional’ really optional?

Tuesday, 29 October 13

Copyright © 2005 - 2013 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.

Oct 2013
Handling Package Optionality (2)

• Optional packages can be very hard to manage
• Having multiple optional dependencies can explode complexity
• Effectively you’re back to the complexity of a Java Classpath!
• Possible approaches to consider:

When is ‘optional’ really optional?

Tuesday, 29 October 13

Copyright © 2005 - 2013 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.

Oct 2013
Handling Package Optionality (2)

• Optional packages can be very hard to manage
• Having multiple optional dependencies can explode complexity
• Effectively you’re back to the complexity of a Java Classpath!
• Possible approaches to consider:
• Don’t make the API optional, have two bundles, one with the dependency
and the other one without

When is ‘optional’ really optional?

Tuesday, 29 October 13

Copyright © 2005 - 2013 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.

Oct 2013
Handling Package Optionality (2)

• Optional packages can be very hard to manage
• Having multiple optional dependencies can explode complexity
• Effectively you’re back to the complexity of a Java Classpath!
• Possible approaches to consider:
• Don’t make the API optional, have two bundles, one with the dependency
and the other one without

• If all you care about is ease of use then repackage the API
When is ‘optional’ really optional?

Tuesday, 29 October 13

Copyright © 2005 - 2013 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.

Oct 2013
Handling Package Optionality (2)

• Optional packages can be very hard to manage
• Having multiple optional dependencies can explode complexity
• Effectively you’re back to the complexity of a Java Classpath!
• Possible approaches to consider:
• Don’t make the API optional, have two bundles, one with the dependency
and the other one without

• If all you care about is ease of use then repackage the API
• Keep a careful internal dependency structure
When is ‘optional’ really optional?

Tuesday, 29 October 13

Copyright © 2005 - 2013 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.

Oct 2013
Thanks!

• For more about OSGi...
• Specifications at http://www.osgi.org
• Enterprise OSGi in Action
• http://www.manning.com/cummins

Questions?

http://www.paremus.com
info@paremus.com
When is ‘optional’ really optional?

Tuesday, 29 October 13

Copyright © 2005 - 2013 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.

Oct 2013

More Related Content

Similar to When is 'optional' really optional? - Tim 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...mfrancis
 
Adopting SystemVerilog/OVM
Adopting SystemVerilog/OVM Adopting SystemVerilog/OVM
Adopting SystemVerilog/OVM DVClub
 
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
 
2nd Annual Start-up Launches with Dr. Werner Vogels (SPOT101) | AWS re:Invent...
2nd Annual Start-up Launches with Dr. Werner Vogels (SPOT101) | AWS re:Invent...2nd Annual Start-up Launches with Dr. Werner Vogels (SPOT101) | AWS re:Invent...
2nd Annual Start-up Launches with Dr. Werner Vogels (SPOT101) | AWS re:Invent...Amazon Web Services
 
How Trend Micro Build their Enterprise Security Offering on AWS (SEC307) | AW...
How Trend Micro Build their Enterprise Security Offering on AWS (SEC307) | AW...How Trend Micro Build their Enterprise Security Offering on AWS (SEC307) | AW...
How Trend Micro Build their Enterprise Security Offering on AWS (SEC307) | AW...Amazon Web Services
 
Applying Chaos Engineering to Build Resilient Serverless Applications
Applying Chaos Engineering to Build Resilient Serverless Applications Applying Chaos Engineering to Build Resilient Serverless Applications
Applying Chaos Engineering to Build Resilient Serverless Applications Emrah Samdan
 
5 Practices for Better, Cheaper, Faster Service Delivery
5 Practices for Better, Cheaper, Faster Service Delivery5 Practices for Better, Cheaper, Faster Service Delivery
5 Practices for Better, Cheaper, Faster Service DeliveryRob Schoening
 
GGX 2014 Lari Hotari Modular Monoliths with Spring Boot and Grails 3
GGX 2014 Lari Hotari Modular Monoliths with Spring Boot and Grails 3GGX 2014 Lari Hotari Modular Monoliths with Spring Boot and Grails 3
GGX 2014 Lari Hotari Modular Monoliths with Spring Boot and Grails 3Lari Hotari
 
DevOps: Getting Started with Puppet on Windows
DevOps: Getting Started with Puppet on WindowsDevOps: Getting Started with Puppet on Windows
DevOps: Getting Started with Puppet on WindowsRob Reynolds
 
Modern Software Practices - by Damon Poole
Modern Software Practices - by Damon PooleModern Software Practices - by Damon Poole
Modern Software Practices - by Damon PooleSynerzip
 
Building and Evolving a Dependency-Graph Based Microservice Architecture (La...
 Building and Evolving a Dependency-Graph Based Microservice Architecture (La... Building and Evolving a Dependency-Graph Based Microservice Architecture (La...
Building and Evolving a Dependency-Graph Based Microservice Architecture (La...confluent
 
Kafka Summit 2019 Microservice Orchestration
Kafka Summit 2019 Microservice OrchestrationKafka Summit 2019 Microservice Orchestration
Kafka Summit 2019 Microservice Orchestrationlarsfrancke
 
J&Js adventures with agency best practice & the hybrid MVC framework - Umbrac...
J&Js adventures with agency best practice & the hybrid MVC framework - Umbrac...J&Js adventures with agency best practice & the hybrid MVC framework - Umbrac...
J&Js adventures with agency best practice & the hybrid MVC framework - Umbrac...Jeavon Leopold
 
Serverless Toronto helps Startups
Serverless Toronto helps StartupsServerless Toronto helps Startups
Serverless Toronto helps StartupsDaniel Zivkovic
 
Winning strategies in Test Automation
Winning strategies in Test AutomationWinning strategies in Test Automation
Winning strategies in Test AutomationXBOSoft
 
How to be a Chef (Developer Edition)
How to be a Chef (Developer Edition)How to be a Chef (Developer Edition)
How to be a Chef (Developer Edition)Rodrigo Ayala
 
Asynchronous OSGi – Promises for the Masses - T Ward
Asynchronous OSGi – Promises for the Masses - T WardAsynchronous OSGi – Promises for the Masses - T Ward
Asynchronous OSGi – Promises for the Masses - T Wardmfrancis
 

Similar to When is 'optional' really optional? - Tim Ward (20)

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...
 
Adopting SystemVerilog/OVM
Adopting SystemVerilog/OVM Adopting SystemVerilog/OVM
Adopting SystemVerilog/OVM
 
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
 
2nd Annual Start-up Launches with Dr. Werner Vogels (SPOT101) | AWS re:Invent...
2nd Annual Start-up Launches with Dr. Werner Vogels (SPOT101) | AWS re:Invent...2nd Annual Start-up Launches with Dr. Werner Vogels (SPOT101) | AWS re:Invent...
2nd Annual Start-up Launches with Dr. Werner Vogels (SPOT101) | AWS re:Invent...
 
How Trend Micro Build their Enterprise Security Offering on AWS (SEC307) | AW...
How Trend Micro Build their Enterprise Security Offering on AWS (SEC307) | AW...How Trend Micro Build their Enterprise Security Offering on AWS (SEC307) | AW...
How Trend Micro Build their Enterprise Security Offering on AWS (SEC307) | AW...
 
Cloud Security: Ten Things
Cloud Security: Ten ThingsCloud Security: Ten Things
Cloud Security: Ten Things
 
Uberconf 10
Uberconf 10Uberconf 10
Uberconf 10
 
Applying Chaos Engineering to Build Resilient Serverless Applications
Applying Chaos Engineering to Build Resilient Serverless Applications Applying Chaos Engineering to Build Resilient Serverless Applications
Applying Chaos Engineering to Build Resilient Serverless Applications
 
5 Practices for Better, Cheaper, Faster Service Delivery
5 Practices for Better, Cheaper, Faster Service Delivery5 Practices for Better, Cheaper, Faster Service Delivery
5 Practices for Better, Cheaper, Faster Service Delivery
 
GGX 2014 Lari Hotari Modular Monoliths with Spring Boot and Grails 3
GGX 2014 Lari Hotari Modular Monoliths with Spring Boot and Grails 3GGX 2014 Lari Hotari Modular Monoliths with Spring Boot and Grails 3
GGX 2014 Lari Hotari Modular Monoliths with Spring Boot and Grails 3
 
DevOps: Getting Started with Puppet on Windows
DevOps: Getting Started with Puppet on WindowsDevOps: Getting Started with Puppet on Windows
DevOps: Getting Started with Puppet on Windows
 
Modern Software Practices - by Damon Poole
Modern Software Practices - by Damon PooleModern Software Practices - by Damon Poole
Modern Software Practices - by Damon Poole
 
Building and Evolving a Dependency-Graph Based Microservice Architecture (La...
 Building and Evolving a Dependency-Graph Based Microservice Architecture (La... Building and Evolving a Dependency-Graph Based Microservice Architecture (La...
Building and Evolving a Dependency-Graph Based Microservice Architecture (La...
 
Kafka Summit 2019 Microservice Orchestration
Kafka Summit 2019 Microservice OrchestrationKafka Summit 2019 Microservice Orchestration
Kafka Summit 2019 Microservice Orchestration
 
Using SketchUp with openFoam
Using SketchUp with openFoamUsing SketchUp with openFoam
Using SketchUp with openFoam
 
J&Js adventures with agency best practice & the hybrid MVC framework - Umbrac...
J&Js adventures with agency best practice & the hybrid MVC framework - Umbrac...J&Js adventures with agency best practice & the hybrid MVC framework - Umbrac...
J&Js adventures with agency best practice & the hybrid MVC framework - Umbrac...
 
Serverless Toronto helps Startups
Serverless Toronto helps StartupsServerless Toronto helps Startups
Serverless Toronto helps Startups
 
Winning strategies in Test Automation
Winning strategies in Test AutomationWinning strategies in Test Automation
Winning strategies in Test Automation
 
How to be a Chef (Developer Edition)
How to be a Chef (Developer Edition)How to be a Chef (Developer Edition)
How to be a Chef (Developer Edition)
 
Asynchronous OSGi – Promises for the Masses - T Ward
Asynchronous OSGi – Promises for the Masses - T WardAsynchronous OSGi – Promises for the Masses - T Ward
Asynchronous OSGi – Promises for the Masses - T Ward
 

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

New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024BookNet Canada
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
costume and set research powerpoint presentation
costume and set research powerpoint presentationcostume and set research powerpoint presentation
costume and set research powerpoint presentationphoebematthew05
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDGMarianaLemus7
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 

Recently uploaded (20)

New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptxVulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
costume and set research powerpoint presentation
costume and set research powerpoint presentationcostume and set research powerpoint presentation
costume and set research powerpoint presentation
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDG
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 

When is 'optional' really optional? - Tim Ward

  • 1. When is ‘optional’ really optional? http://www.paremus.com info@paremus.com Tim Ward When is ‘optional’ really optional? Tuesday, 29 October 13 Copyright © 2005 - 2013 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Oct 2013
  • 2. Who is Tim Ward? @TimothyWard • Senior Consulting Engineer and Architect at Paremus • 5 years at IBM developing WebSphere Application Server • Container Implementation experience with Java EE and OSGi, including Blueprint, JPA, EJB and JTA • OSGi Specification lead for JPA and Bytecode Weaving • PMC member of the Apache Aries project • Previous speaker at EclipseCon, Devoxx, Jazoon, JAX London, OSGi Community Event... • Author of Manning’s Enterprise OSGi in Action • http://www.manning.com/cummins When is ‘optional’ really optional? Tuesday, 29 October 13 Copyright © 2005 - 2013 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Oct 2013
  • 3. Optional Services When is ‘optional’ really optional? Tuesday, 29 October 13 Copyright © 2005 - 2013 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Oct 2013
  • 4. Optional Services • OSGi bundles communicate and collaborate using loosely coupled services • Making a service dependency “optional” is pretty easy OSGi API ServiceReference<Foo> ref = ctx .getServiceReference(Foo.class); Declarative Services API private Foo fooService; @Reference(cardinality = OPTIONAL) public synchronized void setFoo(Foo service) { fooService = service; } if(ref != null) { Foo service = ctx.getService(ref); if(service != null) { try { ... public synchronized void unsetFoo(Foo service) { } finally { fooService = (fooService == service) ? null : ctx.ungetService(ref); service; } } } Copyright © 2005 - 2013 Paremus Ltd. Oct 2013 } When is ‘optional’ really optional? May not be reproduced by any means without express permission. All rights reserved. Tuesday, 29 October 13
  • 5. Difficulties with Optional Services • The OSGi API and DS need null checks, which is messy • Blueprint injects a proxy to the service - No more nulls! Blueprint code Blueprint XML private Foo fooService; <blueprint> public void setFoo(Foo service) { fooService = service; } <reference interface=com.paremus.Foo id=”foo” availability=”optional”/> <bean id=”bar” class=”com.paremus.Bar> <property name=”foo” ref=”foo”> </bean> </blueprint> When is ‘optional’ really optional? Tuesday, 29 October 13 Copyright © 2005 - 2013 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Oct 2013
  • 6. Blueprint is the winner! Or is it? When is ‘optional’ really optional? Tuesday, 29 October 13 Copyright © 2005 - 2013 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Oct 2013
  • 7. Blueprint is the winner! Or is it? • At first inspection Blueprint looks much simpler When is ‘optional’ really optional? Tuesday, 29 October 13 Copyright © 2005 - 2013 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Oct 2013
  • 8. Blueprint is the winner! Or is it? • At first inspection Blueprint looks much simpler • But what happens when there is no backing service? When is ‘optional’ really optional? Tuesday, 29 October 13 Copyright © 2005 - 2013 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Oct 2013
  • 9. Blueprint is the winner! Or is it? • At first inspection Blueprint looks much simpler • But what happens when there is no backing service? • Calling an unbound blueprint service proxy blocks up to the “timeout”. If no service arrives then you get a ServiceUnavailableException When is ‘optional’ really optional? Tuesday, 29 October 13 Copyright © 2005 - 2013 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Oct 2013
  • 10. Blueprint is the winner! Or is it? • At first inspection Blueprint looks much simpler • But what happens when there is no backing service? • Calling an unbound blueprint service proxy blocks up to the “timeout”. If no service arrives then you get a ServiceUnavailableException • The default timeout is 5 minutes!!! When is ‘optional’ really optional? Tuesday, 29 October 13 Copyright © 2005 - 2013 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Oct 2013
  • 11. Blueprint is the winner! Or is it? • At first inspection Blueprint looks much simpler • But what happens when there is no backing service? • Calling an unbound blueprint service proxy blocks up to the “timeout”. If no service arrives then you get a ServiceUnavailableException • The default timeout is 5 minutes!!! • You can decrease the timeout (but not to zero) When is ‘optional’ really optional? Tuesday, 29 October 13 Copyright © 2005 - 2013 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Oct 2013
  • 12. Blueprint is the winner! Or is it? • At first inspection Blueprint looks much simpler • But what happens when there is no backing service? • Calling an unbound blueprint service proxy blocks up to the “timeout”. If no service arrives then you get a ServiceUnavailableException • The default timeout is 5 minutes!!! • You can decrease the timeout (but not to zero) • You can use a ReferenceListener (this is horrible code, and risks deadlock) When is ‘optional’ really optional? Tuesday, 29 October 13 Copyright © 2005 - 2013 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Oct 2013
  • 13. Blueprint is the winner! Or is it? • At first inspection Blueprint looks much simpler • But what happens when there is no backing service? • Calling an unbound blueprint service proxy blocks up to the “timeout”. If no service arrives then you get a ServiceUnavailableException • The default timeout is 5 minutes!!! • You can decrease the timeout (but not to zero) • You can use a ReferenceListener (this is horrible code, and risks deadlock) • You can inject a ReferenceList (like DS, but with the wrong cardinality) When is ‘optional’ really optional? Tuesday, 29 October 13 Copyright © 2005 - 2013 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Oct 2013
  • 14. Blueprint 1.1 to the rescue When is ‘optional’ really optional? Tuesday, 29 October 13 Copyright © 2005 - 2013 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Oct 2013
  • 15. Blueprint 1.1 to the rescue • Despite aiming to be “simple” Blueprint 1.0 sucked at optionality... When is ‘optional’ really optional? Tuesday, 29 October 13 Copyright © 2005 - 2013 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Oct 2013
  • 16. Blueprint 1.1 to the rescue • Despite aiming to be “simple” Blueprint 1.0 sucked at optionality... • Blueprint 1.1 proposes several fixes: When is ‘optional’ really optional? Tuesday, 29 October 13 Copyright © 2005 - 2013 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Oct 2013
  • 17. Blueprint 1.1 to the rescue • Despite aiming to be “simple” Blueprint 1.0 sucked at optionality... • Blueprint 1.1 proposes several fixes: • Allow users to have an immediate timeout (no service, no waiting) When is ‘optional’ really optional? Tuesday, 29 October 13 Copyright © 2005 - 2013 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Oct 2013
  • 18. Blueprint 1.1 to the rescue • Despite aiming to be “simple” Blueprint 1.0 sucked at optionality... • Blueprint 1.1 proposes several fixes: • Allow users to have an immediate timeout (no service, no waiting) • Still have to cope with a ServiceUnavailableException When is ‘optional’ really optional? Tuesday, 29 October 13 Copyright © 2005 - 2013 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Oct 2013
  • 19. Blueprint 1.1 to the rescue • Despite aiming to be “simple” Blueprint 1.0 sucked at optionality... • Blueprint 1.1 proposes several fixes: • Allow users to have an immediate timeout (no service, no waiting) • Still have to cope with a ServiceUnavailableException • Allow users to specify a “default” service implementation When is ‘optional’ really optional? Tuesday, 29 October 13 Copyright © 2005 - 2013 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Oct 2013
  • 20. Blueprint 1.1 to the rescue • Despite aiming to be “simple” Blueprint 1.0 sucked at optionality... • Blueprint 1.1 proposes several fixes: • Allow users to have an immediate timeout (no service, no waiting) • Still have to cope with a ServiceUnavailableException • Allow users to specify a “default” service implementation • This can be a nice way to avoid branches in your code When is ‘optional’ really optional? Tuesday, 29 October 13 Copyright © 2005 - 2013 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Oct 2013
  • 21. Blueprint 1.1 to the rescue • Despite aiming to be “simple” Blueprint 1.0 sucked at optionality... • Blueprint 1.1 proposes several fixes: • Allow users to have an immediate timeout (no service, no waiting) • Still have to cope with a ServiceUnavailableException • Allow users to specify a “default” service implementation • This can be a nice way to avoid branches in your code • Allows users to use a “null proxy” as the default implementation When is ‘optional’ really optional? Tuesday, 29 October 13 Copyright © 2005 - 2013 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Oct 2013
  • 22. Blueprint 1.1 to the rescue • Despite aiming to be “simple” Blueprint 1.0 sucked at optionality... • Blueprint 1.1 proposes several fixes: • Allow users to have an immediate timeout (no service, no waiting) • Still have to cope with a ServiceUnavailableException • Allow users to specify a “default” service implementation • This can be a nice way to avoid branches in your code • Allows users to use a “null proxy” as the default implementation • Avoids making you an API provider When is ‘optional’ really optional? Tuesday, 29 October 13 Copyright © 2005 - 2013 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Oct 2013
  • 23. Is Service Optionality really ‘optional’ When is ‘optional’ really optional? Tuesday, 29 October 13 Copyright © 2005 - 2013 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Oct 2013
  • 24. Is Service Optionality really ‘optional’ • The optionality so far has made an implicit assumption When is ‘optional’ really optional? Tuesday, 29 October 13 Copyright © 2005 - 2013 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Oct 2013
  • 25. Is Service Optionality really ‘optional’ • The optionality so far has made an implicit assumption • The API was not optional! When is ‘optional’ really optional? Tuesday, 29 October 13 Copyright © 2005 - 2013 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Oct 2013
  • 26. Is Service Optionality really ‘optional’ • The optionality so far has made an implicit assumption • The API was not optional! • OSGi does a great job of managing dependencies When is ‘optional’ really optional? Tuesday, 29 October 13 Copyright © 2005 - 2013 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Oct 2013
  • 27. Is Service Optionality really ‘optional’ • The optionality so far has made an implicit assumption • The API was not optional! • OSGi does a great job of managing dependencies • Automatic dependency provisioning When is ‘optional’ really optional? Tuesday, 29 October 13 Copyright © 2005 - 2013 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Oct 2013
  • 28. Is Service Optionality really ‘optional’ • The optionality so far has made an implicit assumption • The API was not optional! • OSGi does a great job of managing dependencies • Automatic dependency provisioning • Prevent resolution unless dependencies are satisfied When is ‘optional’ really optional? Tuesday, 29 October 13 Copyright © 2005 - 2013 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Oct 2013
  • 29. Is Service Optionality really ‘optional’ • The optionality so far has made an implicit assumption • The API was not optional! • OSGi does a great job of managing dependencies • Automatic dependency provisioning • Prevent resolution unless dependencies are satisfied • Optional dependencies don’t have the same guarantees! When is ‘optional’ really optional? Tuesday, 29 October 13 Copyright © 2005 - 2013 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Oct 2013
  • 30. Optional Packages When is ‘optional’ really optional? Tuesday, 29 October 13 Copyright © 2005 - 2013 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Oct 2013
  • 31. Handling Package Optionality When is ‘optional’ really optional? Tuesday, 29 October 13 Copyright © 2005 - 2013 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Oct 2013
  • 32. Handling Package Optionality • Having optional package imports makes OSGi more like a normal classpath When is ‘optional’ really optional? Tuesday, 29 October 13 Copyright © 2005 - 2013 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Oct 2013
  • 33. Handling Package Optionality • Having optional package imports makes OSGi more like a normal classpath • You need to be defensive - ClassNotFoundException could happen! When is ‘optional’ really optional? Tuesday, 29 October 13 Copyright © 2005 - 2013 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Oct 2013
  • 34. Handling Package Optionality • Having optional package imports makes OSGi more like a normal classpath • You need to be defensive - ClassNotFoundException could happen! • Unusually for OSGi the factory pattern can be helpful When is ‘optional’ really optional? Tuesday, 29 October 13 Copyright © 2005 - 2013 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Oct 2013
  • 35. Handling Package Optionality • Having optional package imports makes OSGi more like a normal classpath • You need to be defensive - ClassNotFoundException could happen! • Unusually for OSGi the factory pattern can be helpful • Select the implementation with or without the dependency as appropriate When is ‘optional’ really optional? Tuesday, 29 October 13 Copyright © 2005 - 2013 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Oct 2013
  • 36. Handling Package Optionality • Having optional package imports makes OSGi more like a normal classpath • You need to be defensive - ClassNotFoundException could happen! • Unusually for OSGi the factory pattern can be helpful • Select the implementation with or without the dependency as appropriate • Blueprint can use factories to create managed beans When is ‘optional’ really optional? Tuesday, 29 October 13 Copyright © 2005 - 2013 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Oct 2013
  • 37. Handling Package Optionality • Having optional package imports makes OSGi more like a normal classpath • You need to be defensive - ClassNotFoundException could happen! • Unusually for OSGi the factory pattern can be helpful • Select the implementation with or without the dependency as appropriate • Blueprint can use factories to create managed beans • It can be useful to isolate dependent code in a handler class When is ‘optional’ really optional? Tuesday, 29 October 13 Copyright © 2005 - 2013 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Oct 2013
  • 38. Handling Package Optionality (2) When is ‘optional’ really optional? Tuesday, 29 October 13 Copyright © 2005 - 2013 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Oct 2013
  • 39. Handling Package Optionality (2) • Optional packages can be very hard to manage When is ‘optional’ really optional? Tuesday, 29 October 13 Copyright © 2005 - 2013 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Oct 2013
  • 40. Handling Package Optionality (2) • Optional packages can be very hard to manage • Having multiple optional dependencies can explode complexity When is ‘optional’ really optional? Tuesday, 29 October 13 Copyright © 2005 - 2013 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Oct 2013
  • 41. Handling Package Optionality (2) • Optional packages can be very hard to manage • Having multiple optional dependencies can explode complexity • Effectively you’re back to the complexity of a Java Classpath! When is ‘optional’ really optional? Tuesday, 29 October 13 Copyright © 2005 - 2013 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Oct 2013
  • 42. Handling Package Optionality (2) • Optional packages can be very hard to manage • Having multiple optional dependencies can explode complexity • Effectively you’re back to the complexity of a Java Classpath! • Possible approaches to consider: When is ‘optional’ really optional? Tuesday, 29 October 13 Copyright © 2005 - 2013 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Oct 2013
  • 43. Handling Package Optionality (2) • Optional packages can be very hard to manage • Having multiple optional dependencies can explode complexity • Effectively you’re back to the complexity of a Java Classpath! • Possible approaches to consider: • Don’t make the API optional, have two bundles, one with the dependency and the other one without When is ‘optional’ really optional? Tuesday, 29 October 13 Copyright © 2005 - 2013 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Oct 2013
  • 44. Handling Package Optionality (2) • Optional packages can be very hard to manage • Having multiple optional dependencies can explode complexity • Effectively you’re back to the complexity of a Java Classpath! • Possible approaches to consider: • Don’t make the API optional, have two bundles, one with the dependency and the other one without • If all you care about is ease of use then repackage the API When is ‘optional’ really optional? Tuesday, 29 October 13 Copyright © 2005 - 2013 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Oct 2013
  • 45. Handling Package Optionality (2) • Optional packages can be very hard to manage • Having multiple optional dependencies can explode complexity • Effectively you’re back to the complexity of a Java Classpath! • Possible approaches to consider: • Don’t make the API optional, have two bundles, one with the dependency and the other one without • If all you care about is ease of use then repackage the API • Keep a careful internal dependency structure When is ‘optional’ really optional? Tuesday, 29 October 13 Copyright © 2005 - 2013 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Oct 2013
  • 46. Thanks! • For more about OSGi... • Specifications at http://www.osgi.org • Enterprise OSGi in Action • http://www.manning.com/cummins Questions? http://www.paremus.com info@paremus.com When is ‘optional’ really optional? Tuesday, 29 October 13 Copyright © 2005 - 2013 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. Oct 2013