SlideShare a Scribd company logo
Making everything better 
©2014 IBM Corporation 
with OSGi 
a happy case study in building a really nice runtime 
Holly Cummins 
cumminsh@uk.ibm.com 
@holly_cummins
Let’s talk about WebSphere. 
©2014 IBM Corporation
Let’s talk about WebSphere. 
Awesome capabilities… 
©2014 IBM Corporation
Let’s talk about WebSphere. 
Awesome capabilities… 
©2014 IBM Corporation
Let’s talk about WebSphere. 
Awesome capabilities… 
… for production. 
©2014 IBM Corporation
Let’s talk about WebSphere. 
Awesome capabilities… 
… for production. 
For development, historically not so well-suited. 
©2014 IBM Corporation
©2014 IBM Corporation 
History
WebSphere Application Server (the full profile) has been 
around since 1998 
©2014 IBM Corporation 
History
WebSphere Application Server (the full profile) has been 
around since 1998 
©2014 IBM Corporation 
History 
forever
WebSphere Application Server (the full profile) has been 
around since 1998 
©2014 IBM Corporation 
Big codebase 
History 
forever
History 
WebSphere Application Server (the full profile) has been 
around since 1998 
©2014 IBM Corporation 
forever 
Big codebase 
Big customer base
History 
WebSphere Application Server (the full profile) has been 
around since 1998 
©2014 IBM Corporation 
forever 
Big codebase 
Big customer base 
Big workloads
History 
WebSphere Application Server (the full profile) has been 
around since 1998 
©2014 IBM Corporation 
forever 
Big codebase 
Big customer base 
Big workloads 
… Big inhibitors to massive change
History 
WebSphere Application Server (the full profile) has been 
around since 1998 
©2014 IBM Corporation 
This is not a 
complaint. 
Big codebase 
Big customer base 
Big workloads 
… Big inhibitors to massive change 
This is a problem we are 
happy to have. 
forever
History 
WebSphere Application Server (the full profile) has been 
around since 1998 
©2014 IBM Corporation 
This is not a 
complaint. 
Big codebase 
Big customer base 
Big workloads 
… Big inhibitors to massive change 
This is a problem we are 
happy to have. 
But it is still a 
problem. 
forever
©2014 IBM Corporation
©2014 IBM Corporation 
Code that has been around 
forever…
©2014 IBM Corporation 
Code that has been around 
forever… 
No matter how good you are, 
or how smart you are
©2014 IBM Corporation 
Code that has been around 
forever… 
No matter how good you are, 
or how smart you are 
If your code lives long enough, 
and is used enough, 
it ends up looking like…
©2014 IBM Corporation 
Code that has been around 
forever… 
No matter how good you are, 
or how smart you are 
?! 
If your code lives long enough, 
and is used enough, 
it ends up looking like…
©2014 IBM Corporation 
Code that has been around 
forever… 
No matter how good you are, 
or how smart you are 
If your code lives long enough, 
and is used enough, 
it ends up looking like… 
dragons 
?!
©2014 IBM Corporation 
Code that has been around 
forever… 
No matter how good you are, 
or how smart you are 
If your code lives long enough, 
and is used enough, 
it ends up looking like… 
dragons 
?! 
Especially code that has 
roots 
going back to late ‘90s…
How do you manage dragons? 
©2014 IBM Corporation 
By Steve Collis from Melbourne, 
Australia [CC-BY-2.0 (http:// 
creativecommons.org/licenses/ 
by/2.0)], via Wikimedia Commons
How do you manage dragons? 
©2014 IBM Corporation 
By Steve Collis from Melbourne, 
Australia [CC-BY-2.0 (http:// 
creativecommons.org/licenses/ 
by/2.0)], via Wikimedia Commons 
Clever WebSphere architects
How do you manage dragons? 
Clever WebSphere architects OSGi 
©2014 IBM Corporation 
By Steve Collis from Melbourne, 
Australia [CC-BY-2.0 (http:// 
creativecommons.org/licenses/ 
by/2.0)], via Wikimedia Commons
©2014 IBM Corporation 
OSGi and WAS: 
The first pass… 
OSGi was included in WAS v6.1, in 2006 
Went from lots of arbitrary jars to a few bundles 
Achieved some modularity enforced by OSGi 
We did not use or expose OSGi services 
Compatibility constraints: WAS is the bottom of the stack 
Assumptions about resource initialization and availability 
Entrenched dependencies between some core elements
Did that fix everything? 
©2014 IBM Corporation
Did that fix everything? 
©2014 IBM Corporation 
Not quite. 
By Steve Collis from 
Melbourne, Australia [CC-BY- 
2.0 (http:// 
creativecommons.org/ 
licenses/by/2.0)], via 
Wikimedia Commons
©2014 IBM Corporation 
What if… 
If we could start over, what would we want?
©2014 IBM Corporation 
What if… 
If we could start over, what would we want? 
Developer-friendly
©2014 IBM Corporation 
What if… 
If we could start over, what would we want? 
Developer-friendly 
Simple
©2014 IBM Corporation 
What if… 
If we could start over, what would we want? 
Developer-friendly 
Simple 
Dynamic
©2014 IBM Corporation 
What if… 
If we could start over, what would we want? 
Developer-friendly 
Simple 
Dynamic 
Light-weight
©2014 IBM Corporation 
What if… 
If we could start over, what would we want? 
Developer-friendly 
Simple 
Dynamic 
Light-weight 
Composable / Flexible
©2014 IBM Corporation 
What if… 
If we could start over, what would we want? 
Developer-friendly 
Simple 
Dynamic 
Light-weight 
Composable / Flexible 
Extensible
©2014 IBM Corporation 
What if… 
If we could start over, what would we want? 
Developer-friendly 
Simple 
Dynamic 
Light-weight 
Composable / Flexible 
Extensible 
human usable 
configuration 
selectable content 
clear API/SPI 
runtime/app 
isolation
©2014 IBM Corporation 
runtime 
only 
some combination of 
technologies 
! 
app-centered 
everything 
What if… 
grokable 
config 
provisioning
©2014 IBM Corporation 
What if… 
grokable 
config 
runtime 
only 
provisioning 
some combination of 
technologies 
! 
app-centered 
everything 
How do we do this?
©2014 IBM Corporation 
What if… 
runtime 
only 
some combination of 
technologies 
! 
everything app-centered 
And yet allow this? 
no restarts
©2014 IBM Corporation 
What if… 
And for crying out loud, 
can we prevent THIS?! 
3rd runtime 
party 
bundle 
B 
system 
bundle 
A
©2014 IBM Corporation 
What if… 
And for crying out loud, 
can we prevent THIS?! 
Applicati 
on 
3rd runtime 
party 
bundle 
B 
system 
bundle 
A
©2014 IBM Corporation 
What if… 
And for crying out loud, 
can we prevent THIS?! 
Applicati 
on 
3rd runtime 
party 
bundle 
B 
system 
bundle 
A
©2014 IBM Corporation 
What if… 
And for crying out loud, 
can we prevent THIS?! 
Applicati 
on 
X 
3rd runtime 
party 
bundle 
B 
system 
bundle 
A
©2014 IBM Corporation 
The egg problem 
“Create a light-weight profile of 
WebSphere that starts in under 2 
seconds… Don’t break any eggs” 
— Ian Robinson (cleverest WebSphere architect)
©2014 IBM Corporation 
The egg problem 
“Create a light-weight profile of 
WebSphere that starts in under 2 
seconds… Don’t break any eggs” 
— Ian Robinson (cleverest WebSphere architect) 
By miya (miya's own file) [CC-BY-3.0 (http://creativecommons.org/licenses/by/3.0)], via Wikimedia Commons
©2014 IBM Corporation 
OSGi maturity model
©2014 IBM Corporation 
OSGi maturity model 
Level 1: Ad Hoc
©2014 IBM Corporation 
OSGi maturity model 
Level 1: Ad Hoc 
Level 2: Modules
©2014 IBM Corporation 
OSGi maturity model 
Level 1: Ad Hoc 
Level 2: Modules 
Level 3: Modularity
©2014 IBM Corporation 
OSGi maturity model 
Level 1: Ad Hoc 
Level 2: Modules 
Level 3: Modularity 
Level 4: Loose coupling
©2014 IBM Corporation 
OSGi maturity model 
Level 1: Ad Hoc 
Level 2: Modules 
Level 3: Modularity 
Level 4: Loose coupling 
Level 5: Devolution
©2014 IBM Corporation 
OSGi maturity model 
Level 1: Ad Hoc 
Level 2: Modules 
Level 3: Modularity 
Level 4: Loose coupling 
Level 5: Devolution 
Level 6: Dynamism
©2014 IBM Corporation 
OSGi maturity model 
Level 1: Ad Hoc 
Level 2: Modules 
Level 3: Modularity 
Level 4: Loose coupling 
Level 5: Devolution 
Level 6: Dynamism 
Level 7: Peter Kriens
©2014 IBM Corporation 
OSGi maturity model 
Level 1: Ad Hoc 
Level 2: Modules 
Level 3: Modularity 
Level 4: Loose coupling 
Level 5: Devolution 
Level 6: Dynamism 
Level 7: Peter Kriens 
Websphere Full Profile
©2014 IBM Corporation 
OSGi maturity model 
Level 1: Ad Hoc 
Level 2: Modules 
Level 3: Modularity 
Level 4: Loose coupling 
Level 5: Devolution 
Level 6: Dynamism 
Level 7: Peter Kriens 
Websphere Liberty Profile
Dealing with our legacy 
We needed a new kernel 
Used the new base to re-group… 
©2014 IBM Corporation 
Lots of code still common with full profile 
Wrap/Shim: New face on old code 
Patch: tweak and replace bits where necessary
Building a kernel from scratch 
OSGi-based for all the reasons 
First-class use of OSGi services 
©2014 IBM Corporation 
Must react to configuration changes 
Runtime composition on-the-fly
©2014 IBM Corporation 
Bundle manifests
Bundle manifests? What manifests? 
We use Eclipse .classpath to 
©2014 IBM Corporation 
Determine project build order 
Generate ant classpath 
Bnd takes care of the rest 
Declare services using annotations 
Bnd makes overrides really easy 
Useful when integrating legacy code
Bundle manifests? What manifests? 
We use Eclipse .classpath to 
©2014 IBM Corporation 
Determine project build order 
Generate ant classpath 
Bnd takes care of the rest 
Declare services using annotations 
Bnd makes overrides really easy 
Useful when integrating legacy code 
New developers need 
to have almost no 
awareness we’re
©2014 IBM Corporation 
Configuration 
Settled on XML for configuration format 
Ubiquitous 
Expressive 
BUT, for simplicity: 
single file 
usable defaults 
<server description=“simple”> 
<featureManager> 
<feature>jsp-2.2</feature> 
</featureManager> 
! 
<httpEndpoint id=“defaultHttpEndpoint” 
httpPort=“9080” httpsPort=“9443” /> 
</server>
©2014 IBM Corporation 
Configuration 
Composable system requires composable 
configuration: 
Individual components own their config 
No centralized repository 
No externally defined global config model
©2014 IBM Corporation 
Configuration 
Composable system requires composable 
configuration: 
Individual components own their config 
No centralized repository 
No externally defined global config model 
Configuration Admin and Metatype 
- job done
©2014 IBM Corporation 
Configuration 
Composable system requires composable 
configuration: 
Individual components own their config 
No centralized repository 
No externally defined global config model 
Configuration Admin and Metatype 
- job mostly done
©2014 IBM Corporation 
Metatype 
Equinox impl + extensions 
Uniform validation of user input 
Define configuration and constraints in one place, it gets used 
everywhere else. 
We favor metatype.xml for this reason 
Custom namespace for additional types and validators 
ibm:type — duration, location, password 
pid/reference
©2014 IBM Corporation 
Metatype 
Equinox impl + extensions 
Uniform validation of user input 
Define configuration everywhere human else. 
readable: 
and constraints in one place, it gets used 
1h30m converted to unit of 
choice 
We favor metatype.xml for this reason 
Custom namespace for additional types and validators 
ibm:type — duration, location, password 
pid/reference
©2014 IBM Corporation 
Metatype 
Equinox impl + extensions 
Uniform validation of user input 
Define configuration everywhere human else. 
readable: 
and constraints in one place, it gets used 
1h30m converted to unit of 
choice 
used by developer tools to help 
prompt for the right kind of 
We favor metatype.xml for this reason 
path: file vs. url 
Custom namespace for additional types and validators 
ibm:type — duration, location, password 
pid/reference
©2014 IBM Corporation 
Metatype 
Equinox impl + extensions 
Uniform validation of user input 
Define configuration everywhere human else. 
readable: 
and constraints in one place, it gets used 
1h30m converted to unit of 
choice 
used by developer tools to help 
prompt for the right kind of 
We favor metatype.xml for this reason 
path: file vs. url 
Custom namespace for additional types and validators 
ibm:type — duration, location, password 
pid/reference 
type=“String” 
ibm:type=“password” 
The value is a “SerializedProtectedString”, 
which is not a String.
©2014 IBM Corporation 
Using OSGi Services… 
? 
Declarative Blueprint 
Services 
yes, there are others. 
We focused on these two.
©2014 IBM Corporation 
Using OSGi Services… 
Who in their right mind wants to manage 
OSGi services themselves?? 
? 
Declarative Blueprint 
Services 
yes, there are others. 
We focused on these two.
©2014 IBM Corporation 
Using OSGi Services… 
Who in their right mind wants to manage 
OSGi services themselves?? 
Exactly. NOBODY. 
? 
Declarative Blueprint 
Services 
yes, there are others. 
We focused on these two.
©2014 IBM Corporation 
Declarative Services 
We chose DS for two main reasons: 
Timing: Blueprint and Aries were just getting started 
Integration with Configuration Admin and Metatype! 
Config injected as one unit 
activate/modified/updated methods 
Service instance creation based on metatype-declared 
factory pid 
DS target filters can be set via configuration
©2014 IBM Corporation 
DS is AWESOME! 
DS is a central part of the Liberty runtime 
CA + M + DS = “magic” 
We do insane things with config-derived 
target filters 
Our runtime would not be what it is 
without DS in the middle of it
©2014 IBM Corporation 
But …
©2014 IBM Corporation 
Remember this? 
We need to prevent 
THIS 
Application 
X 
3rd runtime 
party 
bundle 
B system 
bundle 
A
©2014 IBM Corporation 
Package privacy
©2014 IBM Corporation 
Package privacy 
OSGi lets you keep your internals private.
©2014 IBM Corporation 
Package privacy 
OSGi lets you keep your internals private. 
Your externals are public.
©2014 IBM Corporation 
Package privacy 
OSGi lets you keep your internals private. 
Your externals are public. 
Private Public
©2014 IBM Corporation 
Package privacy 
OSGi lets you keep your internals private. 
Your externals are public. 
Private Public
©2014 IBM Corporation 
Granularity 
bundle C 
bundle A 
bundle B
Granularity bundle D 
bundle E 
bundle F 
bundle G 
bundle H 
©2014 IBM Corporation 
bundle M 
bundle N 
bundle I 
bundle K 
bundle L bundle M 
bundle O bundle J bundle P 
bundle N 
bundle Q 
bundle C 
bundle A 
bundle B
Granularity bundle D 
bundle E 
bundle F 
bundle G 
bundle H 
©2014 IBM Corporation 
bundle M 
bundle N 
bundle I 
bundle K 
bundle L bundle M 
bundle O bundle J bundle P 
bundle N 
bundle Q 
bundle C 
bundle A 
bundle B 
Wait a minute, it wasn’t 
supposed to be that 
public …
Granularity bundle D 
bundle E 
bundle F 
bundle G 
bundle H 
©2014 IBM Corporation 
bundle M 
bundle N 
bundle I 
bundle K 
bundle L bundle M 
bundle O bundle J bundle P 
bundle N 
bundle Q 
bundle C 
bundle A 
bundle B 
Wait a minute, it wasn’t 
supposed to be that 
public …
Granularity bundle D 
bundle E 
bundle F 
bundle G 
bundle H 
©2014 IBM Corporation 
bundle M 
bundle N 
bundle I 
bundle K 
bundle L bundle M 
bundle O bundle J bundle P 
bundle N 
bundle Q 
bundle C 
bundle B bundle A
©2014 IBM Corporation 
Granularity 
bundle D 
bundle F 
bundle E 
bun dle G 
b undle M 
bundle N 
bundle I 
bundle K 
bundle J 
bundle O 
bundle P 
bundle N 
bundle L 
bundle M 
Q 
bundle C 
bundle A 
bundle B
©2014 IBM Corporation 
Granularity 
bundle D 
bundle F 
bundle E 
bun dle G 
b undle M 
bundle N 
bundle I 
bundle K 
bundle J 
bundle O 
bundle P 
bundle N 
bundle L 
bundle M 
Q 
bundle C 
bundle A 
bundle B 
What bundles do I 
actually need?
©2014 IBM Corporation 
Granularity 
bundle D 
bundle F 
bundle E 
bun dle G 
b undle M 
bundle N 
bundle I 
bundle K 
bundle J 
bundle O 
bundle P 
bundle N 
bundle L 
bundle M 
Q 
bundle C 
bundle A 
bundle B 
What bundles do I 
actually need? 
Could I just have an archive, 
please?
©2014 IBM Corporation 
Granularity 
bundle D 
bundle F 
bundle E 
bun dle G 
b undle M 
bundle N 
bundle I 
bundle K 
bundle J 
bundle O 
bundle P 
bundle N 
bundle L 
bundle M 
Q 
bundle C 
bundle A 
bundle B 
What bundles do I 
actually need? 
Could I just have an archive, 
please?
This is not a new requirement 
©2014 IBM Corporation
This is not a new requirement 
Lots of attempts to solve this problem 
©2014 IBM Corporation
This is not a new requirement 
Lots of attempts to solve this problem 
©2014 IBM Corporation 
Eclipse features
This is not a new requirement 
Lots of attempts to solve this problem 
©2014 IBM Corporation 
Eclipse features 
Equinox composite bundles
This is not a new requirement 
Lots of attempts to solve this problem 
©2014 IBM Corporation 
Eclipse features 
Equinox composite bundles 
Apache Aries Enterprise Bundle Archives (.ebas)
This is not a new requirement 
Lots of attempts to solve this problem 
©2014 IBM Corporation 
Eclipse features 
Equinox composite bundles 
Apache Aries Enterprise Bundle Archives (.ebas) 
Liberty features (mark 1)
OSGi Subsystems are AWESOME 
©2014 IBM Corporation
OSGi Subsystems are AWESOME 
A new(ish) OSGi standard 
©2014 IBM Corporation
OSGi Subsystems are AWESOME 
A new(ish) OSGi standard 
©2014 IBM Corporation 
Liberty uses the Apache Aries implementation
OSGi Subsystems are AWESOME 
A new(ish) OSGi standard 
©2014 IBM Corporation 
Liberty uses the Apache Aries implementation 
Granularity
OSGi Subsystems are AWESOME 
A new(ish) OSGi standard 
©2014 IBM Corporation 
Liberty uses the Apache Aries implementation 
Granularity 
Package isolation
OSGi Subsystems are AWESOME 
A new(ish) OSGi standard 
©2014 IBM Corporation 
Liberty uses the Apache Aries implementation 
Granularity 
Package isolation 
Packaging
OSGi Subsystems are AWESOME 
A new(ish) OSGi standard 
©2014 IBM Corporation 
Liberty uses the Apache Aries implementation 
Granularity 
Package isolation 
Packaging
OSGi Subsystems are AWESOME 
A new(ish) OSGi standard 
©2014 IBM Corporation 
Liberty uses the Apache Aries implementation 
Granularity 
Package isolation 
Packaging
OSGi Subsystems are AWESOME 
A new(ish) OSGi standard 
©2014 IBM Corporation 
Liberty uses the Apache Aries implementation 
Granularity 
Package isolation 
Packaging
bundle E 
©2014 IBM Corporation 
When better boxes is not 
bundle D enough 
bundle F 
bundle G 
bundle H 
bundle M 
bundle N 
bundle I 
bundle K 
bundle L bundle M 
bundle O bundle J bundle P 
bundle N 
bundle Q 
bundle C 
bundle A 
bundle B
bundle E 
©2014 IBM Corporation 
When better boxes is not 
bundle D enough 
bundle F 
bundle G 
bundle H 
bundle M 
bundle N 
bundle I 
bundle K 
bundle L bundle M 
bundle O bundle J bundle P 
bundle N 
bundle Q 
bundle C 
bundle A 
bundle B
bundle E 
©2014 IBM Corporation 
When better boxes is not 
bundle D enough 
bundle F 
bundle G 
bundle H 
bundle M 
bundle N 
bundle I 
bundle K 
bundle L bundle M 
bundle O bundle J bundle P 
bundle N 
bundle Q 
bundle C 
bundle A 
bundle B
bundle E 
©2014 IBM Corporation 
When better boxes is not 
bundle D enough 
bundle F 
bundle G 
bundle H 
bundle M 
bundle N 
bundle I 
bundle K 
bundle L bundle M 
bundle O bundle J bundle P 
bundle N 
bundle Q 
bundle C 
bundle A 
bundle B 
Extension
bundle E 
©2014 IBM Corporation 
When better boxes is not 
bundle D enough 
bundle F 
bundle G 
bundle H 
bundle M 
bundle N 
bundle I 
bundle K 
bundle L bundle M 
bundle O bundle J bundle P 
bundle N 
bundle Q 
bundle C 
bundle A 
bundle B 
Resolver 
hook 
Extension
Sophisticated package visibility 
Features explicitly declare API and SPI packages 
(IBM-* metadata in the feature manifest) 
Isolation between API/SPI, apps/extensions/runtime is 
enforced in a few ways: 
©2014 IBM Corporation 
Subsystems (the Aries impl) for OSGi Applications (API) 
Resolver hooks and/or Eclipse Regions for isolation 
between runtime, extensions (SPI), and containers 
(API).
©2014 IBM Corporation 
Provisioning
©2014 IBM Corporation 
Provisioning 
Dynamically install features (subsystems) based on 
configuration
©2014 IBM Corporation 
Provisioning 
Dynamically install features (subsystems) based on 
configuration 
Adding or removing features …
©2014 IBM Corporation 
Provisioning 
Dynamically install features (subsystems) based on 
configuration 
Adding or removing features … 
installs or uninstalls bundles…
©2014 IBM Corporation 
Provisioning 
Dynamically install features (subsystems) based on 
configuration 
Adding or removing features … 
installs or uninstalls bundles… 
which adds or removes configurations…
©2014 IBM Corporation 
Provisioning 
Dynamically install features (subsystems) based on 
configuration 
Adding or removing features … 
installs or uninstalls bundles… 
which adds or removes configurations… 
which triggers the creation or removal of services!
©2014 IBM Corporation 
Provisioning 
Dynamically install features (subsystems) based on 
configuration 
Adding or removing features … 
No restart needed. 
! 
#really 
installs or uninstalls bundles… 
which adds or removes configurations… 
which triggers the creation or removal of services!
©2014 IBM Corporation 
Did we get rid of 
all the dragons?
©2014 IBM Corporation 
Did we get rid of 
all the dragons? 
By Abraham (Own work) CC-BY-3.0 via Wikimedia Commons
©2014 IBM Corporation 
Did we get rid of 
all the dragons? 
The OSGi 
dragon 
By Abraham (Own work) CC-BY-3.0 via Wikimedia Commons
©2014 IBM Corporation 
Did we get rid of 
all the dragons? 
The OSGi 
dragon 
By Abraham (Own work) CC-BY-3.0 via Wikimedia Commons
What version should this be? 
©2014 IBM Corporation
What version should this be? 
This is ALWAYS a hard problem in any non-trivial evolving system 
©2014 IBM Corporation
What version should this be? 
This is ALWAYS a hard problem in any non-trivial evolving system 
©2014 IBM Corporation 
OSGi just makes the problem more obvious
What version should this be? 
This is ALWAYS a hard problem in any non-trivial evolving system 
©2014 IBM Corporation 
OSGi just makes the problem more obvious 
Semantic versioning is …
What version should this be? 
This is ALWAYS a hard problem in any non-trivial evolving system 
©2014 IBM Corporation 
OSGi just makes the problem more obvious 
Semantic versioning is … 
Beautiful
What version should this be? 
This is ALWAYS a hard problem in any non-trivial evolving system 
©2014 IBM Corporation 
OSGi just makes the problem more obvious 
Semantic versioning is … 
Beautiful 
Insufficient
What version should this be? 
This is ALWAYS a hard problem in any non-trivial evolving system 
©2014 IBM Corporation 
OSGi just makes the problem more obvious 
Semantic versioning is … 
Beautiful 
Insufficient 
Our developers never touch versions
What version should this be? 
This is ALWAYS a hard problem in any non-trivial evolving system 
©2014 IBM Corporation 
OSGi just makes the problem more obvious 
Semantic versioning is … 
Beautiful 
Insufficient 
Our developers never touch versions 
That’s what a release team is for :)
How do I interact with X? 
Let DS do it. Really. 
DS is excellent at managing non-trivial service 
dependencies 
It is very unlikely that you will be able to do better 
— just let DS do it. That means: 
©2014 IBM Corporation 
Don’t register services inside a component 
Don’t manage references inside a component
©2014 IBM Corporation 
Why is my test failing 
intermittently ?
©2014 IBM Corporation 
Why is my test failing 
intermittently ? 
Because something hasn’t happened yet.
Service dynamics can hurt! 
©2014 IBM Corporation
Service dynamics can hurt! 
Service dynamics are a huge hurdle for “new” 
developers 
©2014 IBM Corporation
Service dynamics can hurt! 
Service dynamics are a huge hurdle for “new” 
developers 
DI and IoC can turn even experienced brains inside out 
if they aren’t prepared. 
Thankfully, they do seem to recover. 
©2014 IBM Corporation
Service dynamics can hurt! 
Service dynamics are a huge hurdle for “new” 
developers 
DI and IoC can turn even experienced brains inside out 
if they aren’t prepared. 
Thankfully, they do seem to recover. 
DS helps a LOT 
©2014 IBM Corporation
Service dynamics can hurt! 
Service dynamics are a huge hurdle for “new” 
developers 
DI and IoC can turn even experienced brains inside out 
if they aren’t prepared. 
Thankfully, they do seem to recover. 
DS helps a LOT 
But … 
©2014 IBM Corporation
Service dynamics can still hurt. 
©2014 IBM Corporation
Service dynamics can still hurt. 
Being really lazy is hard work! 
©2014 IBM Corporation
Service dynamics can still hurt. 
Being really lazy is hard work! 
Easy to make assumptions 
©2014 IBM Corporation
Service dynamics can still hurt. 
Being really lazy is hard work! 
Easy to make assumptions 
©2014 IBM Corporation 
Service availability
Service dynamics can still hurt. 
Being really lazy is hard work! 
Easy to make assumptions 
©2014 IBM Corporation 
Service availability 
Event ordering
Service dynamics can still hurt. 
Being really lazy is hard work! 
Easy to make assumptions 
©2014 IBM Corporation 
Service availability 
Event ordering 
Especially in our tests
©2014 IBM Corporation 
Is the server started?
©2014 IBM Corporation 
Is the server started? 
The server
©2014 IBM Corporation 
Is the server started? 
The server
©2014 IBM Corporation 
Is the server started? What does this 
boundary even mean 
in an extensible 
system? 
The server
©2014 IBM Corporation 
Is the server started? What does this 
boundary even mean 
in an extensible 
system? 
The server
©2014 IBM Corporation 
Is the server started? What does this 
boundary even mean 
in an extensible 
system? 
The server
©2014 IBM Corporation 
Is the server started? What does this 
boundary even mean 
in an extensible 
system? 
The server
©2014 IBM Corporation 
Is the server started? What does this 
boundary even mean 
in an extensible 
system? 
Care about 
the services 
you care 
about
©2014 IBM Corporation 
What’s the schema for the 
configuration?
©2014 IBM Corporation 
What’s the schema for the 
configuration? 
Devolved configuration is great. But ..
©2014 IBM Corporation 
What’s the schema for the 
configuration? 
Devolved configuration is great. But .. 
Tolerating unrecognised elements is great when your config is correct.
©2014 IBM Corporation 
What’s the schema for the 
configuration? 
Devolved configuration is great. But .. 
Tolerating unrecognised elements is great when your config is correct. 
It’s not so good when your config is wrong.
©2014 IBM Corporation 
What’s the schema for the 
configuration? 
Devolved configuration is great. But .. 
Tolerating unrecognised elements is great when your config is correct. 
It’s not so good when your config is wrong. 
Aggregated documentation is good for users.
©2014 IBM Corporation 
What’s the schema for the 
configuration? 
Devolved configuration is great. But .. 
Tolerating unrecognised elements is great when your config is correct. 
It’s not so good when your config is wrong. 
Aggregated documentation is good for users. 
Aggregated documentation is (sort of) needed for tooling
©2014 IBM Corporation 
What’s the schema for the 
configuration? 
Devolved configuration is great. But .. 
Tolerating unrecognised elements is great when your config is correct. 
It’s not so good when your config is wrong. 
Aggregated documentation is good for users. 
Aggregated documentation is (sort of) needed for tooling 
We generate an xsd at build-time so tooling can validate user 
config
©2014 IBM Corporation 
Is it worth it?
©2014 IBM Corporation 
Is it worth it? 
OH YES.
©2014 IBM Corporation 
Is it worth it? 
OH YES. 
Our server is GREAT.
©2014 IBM Corporation 
Is it worth it? 
OH YES. 
Our server is GREAT. 
Starts in 3s …
©2014 IBM Corporation 
Is it worth it? 
OH YES. 
Our server is GREAT. 
Starts in 3s … 
… which we never have to do anyway…
©2014 IBM Corporation 
Is it worth it? 
OH YES. 
Our server is GREAT. 
Starts in 3s … 
… which we never have to do anyway… 
… because it’s fully dynamic
©2014 IBM Corporation 
Is it worth it? 
OH YES. 
Our server is GREAT. 
Starts in 3s … 
… which we never have to do anyway… 
… because it’s fully dynamic 
Concise, shareable configuration
Did it all turn out the way we 
©2014 IBM Corporation 
expected? 
A funny thing happened while we were 
developing for developers …
OSGi was designed for … 
©2014 IBM Corporation
OSGi was designed for … 
©2014 IBM Corporation 
Small embedded system
… but turned out to be perfect for … 
©2014 IBM Corporation
… but turned out to be perfect for … 
©2014 IBM Corporation
Liberty was designed for … 
©2014 IBM Corporation
Liberty was designed for … 
©2014 IBM Corporation 
Developer-scale
… but turned out to be perfect 
©2014 IBM Corporation 
for…
… but turned out to be perfect 
©2014 IBM Corporation 
for… 
BIG scale
… but turned out to be perfect 
BlueMix server 
farm 
©2014 IBM Corporation 
for… 
BIG scale
… but turned out to be perfect 
BlueMix server 
farm 
©2014 IBM Corporation 
for… 
BIG scale 
Lots of Liberty 
instances
©2014 IBM Corporation 
Thank you! 
Questions? 
@holly_cummins 
www.wasdev.net
©2014 IBM Corporation 
Thank you! 
Questions? 
@holly_cummins 
www.wasdev.net 
Oh, a n d I h ave a b o o k !
©2014 IBM Corporation 
Backup
©2014 IBM Corporation 
</cleanSlate> 
Of course, we didn’t really get a clean 
slate. 
Application compatibility had to be 
preserved. 
!
©2014 IBM Corporation 
Configuration Admin 
We rolled our own (sorry) 
Parse and merge user configuration and bundle-provided 
defaults 
Resolve variables 
Provide configuration to consumers as required by 
the spec (mostly)
Metatype 
Equinox impl + extensions 
human readable: 
Uniform validation of user input 
Define configuration and constraints in one place, it gets used everywhere else. 
1h30m converted to unit of used by developer tools to 
©2014 IBM Corporation 
help prompt for the right 
kind of path: file vs. url 
We favor metatype.xml for this reason 
Custom namespace for additional types and validators 
ibm:type — duration, location, password 
pid/reference 
unique, final, variable, etc. 
http://www-01.ibm.com/support/knowledgecenter/was_beta_liberty/ 
com.ibm.websphere.wlp.nd.multiplatform.doc/ae/rwlp_extensions_osgi_metatype.html
Metatype 
Equinox impl + extensions 
type=“String” 
ibm:type=“password” 
Uniform validation of user input 
Define configuration and constraints in one place, it gets used everywhere else. 
©2014 IBM Corporation 
The value is a “SerializedProtectedString”, 
which is not a String. 
We favor metatype.xml for this reason 
Custom namespace for additional types and validators 
ibm:type — duration, location, password 
pid/reference 
unique, final, variable, etc. 
http://www-01.ibm.com/support/knowledgecenter/was_beta_liberty/ 
com.ibm.websphere.wlp.nd.multiplatform.doc/ae/rwlp_extensions_osgi_metatype.html
Metatype 
Equinox impl + extensions 
Uniform validation of user input 
Define configuration and constraints in one place, it gets used everywhere else. 
©2014 IBM Corporation 
We favor metatype.xml for this reason 
This is some crazy stuff. 
ibm:type=“pid” 
ibm:reference=“specific.service.pid” 
Allows nested configuration elements 
Custom namespace for additional types and validators 
ibm:type — duration, location, password 
pid/reference 
unique, final, variable, etc. 
to define service relationships 
http://www-01.ibm.com/support/knowledgecenter/was_beta_liberty/ 
com.ibm.websphere.wlp.nd.multiplatform.doc/ae/rwlp_extensions_osgi_metatype.html
©2014 IBM Corporation 
Isolation 
We mean this in a good way. 
Liberty runtime serves two masters: 
Typical Application Server paradigm 
(apps strictly separated from runtime) — API 
Platform extender paradigm 
(the “app” is the runtime) — SPI 
Persistent problem: 
how to allow apps or extensions to use their own versions of libraries 
that don't conflict with the runtime!?
Private-package declarations pull in 
redundant classes 
Split packages never end well 
©2014 IBM Corporation

