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

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 Ward
mfrancis
 
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
 
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
 
Winning strategies in Test Automation
Winning strategies in Test AutomationWinning strategies in Test Automation
Winning strategies in Test Automation
XBOSoft
 
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
mfrancis
 

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

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
 
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
 
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
 

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

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 

Recently uploaded (20)

Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 

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