More Related Content

What's hot

Building Fault Tolerant, Highly Available and Secured Architectures - Simon E...
Building Fault Tolerant, Highly Available and Secured Architectures - Simon E...Building Fault Tolerant, Highly Available and Secured Architectures - Simon E...
Building Fault Tolerant, Highly Available and Secured Architectures - Simon E...
Amazon Web Services
 
Scalable, Available and Reliable Cloud Applications with PaaS and Microservices
Scalable, Available and Reliable Cloud Applications with PaaS and MicroservicesScalable, Available and Reliable Cloud Applications with PaaS and Microservices
Scalable, Available and Reliable Cloud Applications with PaaS and Microservices
David Currie
 
BP203 limitless languages
BP203 limitless languagesBP203 limitless languages
BP203 limitless languages
Mark Myers
 
Js foo - Sept 8 upload
Js foo - Sept 8 uploadJs foo - Sept 8 upload
Js foo - Sept 8 upload
Debnath Sinha
 
3978 Why is Java so different... A Session for Cobol/PLI/Assembler Developers
3978   Why is Java so different... A Session for Cobol/PLI/Assembler Developers3978   Why is Java so different... A Session for Cobol/PLI/Assembler Developers
3978 Why is Java so different... A Session for Cobol/PLI/Assembler Developers
nick_garrod
 
Server Day 2009: Spring dm Server by Alef Arendsen
Server Day 2009: Spring dm Server by Alef ArendsenServer Day 2009: Spring dm Server by Alef Arendsen
Server Day 2009: Spring dm Server by Alef Arendsen
JUG Genova
 
Howdah
HowdahHowdah
Howdah
Aurynn Shaw
 
All you know about ASP.NET deployment is wrong!
All you know about ASP.NET deployment is wrong!All you know about ASP.NET deployment is wrong!
All you know about ASP.NET deployment is wrong!
Roger Pence
 
hello-streams :: Introducing the Stream First Mindset (Rene Parra, Homeaway) ...
hello-streams :: Introducing the Stream First Mindset (Rene Parra, Homeaway) ...hello-streams :: Introducing the Stream First Mindset (Rene Parra, Homeaway) ...
hello-streams :: Introducing the Stream First Mindset (Rene Parra, Homeaway) ...
confluent
 
Riena on Eclipse 4
Riena on Eclipse 4Riena on Eclipse 4
Riena on Eclipse 4
heikobarth
 
Enterprise Applications With OSGi and SpringSource dm Server
Enterprise Applications With OSGi and SpringSource dm ServerEnterprise Applications With OSGi and SpringSource dm Server
Enterprise Applications With OSGi and SpringSource dm Server
Sam Brannen
 

What's hot (11)

Building Fault Tolerant, Highly Available and Secured Architectures - Simon E...
Building Fault Tolerant, Highly Available and Secured Architectures - Simon E...Building Fault Tolerant, Highly Available and Secured Architectures - Simon E...
Building Fault Tolerant, Highly Available and Secured Architectures - Simon E...
 
Scalable, Available and Reliable Cloud Applications with PaaS and Microservices
Scalable, Available and Reliable Cloud Applications with PaaS and MicroservicesScalable, Available and Reliable Cloud Applications with PaaS and Microservices
Scalable, Available and Reliable Cloud Applications with PaaS and Microservices
 
BP203 limitless languages
BP203 limitless languagesBP203 limitless languages
BP203 limitless languages
 
Js foo - Sept 8 upload
Js foo - Sept 8 uploadJs foo - Sept 8 upload
Js foo - Sept 8 upload
 
3978 Why is Java so different... A Session for Cobol/PLI/Assembler Developers
3978   Why is Java so different... A Session for Cobol/PLI/Assembler Developers3978   Why is Java so different... A Session for Cobol/PLI/Assembler Developers
3978 Why is Java so different... A Session for Cobol/PLI/Assembler Developers
 
Server Day 2009: Spring dm Server by Alef Arendsen
Server Day 2009: Spring dm Server by Alef ArendsenServer Day 2009: Spring dm Server by Alef Arendsen
Server Day 2009: Spring dm Server by Alef Arendsen
 
Howdah
HowdahHowdah
Howdah
 
All you know about ASP.NET deployment is wrong!
All you know about ASP.NET deployment is wrong!All you know about ASP.NET deployment is wrong!
All you know about ASP.NET deployment is wrong!
 
hello-streams :: Introducing the Stream First Mindset (Rene Parra, Homeaway) ...
hello-streams :: Introducing the Stream First Mindset (Rene Parra, Homeaway) ...hello-streams :: Introducing the Stream First Mindset (Rene Parra, Homeaway) ...
hello-streams :: Introducing the Stream First Mindset (Rene Parra, Homeaway) ...
 
Riena on Eclipse 4
Riena on Eclipse 4Riena on Eclipse 4
Riena on Eclipse 4
 
Enterprise Applications With OSGi and SpringSource dm Server
Enterprise Applications With OSGi and SpringSource dm ServerEnterprise Applications With OSGi and SpringSource dm Server
Enterprise Applications With OSGi and SpringSource dm Server
 

Similar to Making everything better with OSGi - a happy case study in building a really nice runtime - H Cummins

Microprofile at IBM with Liberty
Microprofile at IBM with LibertyMicroprofile at IBM with Liberty
Microprofile at IBM with Liberty
Erin Schnabel
 
Building Serverless Apps with Kafka (Dale Lane, IBM) Kafka Summit London 2019
Building Serverless Apps with Kafka (Dale Lane, IBM) Kafka Summit London 2019Building Serverless Apps with Kafka (Dale Lane, IBM) Kafka Summit London 2019
Building Serverless Apps with Kafka (Dale Lane, IBM) Kafka Summit London 2019
confluent
 
Jcconf 2015 Taipei -- Bluemix java liberty -auto-configration
Jcconf 2015 Taipei -- Bluemix java liberty -auto-configrationJcconf 2015 Taipei -- Bluemix java liberty -auto-configration
Jcconf 2015 Taipei -- Bluemix java liberty -auto-configration
Joseph Chang
 
Eclipse Way
Eclipse WayEclipse Way
Eclipse Way
Tomasz Zarna
 
JavaOne 2014: Java vs JavaScript
JavaOne 2014:   Java vs JavaScriptJavaOne 2014:   Java vs JavaScript
JavaOne 2014: Java vs JavaScript
Chris Bailey
 
AWS Accra Meetup - Developing Modern Applications in the Cloud
AWS Accra Meetup - Developing Modern Applications in the CloudAWS Accra Meetup - Developing Modern Applications in the Cloud
AWS Accra Meetup - Developing Modern Applications in the Cloud
Cobus Bernard
 
[CPT DevOps Meetup] Developing Modern Applications in the Cloud
[CPT DevOps Meetup] Developing Modern Applications in the Cloud[CPT DevOps Meetup] Developing Modern Applications in the Cloud
[CPT DevOps Meetup] Developing Modern Applications in the Cloud
Cobus Bernard
 
AWS Jozi Meetup Developing Modern Applications in the Cloud
AWS Jozi Meetup Developing Modern Applications in the CloudAWS Jozi Meetup Developing Modern Applications in the Cloud
AWS Jozi Meetup Developing Modern Applications in the Cloud
Cobus Bernard
 
OpenStack Atlanta Summit - Build an OpenStack Cluster Before Lunch, Scale Glo...
OpenStack Atlanta Summit - Build an OpenStack Cluster Before Lunch, Scale Glo...OpenStack Atlanta Summit - Build an OpenStack Cluster Before Lunch, Scale Glo...
OpenStack Atlanta Summit - Build an OpenStack Cluster Before Lunch, Scale Glo...
Michael Fork
 
Ria Event Lisbon Jan 2010
Ria Event Lisbon Jan 2010Ria Event Lisbon Jan 2010
Ria Event Lisbon Jan 2010
joaogoncalves
 
What is Codename One - Transcript.pdf
What is Codename One - Transcript.pdfWhat is Codename One - Transcript.pdf
What is Codename One - Transcript.pdf
ShaiAlmog1
 
Getting to the Next Level with Eclipse Concierge - Jan Rellermeyer + Tim Verb...
Getting to the Next Level with Eclipse Concierge - Jan Rellermeyer + Tim Verb...Getting to the Next Level with Eclipse Concierge - Jan Rellermeyer + Tim Verb...
Getting to the Next Level with Eclipse Concierge - Jan Rellermeyer + Tim Verb...
mfrancis
 
DevOps - Moving to DevOps the Amazon Way
DevOps - Moving to DevOps the Amazon WayDevOps - Moving to DevOps the Amazon Way
DevOps - Moving to DevOps the Amazon Way
Amazon Web Services
 
Codemotion Berlin 2017 - Event-driven and serverless applications with IBM Cl...
Codemotion Berlin 2017 - Event-driven and serverless applications with IBM Cl...Codemotion Berlin 2017 - Event-driven and serverless applications with IBM Cl...
Codemotion Berlin 2017 - Event-driven and serverless applications with IBM Cl...
Frederic Lavigne
 
Containers on AWS
Containers on AWSContainers on AWS
Containers on AWS
Reham Maher El-Safarini
 
Automated Lifecycle Management - CloudFoundry on OpenStack
Automated Lifecycle Management - CloudFoundry on OpenStackAutomated Lifecycle Management - CloudFoundry on OpenStack
Automated Lifecycle Management - CloudFoundry on OpenStack
Animesh Singh
 
JLove conference 2020 - Reacting to an Event-Driven World
JLove conference 2020 - Reacting to an Event-Driven WorldJLove conference 2020 - Reacting to an Event-Driven World
JLove conference 2020 - Reacting to an Event-Driven World
Grace Jansen
 
Understanding and building Your Own Docker
Understanding and building Your Own DockerUnderstanding and building Your Own Docker
Understanding and building Your Own Docker
Motiejus Jakštys
 
EMC World 2015 devops-st06 Containers and Converged Infrastructure Deployment
EMC World 2015 devops-st06 Containers and Converged Infrastructure DeploymentEMC World 2015 devops-st06 Containers and Converged Infrastructure Deployment
EMC World 2015 devops-st06 Containers and Converged Infrastructure Deployment
Kendrick Coleman
 
Turning the Heat up on DevOps: Providing a web-based editing experience aroun...
Turning the Heat up on DevOps: Providing a web-based editing experience aroun...Turning the Heat up on DevOps: Providing a web-based editing experience aroun...
Turning the Heat up on DevOps: Providing a web-based editing experience aroun...
Michael Elder
 

Similar to Making everything better with OSGi - a happy case study in building a really nice runtime - H Cummins (20)

Microprofile at IBM with Liberty
Microprofile at IBM with LibertyMicroprofile at IBM with Liberty
Microprofile at IBM with Liberty
 
Building Serverless Apps with Kafka (Dale Lane, IBM) Kafka Summit London 2019
Building Serverless Apps with Kafka (Dale Lane, IBM) Kafka Summit London 2019Building Serverless Apps with Kafka (Dale Lane, IBM) Kafka Summit London 2019
Building Serverless Apps with Kafka (Dale Lane, IBM) Kafka Summit London 2019
 
Jcconf 2015 Taipei -- Bluemix java liberty -auto-configration
Jcconf 2015 Taipei -- Bluemix java liberty -auto-configrationJcconf 2015 Taipei -- Bluemix java liberty -auto-configration
Jcconf 2015 Taipei -- Bluemix java liberty -auto-configration
 
Eclipse Way
Eclipse WayEclipse Way
Eclipse Way
 
JavaOne 2014: Java vs JavaScript
JavaOne 2014:   Java vs JavaScriptJavaOne 2014:   Java vs JavaScript
JavaOne 2014: Java vs JavaScript
 
AWS Accra Meetup - Developing Modern Applications in the Cloud
AWS Accra Meetup - Developing Modern Applications in the CloudAWS Accra Meetup - Developing Modern Applications in the Cloud
AWS Accra Meetup - Developing Modern Applications in the Cloud
 
[CPT DevOps Meetup] Developing Modern Applications in the Cloud
[CPT DevOps Meetup] Developing Modern Applications in the Cloud[CPT DevOps Meetup] Developing Modern Applications in the Cloud
[CPT DevOps Meetup] Developing Modern Applications in the Cloud
 
AWS Jozi Meetup Developing Modern Applications in the Cloud
AWS Jozi Meetup Developing Modern Applications in the CloudAWS Jozi Meetup Developing Modern Applications in the Cloud
AWS Jozi Meetup Developing Modern Applications in the Cloud
 
OpenStack Atlanta Summit - Build an OpenStack Cluster Before Lunch, Scale Glo...
OpenStack Atlanta Summit - Build an OpenStack Cluster Before Lunch, Scale Glo...OpenStack Atlanta Summit - Build an OpenStack Cluster Before Lunch, Scale Glo...
OpenStack Atlanta Summit - Build an OpenStack Cluster Before Lunch, Scale Glo...
 
Ria Event Lisbon Jan 2010
Ria Event Lisbon Jan 2010Ria Event Lisbon Jan 2010
Ria Event Lisbon Jan 2010
 
What is Codename One - Transcript.pdf
What is Codename One - Transcript.pdfWhat is Codename One - Transcript.pdf
What is Codename One - Transcript.pdf
 
Getting to the Next Level with Eclipse Concierge - Jan Rellermeyer + Tim Verb...
Getting to the Next Level with Eclipse Concierge - Jan Rellermeyer + Tim Verb...Getting to the Next Level with Eclipse Concierge - Jan Rellermeyer + Tim Verb...
Getting to the Next Level with Eclipse Concierge - Jan Rellermeyer + Tim Verb...
 
DevOps - Moving to DevOps the Amazon Way
DevOps - Moving to DevOps the Amazon WayDevOps - Moving to DevOps the Amazon Way
DevOps - Moving to DevOps the Amazon Way
 
Codemotion Berlin 2017 - Event-driven and serverless applications with IBM Cl...
Codemotion Berlin 2017 - Event-driven and serverless applications with IBM Cl...Codemotion Berlin 2017 - Event-driven and serverless applications with IBM Cl...
Codemotion Berlin 2017 - Event-driven and serverless applications with IBM Cl...
 
Containers on AWS
Containers on AWSContainers on AWS
Containers on AWS
 
Automated Lifecycle Management - CloudFoundry on OpenStack
Automated Lifecycle Management - CloudFoundry on OpenStackAutomated Lifecycle Management - CloudFoundry on OpenStack
Automated Lifecycle Management - CloudFoundry on OpenStack
 
JLove conference 2020 - Reacting to an Event-Driven World
JLove conference 2020 - Reacting to an Event-Driven WorldJLove conference 2020 - Reacting to an Event-Driven World
JLove conference 2020 - Reacting to an Event-Driven World
 
Understanding and building Your Own Docker
Understanding and building Your Own DockerUnderstanding and building Your Own Docker
Understanding and building Your Own Docker
 
EMC World 2015 devops-st06 Containers and Converged Infrastructure Deployment
EMC World 2015 devops-st06 Containers and Converged Infrastructure DeploymentEMC World 2015 devops-st06 Containers and Converged Infrastructure Deployment
EMC World 2015 devops-st06 Containers and Converged Infrastructure Deployment
 
Turning the Heat up on DevOps: Providing a web-based editing experience aroun...
Turning the Heat up on DevOps: Providing a web-based editing experience aroun...Turning the Heat up on DevOps: Providing a web-based editing experience aroun...
Turning the Heat up on DevOps: Providing a web-based editing experience aroun...
 

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

Freshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-EfficiencyFreshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
ScyllaDB
 
Poznań ACE event - 19.06.2024 Team 24 Wrapup slidedeck
Poznań ACE event - 19.06.2024 Team 24 Wrapup slidedeckPoznań ACE event - 19.06.2024 Team 24 Wrapup slidedeck
Poznań ACE event - 19.06.2024 Team 24 Wrapup slidedeck
FilipTomaszewski5
 
Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)
Jakub Marek
 
From Natural Language to Structured Solr Queries using LLMs
From Natural Language to Structured Solr Queries using LLMsFrom Natural Language to Structured Solr Queries using LLMs
From Natural Language to Structured Solr Queries using LLMs
Sease
 
Day 2 - Intro to UiPath Studio Fundamentals
Day 2 - Intro to UiPath Studio FundamentalsDay 2 - Intro to UiPath Studio Fundamentals
Day 2 - Intro to UiPath Studio Fundamentals
UiPathCommunity
 
Northern Engraving | Nameplate Manufacturing Process - 2024
Northern Engraving | Nameplate Manufacturing Process - 2024Northern Engraving | Nameplate Manufacturing Process - 2024
Northern Engraving | Nameplate Manufacturing Process - 2024
Northern Engraving
 
Christine's Product Research Presentation.pptx
Christine's Product Research Presentation.pptxChristine's Product Research Presentation.pptx
Christine's Product Research Presentation.pptx
christinelarrosa
 
Introduction of Cybersecurity with OSS at Code Europe 2024
Introduction of Cybersecurity with OSS  at Code Europe 2024Introduction of Cybersecurity with OSS  at Code Europe 2024
Introduction of Cybersecurity with OSS at Code Europe 2024
Hiroshi SHIBATA
 
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectorsConnector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
DianaGray10
 
Christine's Supplier Sourcing Presentaion.pptx
Christine's Supplier Sourcing Presentaion.pptxChristine's Supplier Sourcing Presentaion.pptx
Christine's Supplier Sourcing Presentaion.pptx
christinelarrosa
 
A Deep Dive into ScyllaDB's Architecture
A Deep Dive into ScyllaDB's ArchitectureA Deep Dive into ScyllaDB's Architecture
A Deep Dive into ScyllaDB's Architecture
ScyllaDB
 
"Choosing proper type of scaling", Olena Syrota
"Choosing proper type of scaling", Olena Syrota"Choosing proper type of scaling", Olena Syrota
"Choosing proper type of scaling", Olena Syrota
Fwdays
 
"Scaling RAG Applications to serve millions of users", Kevin Goedecke
"Scaling RAG Applications to serve millions of users",  Kevin Goedecke"Scaling RAG Applications to serve millions of users",  Kevin Goedecke
"Scaling RAG Applications to serve millions of users", Kevin Goedecke
Fwdays
 
"NATO Hackathon Winner: AI-Powered Drug Search", Taras Kloba
"NATO Hackathon Winner: AI-Powered Drug Search",  Taras Kloba"NATO Hackathon Winner: AI-Powered Drug Search",  Taras Kloba
"NATO Hackathon Winner: AI-Powered Drug Search", Taras Kloba
Fwdays
 
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge GraphGraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
Neo4j
 
Harnessing the Power of NLP and Knowledge Graphs for Opioid Research
Harnessing the Power of NLP and Knowledge Graphs for Opioid ResearchHarnessing the Power of NLP and Knowledge Graphs for Opioid Research
Harnessing the Power of NLP and Knowledge Graphs for Opioid Research
Neo4j
 
ScyllaDB Tablets: Rethinking Replication
ScyllaDB Tablets: Rethinking ReplicationScyllaDB Tablets: Rethinking Replication
ScyllaDB Tablets: Rethinking Replication
ScyllaDB
 
Leveraging the Graph for Clinical Trials and Standards
Leveraging the Graph for Clinical Trials and StandardsLeveraging the Graph for Clinical Trials and Standards
Leveraging the Graph for Clinical Trials and Standards
Neo4j
 
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
Jason Yip
 
Session 1 - Intro to Robotic Process Automation.pdf
Session 1 - Intro to Robotic Process Automation.pdfSession 1 - Intro to Robotic Process Automation.pdf
Session 1 - Intro to Robotic Process Automation.pdf
UiPathCommunity
 

Recently uploaded (20)

Freshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-EfficiencyFreshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
 
Poznań ACE event - 19.06.2024 Team 24 Wrapup slidedeck
Poznań ACE event - 19.06.2024 Team 24 Wrapup slidedeckPoznań ACE event - 19.06.2024 Team 24 Wrapup slidedeck
Poznań ACE event - 19.06.2024 Team 24 Wrapup slidedeck
 
Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)
 
From Natural Language to Structured Solr Queries using LLMs
From Natural Language to Structured Solr Queries using LLMsFrom Natural Language to Structured Solr Queries using LLMs
From Natural Language to Structured Solr Queries using LLMs
 
Day 2 - Intro to UiPath Studio Fundamentals
Day 2 - Intro to UiPath Studio FundamentalsDay 2 - Intro to UiPath Studio Fundamentals
Day 2 - Intro to UiPath Studio Fundamentals
 
Northern Engraving | Nameplate Manufacturing Process - 2024
Northern Engraving | Nameplate Manufacturing Process - 2024Northern Engraving | Nameplate Manufacturing Process - 2024
Northern Engraving | Nameplate Manufacturing Process - 2024
 
Christine's Product Research Presentation.pptx
Christine's Product Research Presentation.pptxChristine's Product Research Presentation.pptx
Christine's Product Research Presentation.pptx
 
Introduction of Cybersecurity with OSS at Code Europe 2024
Introduction of Cybersecurity with OSS  at Code Europe 2024Introduction of Cybersecurity with OSS  at Code Europe 2024
Introduction of Cybersecurity with OSS at Code Europe 2024
 
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectorsConnector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
 
Christine's Supplier Sourcing Presentaion.pptx
Christine's Supplier Sourcing Presentaion.pptxChristine's Supplier Sourcing Presentaion.pptx
Christine's Supplier Sourcing Presentaion.pptx
 
A Deep Dive into ScyllaDB's Architecture
A Deep Dive into ScyllaDB's ArchitectureA Deep Dive into ScyllaDB's Architecture
A Deep Dive into ScyllaDB's Architecture
 
"Choosing proper type of scaling", Olena Syrota
"Choosing proper type of scaling", Olena Syrota"Choosing proper type of scaling", Olena Syrota
"Choosing proper type of scaling", Olena Syrota
 
"Scaling RAG Applications to serve millions of users", Kevin Goedecke
"Scaling RAG Applications to serve millions of users",  Kevin Goedecke"Scaling RAG Applications to serve millions of users",  Kevin Goedecke
"Scaling RAG Applications to serve millions of users", Kevin Goedecke
 
"NATO Hackathon Winner: AI-Powered Drug Search", Taras Kloba
"NATO Hackathon Winner: AI-Powered Drug Search",  Taras Kloba"NATO Hackathon Winner: AI-Powered Drug Search",  Taras Kloba
"NATO Hackathon Winner: AI-Powered Drug Search", Taras Kloba
 
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge GraphGraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
 
Harnessing the Power of NLP and Knowledge Graphs for Opioid Research
Harnessing the Power of NLP and Knowledge Graphs for Opioid ResearchHarnessing the Power of NLP and Knowledge Graphs for Opioid Research
Harnessing the Power of NLP and Knowledge Graphs for Opioid Research
 
ScyllaDB Tablets: Rethinking Replication
ScyllaDB Tablets: Rethinking ReplicationScyllaDB Tablets: Rethinking Replication
ScyllaDB Tablets: Rethinking Replication
 
Leveraging the Graph for Clinical Trials and Standards
Leveraging the Graph for Clinical Trials and StandardsLeveraging the Graph for Clinical Trials and Standards
Leveraging the Graph for Clinical Trials and Standards
 
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
 
Session 1 - Intro to Robotic Process Automation.pdf
Session 1 - Intro to Robotic Process Automation.pdfSession 1 - Intro to Robotic Process Automation.pdf
Session 1 - Intro to Robotic Process Automation.pdf
 

Making everything better with OSGi - a happy case study in building a really nice runtime - H Cummins

  • 1. Making everything better ©2014 IBM Corporation with OSGi a happy case study in building a really nice runtime Holly Cummins cumminsh@uk.ibm.com @holly_cummins
  • 2. Let’s talk about WebSphere. ©2014 IBM Corporation
  • 3. Let’s talk about WebSphere. Awesome capabilities… ©2014 IBM Corporation
  • 4. Let’s talk about WebSphere. Awesome capabilities… ©2014 IBM Corporation
  • 5. Let’s talk about WebSphere. Awesome capabilities… … for production. ©2014 IBM Corporation
  • 6. Let’s talk about WebSphere. Awesome capabilities… … for production. For development, historically not so well-suited. ©2014 IBM Corporation
  • 8. WebSphere Application Server (the full profile) has been around since 1998 ©2014 IBM Corporation History
  • 9. WebSphere Application Server (the full profile) has been around since 1998 ©2014 IBM Corporation History forever
  • 10. WebSphere Application Server (the full profile) has been around since 1998 ©2014 IBM Corporation Big codebase History forever
  • 11. History WebSphere Application Server (the full profile) has been around since 1998 ©2014 IBM Corporation forever Big codebase Big customer base
  • 12. History WebSphere Application Server (the full profile) has been around since 1998 ©2014 IBM Corporation forever Big codebase Big customer base Big workloads
  • 13. History WebSphere Application Server (the full profile) has been around since 1998 ©2014 IBM Corporation forever Big codebase Big customer base Big workloads … Big inhibitors to massive change
  • 14. History WebSphere Application Server (the full profile) has been around since 1998 ©2014 IBM Corporation This is not a complaint. Big codebase Big customer base Big workloads … Big inhibitors to massive change This is a problem we are happy to have. forever
  • 15. History WebSphere Application Server (the full profile) has been around since 1998 ©2014 IBM Corporation This is not a complaint. Big codebase Big customer base Big workloads … Big inhibitors to massive change This is a problem we are happy to have. But it is still a problem. forever
  • 17. ©2014 IBM Corporation Code that has been around forever…
  • 18. ©2014 IBM Corporation Code that has been around forever… No matter how good you are, or how smart you are
  • 19. ©2014 IBM Corporation Code that has been around forever… No matter how good you are, or how smart you are If your code lives long enough, and is used enough, it ends up looking like…
  • 20. ©2014 IBM Corporation Code that has been around forever… No matter how good you are, or how smart you are ?! If your code lives long enough, and is used enough, it ends up looking like…
  • 21. ©2014 IBM Corporation Code that has been around forever… No matter how good you are, or how smart you are If your code lives long enough, and is used enough, it ends up looking like… dragons ?!
  • 22. ©2014 IBM Corporation Code that has been around forever… No matter how good you are, or how smart you are If your code lives long enough, and is used enough, it ends up looking like… dragons ?! Especially code that has roots going back to late ‘90s…
  • 23. How do you manage dragons? ©2014 IBM Corporation By Steve Collis from Melbourne, Australia [CC-BY-2.0 (http:// creativecommons.org/licenses/ by/2.0)], via Wikimedia Commons
  • 24. How do you manage dragons? ©2014 IBM Corporation By Steve Collis from Melbourne, Australia [CC-BY-2.0 (http:// creativecommons.org/licenses/ by/2.0)], via Wikimedia Commons Clever WebSphere architects
  • 25. How do you manage dragons? Clever WebSphere architects OSGi ©2014 IBM Corporation By Steve Collis from Melbourne, Australia [CC-BY-2.0 (http:// creativecommons.org/licenses/ by/2.0)], via Wikimedia Commons
  • 26. ©2014 IBM Corporation OSGi and WAS: The first pass… OSGi was included in WAS v6.1, in 2006 Went from lots of arbitrary jars to a few bundles Achieved some modularity enforced by OSGi We did not use or expose OSGi services Compatibility constraints: WAS is the bottom of the stack Assumptions about resource initialization and availability Entrenched dependencies between some core elements
  • 27. Did that fix everything? ©2014 IBM Corporation
  • 28. Did that fix everything? ©2014 IBM Corporation Not quite. By Steve Collis from Melbourne, Australia [CC-BY- 2.0 (http:// creativecommons.org/ licenses/by/2.0)], via Wikimedia Commons
  • 29. ©2014 IBM Corporation What if… If we could start over, what would we want?
  • 30. ©2014 IBM Corporation What if… If we could start over, what would we want? Developer-friendly
  • 31. ©2014 IBM Corporation What if… If we could start over, what would we want? Developer-friendly Simple
  • 32. ©2014 IBM Corporation What if… If we could start over, what would we want? Developer-friendly Simple Dynamic
  • 33. ©2014 IBM Corporation What if… If we could start over, what would we want? Developer-friendly Simple Dynamic Light-weight
  • 34. ©2014 IBM Corporation What if… If we could start over, what would we want? Developer-friendly Simple Dynamic Light-weight Composable / Flexible
  • 35. ©2014 IBM Corporation What if… If we could start over, what would we want? Developer-friendly Simple Dynamic Light-weight Composable / Flexible Extensible
  • 36. ©2014 IBM Corporation What if… If we could start over, what would we want? Developer-friendly Simple Dynamic Light-weight Composable / Flexible Extensible human usable configuration selectable content clear API/SPI runtime/app isolation
  • 37. ©2014 IBM Corporation runtime only some combination of technologies ! app-centered everything What if… grokable config provisioning
  • 38. ©2014 IBM Corporation What if… grokable config runtime only provisioning some combination of technologies ! app-centered everything How do we do this?
  • 39. ©2014 IBM Corporation What if… runtime only some combination of technologies ! everything app-centered And yet allow this? no restarts
  • 40. ©2014 IBM Corporation What if… And for crying out loud, can we prevent THIS?! 3rd runtime party bundle B system bundle A
  • 41. ©2014 IBM Corporation What if… And for crying out loud, can we prevent THIS?! Applicati on 3rd runtime party bundle B system bundle A
  • 42. ©2014 IBM Corporation What if… And for crying out loud, can we prevent THIS?! Applicati on 3rd runtime party bundle B system bundle A
  • 43. ©2014 IBM Corporation What if… And for crying out loud, can we prevent THIS?! Applicati on X 3rd runtime party bundle B system bundle A
  • 44. ©2014 IBM Corporation The egg problem “Create a light-weight profile of WebSphere that starts in under 2 seconds… Don’t break any eggs” — Ian Robinson (cleverest WebSphere architect)
  • 45. ©2014 IBM Corporation The egg problem “Create a light-weight profile of WebSphere that starts in under 2 seconds… Don’t break any eggs” — Ian Robinson (cleverest WebSphere architect) By miya (miya's own file) [CC-BY-3.0 (http://creativecommons.org/licenses/by/3.0)], via Wikimedia Commons
  • 46. ©2014 IBM Corporation OSGi maturity model
  • 47. ©2014 IBM Corporation OSGi maturity model Level 1: Ad Hoc
  • 48. ©2014 IBM Corporation OSGi maturity model Level 1: Ad Hoc Level 2: Modules
  • 49. ©2014 IBM Corporation OSGi maturity model Level 1: Ad Hoc Level 2: Modules Level 3: Modularity
  • 50. ©2014 IBM Corporation OSGi maturity model Level 1: Ad Hoc Level 2: Modules Level 3: Modularity Level 4: Loose coupling
  • 51. ©2014 IBM Corporation OSGi maturity model Level 1: Ad Hoc Level 2: Modules Level 3: Modularity Level 4: Loose coupling Level 5: Devolution
  • 52. ©2014 IBM Corporation OSGi maturity model Level 1: Ad Hoc Level 2: Modules Level 3: Modularity Level 4: Loose coupling Level 5: Devolution Level 6: Dynamism
  • 53. ©2014 IBM Corporation OSGi maturity model Level 1: Ad Hoc Level 2: Modules Level 3: Modularity Level 4: Loose coupling Level 5: Devolution Level 6: Dynamism Level 7: Peter Kriens
  • 54. ©2014 IBM Corporation OSGi maturity model Level 1: Ad Hoc Level 2: Modules Level 3: Modularity Level 4: Loose coupling Level 5: Devolution Level 6: Dynamism Level 7: Peter Kriens Websphere Full Profile
  • 55. ©2014 IBM Corporation OSGi maturity model Level 1: Ad Hoc Level 2: Modules Level 3: Modularity Level 4: Loose coupling Level 5: Devolution Level 6: Dynamism Level 7: Peter Kriens Websphere Liberty Profile
  • 56. Dealing with our legacy We needed a new kernel Used the new base to re-group… ©2014 IBM Corporation Lots of code still common with full profile Wrap/Shim: New face on old code Patch: tweak and replace bits where necessary
  • 57. Building a kernel from scratch OSGi-based for all the reasons First-class use of OSGi services ©2014 IBM Corporation Must react to configuration changes Runtime composition on-the-fly
  • 58. ©2014 IBM Corporation Bundle manifests
  • 59. Bundle manifests? What manifests? We use Eclipse .classpath to ©2014 IBM Corporation Determine project build order Generate ant classpath Bnd takes care of the rest Declare services using annotations Bnd makes overrides really easy Useful when integrating legacy code
  • 60. Bundle manifests? What manifests? We use Eclipse .classpath to ©2014 IBM Corporation Determine project build order Generate ant classpath Bnd takes care of the rest Declare services using annotations Bnd makes overrides really easy Useful when integrating legacy code New developers need to have almost no awareness we’re
  • 61. ©2014 IBM Corporation Configuration Settled on XML for configuration format Ubiquitous Expressive BUT, for simplicity: single file usable defaults <server description=“simple”> <featureManager> <feature>jsp-2.2</feature> </featureManager> ! <httpEndpoint id=“defaultHttpEndpoint” httpPort=“9080” httpsPort=“9443” /> </server>
  • 62. ©2014 IBM Corporation Configuration Composable system requires composable configuration: Individual components own their config No centralized repository No externally defined global config model
  • 63. ©2014 IBM Corporation Configuration Composable system requires composable configuration: Individual components own their config No centralized repository No externally defined global config model Configuration Admin and Metatype - job done
  • 64. ©2014 IBM Corporation Configuration Composable system requires composable configuration: Individual components own their config No centralized repository No externally defined global config model Configuration Admin and Metatype - job mostly done
  • 65. ©2014 IBM Corporation Metatype Equinox impl + extensions Uniform validation of user input Define configuration and constraints in one place, it gets used everywhere else. We favor metatype.xml for this reason Custom namespace for additional types and validators ibm:type — duration, location, password pid/reference
  • 66. ©2014 IBM Corporation Metatype Equinox impl + extensions Uniform validation of user input Define configuration everywhere human else. readable: and constraints in one place, it gets used 1h30m converted to unit of choice We favor metatype.xml for this reason Custom namespace for additional types and validators ibm:type — duration, location, password pid/reference
  • 67. ©2014 IBM Corporation Metatype Equinox impl + extensions Uniform validation of user input Define configuration everywhere human else. readable: and constraints in one place, it gets used 1h30m converted to unit of choice used by developer tools to help prompt for the right kind of We favor metatype.xml for this reason path: file vs. url Custom namespace for additional types and validators ibm:type — duration, location, password pid/reference
  • 68. ©2014 IBM Corporation Metatype Equinox impl + extensions Uniform validation of user input Define configuration everywhere human else. readable: and constraints in one place, it gets used 1h30m converted to unit of choice used by developer tools to help prompt for the right kind of We favor metatype.xml for this reason path: file vs. url Custom namespace for additional types and validators ibm:type — duration, location, password pid/reference type=“String” ibm:type=“password” The value is a “SerializedProtectedString”, which is not a String.
  • 69. ©2014 IBM Corporation Using OSGi Services… ? Declarative Blueprint Services yes, there are others. We focused on these two.
  • 70. ©2014 IBM Corporation Using OSGi Services… Who in their right mind wants to manage OSGi services themselves?? ? Declarative Blueprint Services yes, there are others. We focused on these two.
  • 71. ©2014 IBM Corporation Using OSGi Services… Who in their right mind wants to manage OSGi services themselves?? Exactly. NOBODY. ? Declarative Blueprint Services yes, there are others. We focused on these two.
  • 72. ©2014 IBM Corporation Declarative Services We chose DS for two main reasons: Timing: Blueprint and Aries were just getting started Integration with Configuration Admin and Metatype! Config injected as one unit activate/modified/updated methods Service instance creation based on metatype-declared factory pid DS target filters can be set via configuration
  • 73. ©2014 IBM Corporation DS is AWESOME! DS is a central part of the Liberty runtime CA + M + DS = “magic” We do insane things with config-derived target filters Our runtime would not be what it is without DS in the middle of it
  • 75. ©2014 IBM Corporation Remember this? We need to prevent THIS Application X 3rd runtime party bundle B system bundle A
  • 76. ©2014 IBM Corporation Package privacy
  • 77. ©2014 IBM Corporation Package privacy OSGi lets you keep your internals private.
  • 78. ©2014 IBM Corporation Package privacy OSGi lets you keep your internals private. Your externals are public.
  • 79. ©2014 IBM Corporation Package privacy OSGi lets you keep your internals private. Your externals are public. Private Public
  • 80. ©2014 IBM Corporation Package privacy OSGi lets you keep your internals private. Your externals are public. Private Public
  • 81. ©2014 IBM Corporation Granularity bundle C bundle A bundle B
  • 82. Granularity bundle D bundle E bundle F bundle G bundle H ©2014 IBM Corporation bundle M bundle N bundle I bundle K bundle L bundle M bundle O bundle J bundle P bundle N bundle Q bundle C bundle A bundle B
  • 83. Granularity bundle D bundle E bundle F bundle G bundle H ©2014 IBM Corporation bundle M bundle N bundle I bundle K bundle L bundle M bundle O bundle J bundle P bundle N bundle Q bundle C bundle A bundle B Wait a minute, it wasn’t supposed to be that public …
  • 84. Granularity bundle D bundle E bundle F bundle G bundle H ©2014 IBM Corporation bundle M bundle N bundle I bundle K bundle L bundle M bundle O bundle J bundle P bundle N bundle Q bundle C bundle A bundle B Wait a minute, it wasn’t supposed to be that public …
  • 85. Granularity bundle D bundle E bundle F bundle G bundle H ©2014 IBM Corporation bundle M bundle N bundle I bundle K bundle L bundle M bundle O bundle J bundle P bundle N bundle Q bundle C bundle B bundle A
  • 86. ©2014 IBM Corporation Granularity bundle D bundle F bundle E bun dle G b undle M bundle N bundle I bundle K bundle J bundle O bundle P bundle N bundle L bundle M Q bundle C bundle A bundle B
  • 87. ©2014 IBM Corporation Granularity bundle D bundle F bundle E bun dle G b undle M bundle N bundle I bundle K bundle J bundle O bundle P bundle N bundle L bundle M Q bundle C bundle A bundle B What bundles do I actually need?
  • 88. ©2014 IBM Corporation Granularity bundle D bundle F bundle E bun dle G b undle M bundle N bundle I bundle K bundle J bundle O bundle P bundle N bundle L bundle M Q bundle C bundle A bundle B What bundles do I actually need? Could I just have an archive, please?
  • 89. ©2014 IBM Corporation Granularity bundle D bundle F bundle E bun dle G b undle M bundle N bundle I bundle K bundle J bundle O bundle P bundle N bundle L bundle M Q bundle C bundle A bundle B What bundles do I actually need? Could I just have an archive, please?
  • 90. This is not a new requirement ©2014 IBM Corporation
  • 91. This is not a new requirement Lots of attempts to solve this problem ©2014 IBM Corporation
  • 92. This is not a new requirement Lots of attempts to solve this problem ©2014 IBM Corporation Eclipse features
  • 93. This is not a new requirement Lots of attempts to solve this problem ©2014 IBM Corporation Eclipse features Equinox composite bundles
  • 94. This is not a new requirement Lots of attempts to solve this problem ©2014 IBM Corporation Eclipse features Equinox composite bundles Apache Aries Enterprise Bundle Archives (.ebas)
  • 95. This is not a new requirement Lots of attempts to solve this problem ©2014 IBM Corporation Eclipse features Equinox composite bundles Apache Aries Enterprise Bundle Archives (.ebas) Liberty features (mark 1)
  • 96. OSGi Subsystems are AWESOME ©2014 IBM Corporation
  • 97. OSGi Subsystems are AWESOME A new(ish) OSGi standard ©2014 IBM Corporation
  • 98. OSGi Subsystems are AWESOME A new(ish) OSGi standard ©2014 IBM Corporation Liberty uses the Apache Aries implementation
  • 99. OSGi Subsystems are AWESOME A new(ish) OSGi standard ©2014 IBM Corporation Liberty uses the Apache Aries implementation Granularity
  • 100. OSGi Subsystems are AWESOME A new(ish) OSGi standard ©2014 IBM Corporation Liberty uses the Apache Aries implementation Granularity Package isolation
  • 101. OSGi Subsystems are AWESOME A new(ish) OSGi standard ©2014 IBM Corporation Liberty uses the Apache Aries implementation Granularity Package isolation Packaging
  • 102. OSGi Subsystems are AWESOME A new(ish) OSGi standard ©2014 IBM Corporation Liberty uses the Apache Aries implementation Granularity Package isolation Packaging
  • 103. OSGi Subsystems are AWESOME A new(ish) OSGi standard ©2014 IBM Corporation Liberty uses the Apache Aries implementation Granularity Package isolation Packaging
  • 104. OSGi Subsystems are AWESOME A new(ish) OSGi standard ©2014 IBM Corporation Liberty uses the Apache Aries implementation Granularity Package isolation Packaging
  • 105. bundle E ©2014 IBM Corporation When better boxes is not bundle D enough bundle F bundle G bundle H bundle M bundle N bundle I bundle K bundle L bundle M bundle O bundle J bundle P bundle N bundle Q bundle C bundle A bundle B
  • 106. bundle E ©2014 IBM Corporation When better boxes is not bundle D enough bundle F bundle G bundle H bundle M bundle N bundle I bundle K bundle L bundle M bundle O bundle J bundle P bundle N bundle Q bundle C bundle A bundle B
  • 107. bundle E ©2014 IBM Corporation When better boxes is not bundle D enough bundle F bundle G bundle H bundle M bundle N bundle I bundle K bundle L bundle M bundle O bundle J bundle P bundle N bundle Q bundle C bundle A bundle B
  • 108. bundle E ©2014 IBM Corporation When better boxes is not bundle D enough bundle F bundle G bundle H bundle M bundle N bundle I bundle K bundle L bundle M bundle O bundle J bundle P bundle N bundle Q bundle C bundle A bundle B Extension
  • 109. bundle E ©2014 IBM Corporation When better boxes is not bundle D enough bundle F bundle G bundle H bundle M bundle N bundle I bundle K bundle L bundle M bundle O bundle J bundle P bundle N bundle Q bundle C bundle A bundle B Resolver hook Extension
  • 110. Sophisticated package visibility Features explicitly declare API and SPI packages (IBM-* metadata in the feature manifest) Isolation between API/SPI, apps/extensions/runtime is enforced in a few ways: ©2014 IBM Corporation Subsystems (the Aries impl) for OSGi Applications (API) Resolver hooks and/or Eclipse Regions for isolation between runtime, extensions (SPI), and containers (API).
  • 111. ©2014 IBM Corporation Provisioning
  • 112. ©2014 IBM Corporation Provisioning Dynamically install features (subsystems) based on configuration
  • 113. ©2014 IBM Corporation Provisioning Dynamically install features (subsystems) based on configuration Adding or removing features …
  • 114. ©2014 IBM Corporation Provisioning Dynamically install features (subsystems) based on configuration Adding or removing features … installs or uninstalls bundles…
  • 115. ©2014 IBM Corporation Provisioning Dynamically install features (subsystems) based on configuration Adding or removing features … installs or uninstalls bundles… which adds or removes configurations…
  • 116. ©2014 IBM Corporation Provisioning Dynamically install features (subsystems) based on configuration Adding or removing features … installs or uninstalls bundles… which adds or removes configurations… which triggers the creation or removal of services!
  • 117. ©2014 IBM Corporation Provisioning Dynamically install features (subsystems) based on configuration Adding or removing features … No restart needed. ! #really installs or uninstalls bundles… which adds or removes configurations… which triggers the creation or removal of services!
  • 118. ©2014 IBM Corporation Did we get rid of all the dragons?
  • 119. ©2014 IBM Corporation Did we get rid of all the dragons? By Abraham (Own work) CC-BY-3.0 via Wikimedia Commons
  • 120. ©2014 IBM Corporation Did we get rid of all the dragons? The OSGi dragon By Abraham (Own work) CC-BY-3.0 via Wikimedia Commons
  • 121. ©2014 IBM Corporation Did we get rid of all the dragons? The OSGi dragon By Abraham (Own work) CC-BY-3.0 via Wikimedia Commons
  • 122. What version should this be? ©2014 IBM Corporation
  • 123. What version should this be? This is ALWAYS a hard problem in any non-trivial evolving system ©2014 IBM Corporation
  • 124. What version should this be? This is ALWAYS a hard problem in any non-trivial evolving system ©2014 IBM Corporation OSGi just makes the problem more obvious
  • 125. What version should this be? This is ALWAYS a hard problem in any non-trivial evolving system ©2014 IBM Corporation OSGi just makes the problem more obvious Semantic versioning is …
  • 126. What version should this be? This is ALWAYS a hard problem in any non-trivial evolving system ©2014 IBM Corporation OSGi just makes the problem more obvious Semantic versioning is … Beautiful
  • 127. What version should this be? This is ALWAYS a hard problem in any non-trivial evolving system ©2014 IBM Corporation OSGi just makes the problem more obvious Semantic versioning is … Beautiful Insufficient
  • 128. What version should this be? This is ALWAYS a hard problem in any non-trivial evolving system ©2014 IBM Corporation OSGi just makes the problem more obvious Semantic versioning is … Beautiful Insufficient Our developers never touch versions
  • 129. What version should this be? This is ALWAYS a hard problem in any non-trivial evolving system ©2014 IBM Corporation OSGi just makes the problem more obvious Semantic versioning is … Beautiful Insufficient Our developers never touch versions That’s what a release team is for :)
  • 130. How do I interact with X? Let DS do it. Really. DS is excellent at managing non-trivial service dependencies It is very unlikely that you will be able to do better — just let DS do it. That means: ©2014 IBM Corporation Don’t register services inside a component Don’t manage references inside a component
  • 131. ©2014 IBM Corporation Why is my test failing intermittently ?
  • 132. ©2014 IBM Corporation Why is my test failing intermittently ? Because something hasn’t happened yet.
  • 133. Service dynamics can hurt! ©2014 IBM Corporation
  • 134. Service dynamics can hurt! Service dynamics are a huge hurdle for “new” developers ©2014 IBM Corporation
  • 135. Service dynamics can hurt! Service dynamics are a huge hurdle for “new” developers DI and IoC can turn even experienced brains inside out if they aren’t prepared. Thankfully, they do seem to recover. ©2014 IBM Corporation
  • 136. Service dynamics can hurt! Service dynamics are a huge hurdle for “new” developers DI and IoC can turn even experienced brains inside out if they aren’t prepared. Thankfully, they do seem to recover. DS helps a LOT ©2014 IBM Corporation
  • 137. Service dynamics can hurt! Service dynamics are a huge hurdle for “new” developers DI and IoC can turn even experienced brains inside out if they aren’t prepared. Thankfully, they do seem to recover. DS helps a LOT But … ©2014 IBM Corporation
  • 138. Service dynamics can still hurt. ©2014 IBM Corporation
  • 139. Service dynamics can still hurt. Being really lazy is hard work! ©2014 IBM Corporation
  • 140. Service dynamics can still hurt. Being really lazy is hard work! Easy to make assumptions ©2014 IBM Corporation
  • 141. Service dynamics can still hurt. Being really lazy is hard work! Easy to make assumptions ©2014 IBM Corporation Service availability
  • 142. Service dynamics can still hurt. Being really lazy is hard work! Easy to make assumptions ©2014 IBM Corporation Service availability Event ordering
  • 143. Service dynamics can still hurt. Being really lazy is hard work! Easy to make assumptions ©2014 IBM Corporation Service availability Event ordering Especially in our tests
  • 144. ©2014 IBM Corporation Is the server started?
  • 145. ©2014 IBM Corporation Is the server started? The server
  • 146. ©2014 IBM Corporation Is the server started? The server
  • 147. ©2014 IBM Corporation Is the server started? What does this boundary even mean in an extensible system? The server
  • 148. ©2014 IBM Corporation Is the server started? What does this boundary even mean in an extensible system? The server
  • 149. ©2014 IBM Corporation Is the server started? What does this boundary even mean in an extensible system? The server
  • 150. ©2014 IBM Corporation Is the server started? What does this boundary even mean in an extensible system? The server
  • 151. ©2014 IBM Corporation Is the server started? What does this boundary even mean in an extensible system? Care about the services you care about
  • 152. ©2014 IBM Corporation What’s the schema for the configuration?
  • 153. ©2014 IBM Corporation What’s the schema for the configuration? Devolved configuration is great. But ..
  • 154. ©2014 IBM Corporation What’s the schema for the configuration? Devolved configuration is great. But .. Tolerating unrecognised elements is great when your config is correct.
  • 155. ©2014 IBM Corporation What’s the schema for the configuration? Devolved configuration is great. But .. Tolerating unrecognised elements is great when your config is correct. It’s not so good when your config is wrong.
  • 156. ©2014 IBM Corporation What’s the schema for the configuration? Devolved configuration is great. But .. Tolerating unrecognised elements is great when your config is correct. It’s not so good when your config is wrong. Aggregated documentation is good for users.
  • 157. ©2014 IBM Corporation What’s the schema for the configuration? Devolved configuration is great. But .. Tolerating unrecognised elements is great when your config is correct. It’s not so good when your config is wrong. Aggregated documentation is good for users. Aggregated documentation is (sort of) needed for tooling
  • 158. ©2014 IBM Corporation What’s the schema for the configuration? Devolved configuration is great. But .. Tolerating unrecognised elements is great when your config is correct. It’s not so good when your config is wrong. Aggregated documentation is good for users. Aggregated documentation is (sort of) needed for tooling We generate an xsd at build-time so tooling can validate user config
  • 159. ©2014 IBM Corporation Is it worth it?
  • 160. ©2014 IBM Corporation Is it worth it? OH YES.
  • 161. ©2014 IBM Corporation Is it worth it? OH YES. Our server is GREAT.
  • 162. ©2014 IBM Corporation Is it worth it? OH YES. Our server is GREAT. Starts in 3s …
  • 163. ©2014 IBM Corporation Is it worth it? OH YES. Our server is GREAT. Starts in 3s … … which we never have to do anyway…
  • 164. ©2014 IBM Corporation Is it worth it? OH YES. Our server is GREAT. Starts in 3s … … which we never have to do anyway… … because it’s fully dynamic
  • 165. ©2014 IBM Corporation Is it worth it? OH YES. Our server is GREAT. Starts in 3s … … which we never have to do anyway… … because it’s fully dynamic Concise, shareable configuration
  • 166. Did it all turn out the way we ©2014 IBM Corporation expected? A funny thing happened while we were developing for developers …
  • 167. OSGi was designed for … ©2014 IBM Corporation
  • 168. OSGi was designed for … ©2014 IBM Corporation Small embedded system
  • 169. … but turned out to be perfect for … ©2014 IBM Corporation
  • 170. … but turned out to be perfect for … ©2014 IBM Corporation
  • 171. Liberty was designed for … ©2014 IBM Corporation
  • 172. Liberty was designed for … ©2014 IBM Corporation Developer-scale
  • 173. … but turned out to be perfect ©2014 IBM Corporation for…
  • 174. … but turned out to be perfect ©2014 IBM Corporation for… BIG scale
  • 175. … but turned out to be perfect BlueMix server farm ©2014 IBM Corporation for… BIG scale
  • 176. … but turned out to be perfect BlueMix server farm ©2014 IBM Corporation for… BIG scale Lots of Liberty instances
  • 177. ©2014 IBM Corporation Thank you! Questions? @holly_cummins www.wasdev.net
  • 178. ©2014 IBM Corporation Thank you! Questions? @holly_cummins www.wasdev.net Oh, a n d I h ave a b o o k !
  • 180. ©2014 IBM Corporation </cleanSlate> Of course, we didn’t really get a clean slate. Application compatibility had to be preserved. !
  • 181. ©2014 IBM Corporation Configuration Admin We rolled our own (sorry) Parse and merge user configuration and bundle-provided defaults Resolve variables Provide configuration to consumers as required by the spec (mostly)
  • 182. Metatype Equinox impl + extensions human readable: Uniform validation of user input Define configuration and constraints in one place, it gets used everywhere else. 1h30m converted to unit of used by developer tools to ©2014 IBM Corporation help prompt for the right kind of path: file vs. url We favor metatype.xml for this reason Custom namespace for additional types and validators ibm:type — duration, location, password pid/reference unique, final, variable, etc. http://www-01.ibm.com/support/knowledgecenter/was_beta_liberty/ com.ibm.websphere.wlp.nd.multiplatform.doc/ae/rwlp_extensions_osgi_metatype.html
  • 183. Metatype Equinox impl + extensions type=“String” ibm:type=“password” Uniform validation of user input Define configuration and constraints in one place, it gets used everywhere else. ©2014 IBM Corporation The value is a “SerializedProtectedString”, which is not a String. We favor metatype.xml for this reason Custom namespace for additional types and validators ibm:type — duration, location, password pid/reference unique, final, variable, etc. http://www-01.ibm.com/support/knowledgecenter/was_beta_liberty/ com.ibm.websphere.wlp.nd.multiplatform.doc/ae/rwlp_extensions_osgi_metatype.html
  • 184. Metatype Equinox impl + extensions Uniform validation of user input Define configuration and constraints in one place, it gets used everywhere else. ©2014 IBM Corporation We favor metatype.xml for this reason This is some crazy stuff. ibm:type=“pid” ibm:reference=“specific.service.pid” Allows nested configuration elements Custom namespace for additional types and validators ibm:type — duration, location, password pid/reference unique, final, variable, etc. to define service relationships http://www-01.ibm.com/support/knowledgecenter/was_beta_liberty/ com.ibm.websphere.wlp.nd.multiplatform.doc/ae/rwlp_extensions_osgi_metatype.html
  • 185. ©2014 IBM Corporation Isolation We mean this in a good way. Liberty runtime serves two masters: Typical Application Server paradigm (apps strictly separated from runtime) — API Platform extender paradigm (the “app” is the runtime) — SPI Persistent problem: how to allow apps or extensions to use their own versions of libraries that don't conflict with the runtime!?
  • 186. Private-package declarations pull in redundant classes Split packages never end well ©2014 IBM Corporation