SlideShare a Scribd company logo
1 of 41
Download to read offline
Subsystems, Repository, Contracts and more...
David Bosschaert
OSGi Application Provisioning
Deep Dive
1 of 41
About me
David Bosschaert (davidb@apache.org)
Works at Adobe R&D Basel
Co-chair OSGi EEG
Apache committer
Open-source and cloud
enthusiast
2 of 41
Topics
A look at the latest Declarative Services
Using Subsystems to package and deploy
OSGi Repository to resolve dependencies
Portable Java Contracts
... demo throughout ...
3 of 41
Running Example
Device Monitor
... a little webapp to monitor all your gadgets ...
4 of 41
Declarative Services
Being updated for Enterprise R6
Improved Configuration Admin
integration
Introspective API
Prototype Service Factory
... other smaller improvements ...
5 of 41
DS Configured Component
iimmppoorrtt javax.servlet.SSeerrvvlleett;
iimmppoorrtt org.osgi.service.component.annotations.*;
iimmppoorrtt org.osgi.service.http.HHttttppSSeerrvviiccee;
@Component
ppuubblliicc ccllaassss DDeevviicceeMMoonniittoorr {
pprriivvaattee HHttttppSSeerrvviiccee httpService;
@Reference
ppuubblliicc vvooiidd setHttpService(HHttttppSSeerrvviiccee svc) {
httpService = svc;
}
@Activate
ppuubblliicc vvooiidd activate(MMoonniittoorrCCoonnffiigg cfg) {
SSttrriinngg rootCtx = cfg.ctxPrefix();
iiff (!rootCtx.endsWith("/"))
rootCtx = rootCtx + "/";
registerServlet(rootCtx + "dmon", nneeww MMoonniittoorrSSeerrvvlleett());
registerServlet(rootCtx + "device", nneeww DDeevviicceeSSeerrvvlleett());
}
pprriivvaattee vvooiidd registerServlet(SSttrriinngg ctx, SSeerrvvlleett servlet) {
httpService.registerServlet(ctx, servlet, nnuullll, nnuullll);
}
}
6 of 41
Configuration using
Annotations
ppuubblliicc @interface MMoonniittoorrCCoonnffiigg {
SSttrriinngg ctxPrefix() ddeeffaauulltt "/";
bboooolleeaann autoRefresh() ddeeffaauulltt ffaallssee;
iinntt interval() ddeeffaauulltt 30;
}
annotation used as an ordinary interface,
with added defaults
... weird but works great ...
7 of 41
Example Bundle Manifest
BBuunnddllee-MMaanniiffeessttVVeerrssiioonn: 2
BBuunnddllee-SSyymmbboolliiccNNaammee: devicemon-ds
BBuunnddllee-VVeerrssiioonn: 0.0.1
SSeerrvviiccee-CCoommppoonneenntt: OSGI-INF/component.xml
IImmppoorrtt-PPaacckkaaggee: javax.servlet;version="[2.5,3)",
org.coderthoughts.devicemon.ssh;version="[1.0,2)",
org.osgi.service.http;version="[1.2,2)"
RReeqquuiirree-CCaappaabbiilliittyy:
osgi.extender;filter:="(&(osgi.extender=osgi.component)
(version>=1.2.0)(!(version>=2.0.0)))",
osgi.whiteboard;filter:="(osgi.whiteboard=osgi.http)"
Note that the javax.servlet import should really use
contracts!
8 of 41
Finished app...
2 Bundles
devicemon.jar
depends on DS and HTTP Service
devicemon-ssh.jar
depends on Apache Mina SSHD
9 of 41
Deploy it...
Now I want to easily deploy my app
⟱
create a Subsystem of it!
10 of 41
Subsystems
OSGi Enterprise spec 134
A subsystem...
collection of bundles put together
feature - everything shared
application - isolated, nothing shared out
composite - configurable in-between
a zip file with .esa extension
can be nested
can depend on bundles or other
subsystems
Subsystems can use OSGi Repositories to
resolve dependencies
11 of 41
devicemon-ds.esa
Just a zip file...
$ tar tvf devicemon-ds.esa
-rwxrwxrwx 99 8 JJaann 15:40 OSGI-INF/SUBSYSTEM.MF
-rwxrwxrwx 18184 8 JJaann 16:01 devicemon-ds.jar
-rwxrwxrwx 5968 8 JJaann 16:02 devicemon-ssh.jar
Subsystem Manifest
$ cat OSGI-INF/SUBSYSTEM.MF
SSuubbssyysstteemm-SSyymmbboolliiccNNaammee: devicemon-ds
SSuubbssyysstteemm-VVeerrssiioonn: 0.0.1
SSuubbssyysstteemm-TTyyppee: osgi.subsystem.feature
note, I didn't put my dependencies in the .esa file
12 of 41
Feature subsystems
devicemon-ds.esa: a Feature Subsystem
All the bundles inside work just as shared bundles
in OSGi
Subsystem installed/started/stopped as 1 unit
Dependencies pulled in either from .esa or from
repository
as needed
are reference-counted
13 of 41
Apache Felix + Apache Aries Subsystems
14 of 41
Add HTTP subsystem
15 of 41
3 bundles in 1 operation
16 of 41
Our subsystem doesn't install!
NB: a failed subsystem install doesn't
leave any bundles behind...
17 of 41
OSGi Repository
OSGi Enterprise spec 132
Inspired by Felix OBR
Simple but powerful
Actual repo can be remote or local
Find resources
based on their capabilities
any resource
any capability
OSGi has defined:
standard Bundle capabilities
Bundle, Subsystem resource types
some more general capabilities
18 of 41
Add resources using standard XML
Example
<<rreeppoossiittoorryy increment='1389281419631' name='MyRepo' xmlns='http://www.osgi.org/xmlns/repository/v1.0.0'>>
<<rreessoouurrccee>>
<<ccaappaabbiilliittyy namespace='osgi.identity'>>
<<aattttrriibbuuttee name='osgi.identity' value='org.apache.sshd.core'//>>
<<aattttrriibbuuttee name='type' value='osgi.bundle'//>>
<<aattttrriibbuuttee name='version' type='Version' value='0.9.0'//>>
<<//ccaappaabbiilliittyy>>
<<ccaappaabbiilliittyy namespace='osgi.content'>>
<<aattttrriibbuuttee name='osgi.content' value='a1c64578808c38a63cd6563e9936f025638aeaf9de70f36765367db81c0afc38'
<<aattttrriibbuuttee name='url' value='local-repo/sshd-core.jar'//>>
<<aattttrriibbuuttee name='size' type='Long' value='464733'//>>
<<aattttrriibbuuttee name='mime' value='application/vnd.osgi.bundle'//>>
<<//ccaappaabbiilliittyy>>
<<ccaappaabbiilliittyy namespace='osgi.wiring.package'>>
<<aattttrriibbuuttee name='osgi.wiring.package' value='org.apache.sshd'//>>
<<aattttrriibbuuttee name='version' type='Version' value='0.5.0'//>>
<<aattttrriibbuuttee name='bundle-symbolic-name' value='org.apache.sshd.core'//>>
<<aattttrriibbuuttee name='bundle-version' type='Version' value='0.9.0'//>>
<<ddiirreeccttiivvee name='uses' value='org.apache.sshd.client'//>>
<<//ccaappaabbiilliittyy>>
<!-- More capabilities -->
<<rreeqquuiirreemmeenntt namespace='osgi.wiring.package'>>
<<ddiirreeccttiivvee name='filter'
value='(&(osgi.wiring.package=org.slf4j)(version>=1.6.0)(!(version>=2.0.0)))'/>
<<//rreeqquuiirreemmeenntt>>
<!-- More requirements -->
<<//rreessoouurrccee>>
<!-- More resources -->
<<//rreeppoossiittoorryy>>
19 of 41
Repository XML
Format defined by OSGi Repository Spec
Standard way to feed a repository with information
Standard way for repositories to exchange data
Generate it with the bindex/RepoIndex tool:
https://github.com/osgi/bindex
(https://github.com/osgi/bindex)
20 of 41
Repository Service
Obtain resources from the repository
Find a bundle...
RReeppoossiittoorryy repo = ... // from Service Registry ...
RReeqquuiirreemmeennttBBuuiillddeerr rb = nneeww RReeqquuiirreemmeennttBBuuiillddeerr("osgi.wiring.package");
rb.addDirective("filter",
"(&(osgi.wiring.package=org.apache.ssh)(version=0.5.0))");
RReeqquuiirreemmeenntt req = rb.build();
CCoolllleeccttiioonn<RReessoouurrccee> bundleResources = repo.findProviders(req);
... or find some photo's from the North Pole ...
RReeqquuiirreemmeennttBBuuiillddeerr rb = nneeww RReeqquuiirreemmeennttBBuuiillddeerr("com.acme.photo");
rb.addDirective("filter", "(latitude>=66.5622)");
RReeqquuiirreemmeenntt req = rb.build();
CCoolllleeccttiioonn<RReessoouurrccee> photoResources = repo.findProviders(req);
21 of 41
Add and prime a Repository
22 of 41
Our subsystem works!
23 of 41
Descriptor Subsystems
A subsystem can be just a descriptor
... with all resources obtained from a Repository
$ jar tvf generated/devicemon-ds-decl.esa
0 TThhuu JJaann 09 12:37:32 GMT 2014 OSGI-INF/
175 WWeedd JJaann 08 15:50:28 GMT 2014 OSGI-INF/SUBSYSTEM.MF
Subsystem Manifest
$ cat OSGI-INF/SUBSYSTEM.MF
SSuubbssyysstteemm-SSyymmbboolliiccNNaammee: devicemon-ds-decl
SSuubbssyysstteemm-VVeerrssiioonn: 0.0.1
SSuubbssyysstteemm-TTyyppee: osgi.subsystem.feature
SSuubbssyysstteemm-CCoonntteenntt: devicemon-ds;version=0.0.1,
devicemon-ssh;version=0.0.1
24 of 41
Start with only
Subsystems + Repository
25 of 41
Dependencies at work
http.esa pulled in automatically
26 of 41
Unpredictable dependency
both 0.9.0 and 0.9.1 satisfy requirement
27 of 41
Subsystem Deployment Descriptor
Once QA-ed, create a DEPLOYMENT.MF to fix
dependencies
$ jar tvf generated/devicemon-ds-decl-dd.esa
283 WWeedd JJaann 15 16:39:34 GMT 2014 OSGI-INF/DEPLOYMENT.MF
175 WWeedd JJaann 08 15:50:28 GMT 2014 OSGI-INF/SUBSYSTEM.MF
it can freeze deployments
$ cat OSGI-INF/DEPLOYMENT.MF
SSuubbssyysstteemm-VVeerrssiioonn: 0.0.1
SSuubbssyysstteemm-TTyyppee: osgi.subsystem.feature
DDeeppllooyyeedd-CCoonntteenntt: devicemon-ds;deployed-version=0.0.1,
devicemon-ssh;deployed-version=0.0.1
PPrroovviissiioonn-RReessoouurrccee: org.apache.sshd.core;deployed-version=0.9.1,
org.apache.felix.scr;deployed-version=1.8.2,
http-subsystem;type=osgi.subsystem.feature;deployed-version=1.2.0
note version 0.9.1 for org.apache.sshd.core
Ensures that the runtime deployment is the same as the QA one.
28 of 41
SSHD dependency now as predicted
29 of 41
Portable Contracts
Our bundle contains:
IImmppoorrtt-PPaacckkaaggee: javax.servlet;version="[2.5,3)",
This API is defined by the JCP.
but... spot the problem!
30 of 41
Semantic Versioning
... versioning policy for exported packages.
OSGi versions: <major>.<minor>.<micro>.<qualifier>
Updating package versions:
fix/patch (no change to API):
update micro
extend API (affects implementers, not clients):
update minor
API breakage:
update major
Using semantic versioning allows creating components that can
work with future patches and other compatible releases of deps
just Import-Package a range like: [5.3, 6)
31 of 41
javax.servlet Problem
IImmppoorrtt-PPaacckkaaggee: javax.servlet;version="[2.5,3)",
Servlet 3.0 is actually compatible with 2.5
JCP specs don't follow semantic versioning
3.0 is more of a marketing version
But what version to use for javax.servlet
in OSGi?
Different providers made different decisions
Some use 2.6 to export javax.servlet
from Servlet 3 spec
Others use 3.0
Some even use 0.0.0
This prohibits creating portable bundles
using these APIs
32 of 41
Portable Java Contracts
osgi.contract capability to the rescue
client bundle requires capability
with single 'marketing' or 'spec' version
and also imports the package
without version
osgi.contract provider binds the
contract version to package versions
IImmppoorrtt-PPaacckkaaggee: javax.servlet, javax.servlet.http
RReeqquuiirree-CCaappaabbiilliittyy: osgi.contract;
filter:="(&(osgi.contract=JavaServlet)(version=2.5))"
Enables creating portable bundles
importing non-semantically versioned
packages.
33 of 41
Our bundle manifest should really be
BBuunnddllee-MMaanniiffeessttVVeerrssiioonn: 2
BBuunnddllee-SSyymmbboolliiccNNaammee: devicemon-ds
BBuunnddllee-VVeerrssiioonn: 0.0.1
IImmppoorrtt-PPaacckkaaggee: javax.servlet,
org.coderthoughts.devicemon.ssh;version="[1.0,2)",
org.osgi.service.http;version="[1.2,2)"
RReeqquuiirree-CCaappaabbiilliittyy:
osgi.extender;filter:="(&(osgi.extender=osgi.component)
(version>=1.2)(!(version>=2.0)))",
osgi.whiteboard;filter:="(osgi.whiteboard=osgi.http)
(version>=1.0)(!(version>=2.0)))",
osgi.contract;filter:="(&(osgi.contract=JavaServlet)
(version=2.5))"
34 of 41
Providing Portable Contracts
The bundle exporting the package should
do this:
EExxppoorrtt-PPaacckkaaggee: javax.servlet;version=2.6,
javax.servlet.http;version=2.6
PPrroovviiddee-CCaappaabbiilliittyy: osgi.contract;
osgi.contract=JJaavvaaSSeerrvvlleett;version:VVeerrssiioonn=2.5;
uses:="javax.servlet, javax.servlet.http",
osgi.contract;osgi.contract=JJaavvaaSSeerrvvlleett;version:VVeerrssiioonn=3;
uses:="javax.servlet, javax.servlet.http"
as it only knows how the mapping is done.
Each marketing version is mapped to a package version.
For more details, see OSGi RFC 180
(https://github.com/osgi/design/raw/master
/rfcs/rfc0180/rfc-0180-portable-
java-contracts.pdf).
35 of 41
For all packages other than
JCP-ones
36 of 41
http://www.bndtools.org
(http://www.bndtools.org)
can help with version
maintenance!
reallybndtools
Use Semantic Versioning!
37 of 41
Where can I get it?
Core R6 spec released this week:
http://www.osgi.org/Specifications/HomePage
(http://www.osgi.org/Specifications/HomePage)
Enterprise R6 draft released this week:
http://www.osgi.org/Specifications/Drafts
(http://www.osgi.org/Specifications/Drafts)
RFCs 189, 190, 208 included in zip
38 of 41
Links
OSGi specs:
http://www.osgi.org/Specifications
(http://www.osgi.org/Specifications)
Apache Felix Project:
http://felix.apache.org (http://felix.apache.org)
OSGi RFC 180
https://github.com/osgi/design/raw/master
/rfcs/rfc0180/rfc-0180-portable-java-contracts.pdf
(https://github.com/osgi/design/raw/master
/rfcs/rfc0180/rfc-0180-portable-java-contracts.pdf)
devicemon project:
https://github.com/bosschaert/devicemon
(https://github.com/bosschaert/devicemon)
Subsystem Gogo command
https://github.com/bosschaert/coderthoughts39 of 41
/tree/master/subsystem-gogo-command
(https://github.com/bosschaert/coderthoughts
/tree/master/subsystem-gogo-command)
40 of 41
Questions?
41 of 41

More Related Content

What's hot

Introduction to JumpStart
Introduction to JumpStartIntroduction to JumpStart
Introduction to JumpStartScott McDermott
 
Oracle ebs-r12-1-3installationlinux64bit
Oracle ebs-r12-1-3installationlinux64bitOracle ebs-r12-1-3installationlinux64bit
Oracle ebs-r12-1-3installationlinux64bitRavi Kumar Lanke
 
Vbox virtual box在oracle linux 5 - shoug 梁洪响
Vbox virtual box在oracle linux 5 - shoug 梁洪响Vbox virtual box在oracle linux 5 - shoug 梁洪响
Vbox virtual box在oracle linux 5 - shoug 梁洪响maclean liu
 
LISA15: systemd, the Next-Generation Linux System Manager
LISA15: systemd, the Next-Generation Linux System Manager LISA15: systemd, the Next-Generation Linux System Manager
LISA15: systemd, the Next-Generation Linux System Manager Alison Chaiken
 
SOUG - Experiences with Oracle Solaris 11.4
SOUG - Experiences with Oracle Solaris 11.4SOUG - Experiences with Oracle Solaris 11.4
SOUG - Experiences with Oracle Solaris 11.4JomaSoft
 
Erp 2.50 openbravo environment installation openbravo-wiki
Erp 2.50 openbravo environment installation   openbravo-wikiErp 2.50 openbravo environment installation   openbravo-wiki
Erp 2.50 openbravo environment installation openbravo-wikiyaranusa
 
How to installation wildfly 10.1.0 final
How to installation wildfly 10.1.0 finalHow to installation wildfly 10.1.0 final
How to installation wildfly 10.1.0 finalJaeock Shim
 
Oracle 12c r1 installation on solaris 11.1
Oracle 12c r1 installation on solaris 11.1Oracle 12c r1 installation on solaris 11.1
Oracle 12c r1 installation on solaris 11.1Laurent Leturgez
 
Step by Step to Install oracle grid 11.2.0.3 on solaris 11.1
Step by Step to Install oracle grid 11.2.0.3 on solaris 11.1Step by Step to Install oracle grid 11.2.0.3 on solaris 11.1
Step by Step to Install oracle grid 11.2.0.3 on solaris 11.1Osama Mustafa
 
Free tools for rapidly deploying software
Free tools for rapidly deploying softwareFree tools for rapidly deploying software
Free tools for rapidly deploying softwareConcentrated Technology
 
Use bonding driver with ethernet
Use bonding driver with ethernetUse bonding driver with ethernet
Use bonding driver with ethernetSUSE Labs Taipei
 

What's hot (18)

Introduction to JumpStart
Introduction to JumpStartIntroduction to JumpStart
Introduction to JumpStart
 
OpenSolaris 2009.06 Workshop
OpenSolaris 2009.06 WorkshopOpenSolaris 2009.06 Workshop
OpenSolaris 2009.06 Workshop
 
Oracle ebs-r12-1-3installationlinux64bit
Oracle ebs-r12-1-3installationlinux64bitOracle ebs-r12-1-3installationlinux64bit
Oracle ebs-r12-1-3installationlinux64bit
 
Python on exadata
Python on exadataPython on exadata
Python on exadata
 
Tutorial j boss
Tutorial j bossTutorial j boss
Tutorial j boss
 
Vbox virtual box在oracle linux 5 - shoug 梁洪响
Vbox virtual box在oracle linux 5 - shoug 梁洪响Vbox virtual box在oracle linux 5 - shoug 梁洪响
Vbox virtual box在oracle linux 5 - shoug 梁洪响
 
LISA15: systemd, the Next-Generation Linux System Manager
LISA15: systemd, the Next-Generation Linux System Manager LISA15: systemd, the Next-Generation Linux System Manager
LISA15: systemd, the Next-Generation Linux System Manager
 
Init of Android
Init of AndroidInit of Android
Init of Android
 
SOUG - Experiences with Oracle Solaris 11.4
SOUG - Experiences with Oracle Solaris 11.4SOUG - Experiences with Oracle Solaris 11.4
SOUG - Experiences with Oracle Solaris 11.4
 
Erp 2.50 openbravo environment installation openbravo-wiki
Erp 2.50 openbravo environment installation   openbravo-wikiErp 2.50 openbravo environment installation   openbravo-wiki
Erp 2.50 openbravo environment installation openbravo-wiki
 
How to installation wildfly 10.1.0 final
How to installation wildfly 10.1.0 finalHow to installation wildfly 10.1.0 final
How to installation wildfly 10.1.0 final
 
Oracle 12c r1 installation on solaris 11.1
Oracle 12c r1 installation on solaris 11.1Oracle 12c r1 installation on solaris 11.1
Oracle 12c r1 installation on solaris 11.1
 
12 yum
12  yum12  yum
12 yum
 
Step by Step to Install oracle grid 11.2.0.3 on solaris 11.1
Step by Step to Install oracle grid 11.2.0.3 on solaris 11.1Step by Step to Install oracle grid 11.2.0.3 on solaris 11.1
Step by Step to Install oracle grid 11.2.0.3 on solaris 11.1
 
Free tools for rapidly deploying software
Free tools for rapidly deploying softwareFree tools for rapidly deploying software
Free tools for rapidly deploying software
 
BASSET_README
BASSET_READMEBASSET_README
BASSET_README
 
Android Custom Kernel/ROM design
Android Custom Kernel/ROM designAndroid Custom Kernel/ROM design
Android Custom Kernel/ROM design
 
Use bonding driver with ethernet
Use bonding driver with ethernetUse bonding driver with ethernet
Use bonding driver with ethernet
 

Similar to OSGi provisioning deep dive and demo (Subsystems, Repository, Contracts and more) - D Bosschaert

Provisioning with OSGi Subsystems and Repository using Apache Aries and Felix
Provisioning with OSGi Subsystems and Repository using Apache Aries and FelixProvisioning with OSGi Subsystems and Repository using Apache Aries and Felix
Provisioning with OSGi Subsystems and Repository using Apache Aries and FelixDavid Bosschaert
 
Riga Dev Day - Automated Android Continuous Integration
Riga Dev Day - Automated Android Continuous IntegrationRiga Dev Day - Automated Android Continuous Integration
Riga Dev Day - Automated Android Continuous IntegrationNicolas Fränkel
 
Prizm Installation Guide
Prizm Installation GuidePrizm Installation Guide
Prizm Installation Guidevjvarenya
 
PHP Dependency Management with Composer
PHP Dependency Management with ComposerPHP Dependency Management with Composer
PHP Dependency Management with ComposerAdam Englander
 
Isolating an applications using LXC – Linux Containers
Isolating an applications using LXC – Linux ContainersIsolating an applications using LXC – Linux Containers
Isolating an applications using LXC – Linux ContainersVenkat Raman
 
TechMentor Fall, 2011 - Packaging Software for Automated Deployment with Wind...
TechMentor Fall, 2011 - Packaging Software for Automated Deployment with Wind...TechMentor Fall, 2011 - Packaging Software for Automated Deployment with Wind...
TechMentor Fall, 2011 - Packaging Software for Automated Deployment with Wind...Concentrated Technology
 
Piattaforma Web Linux completa dai sorgenti
Piattaforma Web Linux completa dai sorgentiPiattaforma Web Linux completa dai sorgenti
Piattaforma Web Linux completa dai sorgentiGiulio Destri
 
How to Use EXAchk Effectively to Manage Exadata Environments
How to Use EXAchk Effectively to Manage Exadata EnvironmentsHow to Use EXAchk Effectively to Manage Exadata Environments
How to Use EXAchk Effectively to Manage Exadata EnvironmentsSandesh Rao
 
Your first dive into systemd!
Your first dive into systemd!Your first dive into systemd!
Your first dive into systemd!Etsuji Nakai
 
Subsystem Framework and Authentication
Subsystem Framework and AuthenticationSubsystem Framework and Authentication
Subsystem Framework and AuthenticationAlfresco Software
 
Introduction to PostgreSQL for System Administrators
Introduction to PostgreSQL for System AdministratorsIntroduction to PostgreSQL for System Administrators
Introduction to PostgreSQL for System AdministratorsJignesh Shah
 
PHP on Heroku: Deploying and Scaling Apps in the Cloud
PHP on Heroku: Deploying and Scaling Apps in the CloudPHP on Heroku: Deploying and Scaling Apps in the Cloud
PHP on Heroku: Deploying and Scaling Apps in the CloudSalesforce Developers
 
Infrastructure as Code in your CD pipelines - London Microsoft DevOps 0423
Infrastructure as Code in your CD pipelines - London Microsoft DevOps 0423Infrastructure as Code in your CD pipelines - London Microsoft DevOps 0423
Infrastructure as Code in your CD pipelines - London Microsoft DevOps 0423Giulio Vian
 
Linux Du Jour
Linux Du JourLinux Du Jour
Linux Du Jourmwedgwood
 

Similar to OSGi provisioning deep dive and demo (Subsystems, Repository, Contracts and more) - D Bosschaert (20)

Provisioning with OSGi Subsystems and Repository using Apache Aries and Felix
Provisioning with OSGi Subsystems and Repository using Apache Aries and FelixProvisioning with OSGi Subsystems and Repository using Apache Aries and Felix
Provisioning with OSGi Subsystems and Repository using Apache Aries and Felix
 
Riga Dev Day - Automated Android Continuous Integration
Riga Dev Day - Automated Android Continuous IntegrationRiga Dev Day - Automated Android Continuous Integration
Riga Dev Day - Automated Android Continuous Integration
 
Yum (Linux)
Yum (Linux) Yum (Linux)
Yum (Linux)
 
Prizm Installation Guide
Prizm Installation GuidePrizm Installation Guide
Prizm Installation Guide
 
Rapidly deploying software
Rapidly deploying softwareRapidly deploying software
Rapidly deploying software
 
PHP Dependency Management with Composer
PHP Dependency Management with ComposerPHP Dependency Management with Composer
PHP Dependency Management with Composer
 
Isolating an applications using LXC – Linux Containers
Isolating an applications using LXC – Linux ContainersIsolating an applications using LXC – Linux Containers
Isolating an applications using LXC – Linux Containers
 
RunX ELCE 2020
RunX ELCE 2020RunX ELCE 2020
RunX ELCE 2020
 
TechMentor Fall, 2011 - Packaging Software for Automated Deployment with Wind...
TechMentor Fall, 2011 - Packaging Software for Automated Deployment with Wind...TechMentor Fall, 2011 - Packaging Software for Automated Deployment with Wind...
TechMentor Fall, 2011 - Packaging Software for Automated Deployment with Wind...
 
Piattaforma Web Linux completa dai sorgenti
Piattaforma Web Linux completa dai sorgentiPiattaforma Web Linux completa dai sorgenti
Piattaforma Web Linux completa dai sorgenti
 
How to Use EXAchk Effectively to Manage Exadata Environments
How to Use EXAchk Effectively to Manage Exadata EnvironmentsHow to Use EXAchk Effectively to Manage Exadata Environments
How to Use EXAchk Effectively to Manage Exadata Environments
 
Your first dive into systemd!
Your first dive into systemd!Your first dive into systemd!
Your first dive into systemd!
 
Subsystem Framework and Authentication
Subsystem Framework and AuthenticationSubsystem Framework and Authentication
Subsystem Framework and Authentication
 
Mancoosi
MancoosiMancoosi
Mancoosi
 
Introduction to PostgreSQL for System Administrators
Introduction to PostgreSQL for System AdministratorsIntroduction to PostgreSQL for System Administrators
Introduction to PostgreSQL for System Administrators
 
PHP on Heroku: Deploying and Scaling Apps in the Cloud
PHP on Heroku: Deploying and Scaling Apps in the CloudPHP on Heroku: Deploying and Scaling Apps in the Cloud
PHP on Heroku: Deploying and Scaling Apps in the Cloud
 
Docker intro
Docker introDocker intro
Docker intro
 
App container rkt
App container rktApp container rkt
App container rkt
 
Infrastructure as Code in your CD pipelines - London Microsoft DevOps 0423
Infrastructure as Code in your CD pipelines - London Microsoft DevOps 0423Infrastructure as Code in your CD pipelines - London Microsoft DevOps 0423
Infrastructure as Code in your CD pipelines - London Microsoft DevOps 0423
 
Linux Du Jour
Linux Du JourLinux Du Jour
Linux Du Jour
 

More from mfrancis

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

More from mfrancis (20)

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

Recently uploaded

Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 

Recently uploaded (20)

Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 

OSGi provisioning deep dive and demo (Subsystems, Repository, Contracts and more) - D Bosschaert

  • 1. Subsystems, Repository, Contracts and more... David Bosschaert OSGi Application Provisioning Deep Dive 1 of 41
  • 2. About me David Bosschaert (davidb@apache.org) Works at Adobe R&D Basel Co-chair OSGi EEG Apache committer Open-source and cloud enthusiast 2 of 41
  • 3. Topics A look at the latest Declarative Services Using Subsystems to package and deploy OSGi Repository to resolve dependencies Portable Java Contracts ... demo throughout ... 3 of 41
  • 4. Running Example Device Monitor ... a little webapp to monitor all your gadgets ... 4 of 41
  • 5. Declarative Services Being updated for Enterprise R6 Improved Configuration Admin integration Introspective API Prototype Service Factory ... other smaller improvements ... 5 of 41
  • 6. DS Configured Component iimmppoorrtt javax.servlet.SSeerrvvlleett; iimmppoorrtt org.osgi.service.component.annotations.*; iimmppoorrtt org.osgi.service.http.HHttttppSSeerrvviiccee; @Component ppuubblliicc ccllaassss DDeevviicceeMMoonniittoorr { pprriivvaattee HHttttppSSeerrvviiccee httpService; @Reference ppuubblliicc vvooiidd setHttpService(HHttttppSSeerrvviiccee svc) { httpService = svc; } @Activate ppuubblliicc vvooiidd activate(MMoonniittoorrCCoonnffiigg cfg) { SSttrriinngg rootCtx = cfg.ctxPrefix(); iiff (!rootCtx.endsWith("/")) rootCtx = rootCtx + "/"; registerServlet(rootCtx + "dmon", nneeww MMoonniittoorrSSeerrvvlleett()); registerServlet(rootCtx + "device", nneeww DDeevviicceeSSeerrvvlleett()); } pprriivvaattee vvooiidd registerServlet(SSttrriinngg ctx, SSeerrvvlleett servlet) { httpService.registerServlet(ctx, servlet, nnuullll, nnuullll); } } 6 of 41
  • 7. Configuration using Annotations ppuubblliicc @interface MMoonniittoorrCCoonnffiigg { SSttrriinngg ctxPrefix() ddeeffaauulltt "/"; bboooolleeaann autoRefresh() ddeeffaauulltt ffaallssee; iinntt interval() ddeeffaauulltt 30; } annotation used as an ordinary interface, with added defaults ... weird but works great ... 7 of 41
  • 8. Example Bundle Manifest BBuunnddllee-MMaanniiffeessttVVeerrssiioonn: 2 BBuunnddllee-SSyymmbboolliiccNNaammee: devicemon-ds BBuunnddllee-VVeerrssiioonn: 0.0.1 SSeerrvviiccee-CCoommppoonneenntt: OSGI-INF/component.xml IImmppoorrtt-PPaacckkaaggee: javax.servlet;version="[2.5,3)", org.coderthoughts.devicemon.ssh;version="[1.0,2)", org.osgi.service.http;version="[1.2,2)" RReeqquuiirree-CCaappaabbiilliittyy: osgi.extender;filter:="(&(osgi.extender=osgi.component) (version>=1.2.0)(!(version>=2.0.0)))", osgi.whiteboard;filter:="(osgi.whiteboard=osgi.http)" Note that the javax.servlet import should really use contracts! 8 of 41
  • 9. Finished app... 2 Bundles devicemon.jar depends on DS and HTTP Service devicemon-ssh.jar depends on Apache Mina SSHD 9 of 41
  • 10. Deploy it... Now I want to easily deploy my app ⟱ create a Subsystem of it! 10 of 41
  • 11. Subsystems OSGi Enterprise spec 134 A subsystem... collection of bundles put together feature - everything shared application - isolated, nothing shared out composite - configurable in-between a zip file with .esa extension can be nested can depend on bundles or other subsystems Subsystems can use OSGi Repositories to resolve dependencies 11 of 41
  • 12. devicemon-ds.esa Just a zip file... $ tar tvf devicemon-ds.esa -rwxrwxrwx 99 8 JJaann 15:40 OSGI-INF/SUBSYSTEM.MF -rwxrwxrwx 18184 8 JJaann 16:01 devicemon-ds.jar -rwxrwxrwx 5968 8 JJaann 16:02 devicemon-ssh.jar Subsystem Manifest $ cat OSGI-INF/SUBSYSTEM.MF SSuubbssyysstteemm-SSyymmbboolliiccNNaammee: devicemon-ds SSuubbssyysstteemm-VVeerrssiioonn: 0.0.1 SSuubbssyysstteemm-TTyyppee: osgi.subsystem.feature note, I didn't put my dependencies in the .esa file 12 of 41
  • 13. Feature subsystems devicemon-ds.esa: a Feature Subsystem All the bundles inside work just as shared bundles in OSGi Subsystem installed/started/stopped as 1 unit Dependencies pulled in either from .esa or from repository as needed are reference-counted 13 of 41
  • 14. Apache Felix + Apache Aries Subsystems 14 of 41
  • 16. 3 bundles in 1 operation 16 of 41
  • 17. Our subsystem doesn't install! NB: a failed subsystem install doesn't leave any bundles behind... 17 of 41
  • 18. OSGi Repository OSGi Enterprise spec 132 Inspired by Felix OBR Simple but powerful Actual repo can be remote or local Find resources based on their capabilities any resource any capability OSGi has defined: standard Bundle capabilities Bundle, Subsystem resource types some more general capabilities 18 of 41
  • 19. Add resources using standard XML Example <<rreeppoossiittoorryy increment='1389281419631' name='MyRepo' xmlns='http://www.osgi.org/xmlns/repository/v1.0.0'>> <<rreessoouurrccee>> <<ccaappaabbiilliittyy namespace='osgi.identity'>> <<aattttrriibbuuttee name='osgi.identity' value='org.apache.sshd.core'//>> <<aattttrriibbuuttee name='type' value='osgi.bundle'//>> <<aattttrriibbuuttee name='version' type='Version' value='0.9.0'//>> <<//ccaappaabbiilliittyy>> <<ccaappaabbiilliittyy namespace='osgi.content'>> <<aattttrriibbuuttee name='osgi.content' value='a1c64578808c38a63cd6563e9936f025638aeaf9de70f36765367db81c0afc38' <<aattttrriibbuuttee name='url' value='local-repo/sshd-core.jar'//>> <<aattttrriibbuuttee name='size' type='Long' value='464733'//>> <<aattttrriibbuuttee name='mime' value='application/vnd.osgi.bundle'//>> <<//ccaappaabbiilliittyy>> <<ccaappaabbiilliittyy namespace='osgi.wiring.package'>> <<aattttrriibbuuttee name='osgi.wiring.package' value='org.apache.sshd'//>> <<aattttrriibbuuttee name='version' type='Version' value='0.5.0'//>> <<aattttrriibbuuttee name='bundle-symbolic-name' value='org.apache.sshd.core'//>> <<aattttrriibbuuttee name='bundle-version' type='Version' value='0.9.0'//>> <<ddiirreeccttiivvee name='uses' value='org.apache.sshd.client'//>> <<//ccaappaabbiilliittyy>> <!-- More capabilities --> <<rreeqquuiirreemmeenntt namespace='osgi.wiring.package'>> <<ddiirreeccttiivvee name='filter' value='(&(osgi.wiring.package=org.slf4j)(version>=1.6.0)(!(version>=2.0.0)))'/> <<//rreeqquuiirreemmeenntt>> <!-- More requirements --> <<//rreessoouurrccee>> <!-- More resources --> <<//rreeppoossiittoorryy>> 19 of 41
  • 20. Repository XML Format defined by OSGi Repository Spec Standard way to feed a repository with information Standard way for repositories to exchange data Generate it with the bindex/RepoIndex tool: https://github.com/osgi/bindex (https://github.com/osgi/bindex) 20 of 41
  • 21. Repository Service Obtain resources from the repository Find a bundle... RReeppoossiittoorryy repo = ... // from Service Registry ... RReeqquuiirreemmeennttBBuuiillddeerr rb = nneeww RReeqquuiirreemmeennttBBuuiillddeerr("osgi.wiring.package"); rb.addDirective("filter", "(&(osgi.wiring.package=org.apache.ssh)(version=0.5.0))"); RReeqquuiirreemmeenntt req = rb.build(); CCoolllleeccttiioonn<RReessoouurrccee> bundleResources = repo.findProviders(req); ... or find some photo's from the North Pole ... RReeqquuiirreemmeennttBBuuiillddeerr rb = nneeww RReeqquuiirreemmeennttBBuuiillddeerr("com.acme.photo"); rb.addDirective("filter", "(latitude>=66.5622)"); RReeqquuiirreemmeenntt req = rb.build(); CCoolllleeccttiioonn<RReessoouurrccee> photoResources = repo.findProviders(req); 21 of 41
  • 22. Add and prime a Repository 22 of 41
  • 24. Descriptor Subsystems A subsystem can be just a descriptor ... with all resources obtained from a Repository $ jar tvf generated/devicemon-ds-decl.esa 0 TThhuu JJaann 09 12:37:32 GMT 2014 OSGI-INF/ 175 WWeedd JJaann 08 15:50:28 GMT 2014 OSGI-INF/SUBSYSTEM.MF Subsystem Manifest $ cat OSGI-INF/SUBSYSTEM.MF SSuubbssyysstteemm-SSyymmbboolliiccNNaammee: devicemon-ds-decl SSuubbssyysstteemm-VVeerrssiioonn: 0.0.1 SSuubbssyysstteemm-TTyyppee: osgi.subsystem.feature SSuubbssyysstteemm-CCoonntteenntt: devicemon-ds;version=0.0.1, devicemon-ssh;version=0.0.1 24 of 41
  • 25. Start with only Subsystems + Repository 25 of 41
  • 26. Dependencies at work http.esa pulled in automatically 26 of 41
  • 27. Unpredictable dependency both 0.9.0 and 0.9.1 satisfy requirement 27 of 41
  • 28. Subsystem Deployment Descriptor Once QA-ed, create a DEPLOYMENT.MF to fix dependencies $ jar tvf generated/devicemon-ds-decl-dd.esa 283 WWeedd JJaann 15 16:39:34 GMT 2014 OSGI-INF/DEPLOYMENT.MF 175 WWeedd JJaann 08 15:50:28 GMT 2014 OSGI-INF/SUBSYSTEM.MF it can freeze deployments $ cat OSGI-INF/DEPLOYMENT.MF SSuubbssyysstteemm-VVeerrssiioonn: 0.0.1 SSuubbssyysstteemm-TTyyppee: osgi.subsystem.feature DDeeppllooyyeedd-CCoonntteenntt: devicemon-ds;deployed-version=0.0.1, devicemon-ssh;deployed-version=0.0.1 PPrroovviissiioonn-RReessoouurrccee: org.apache.sshd.core;deployed-version=0.9.1, org.apache.felix.scr;deployed-version=1.8.2, http-subsystem;type=osgi.subsystem.feature;deployed-version=1.2.0 note version 0.9.1 for org.apache.sshd.core Ensures that the runtime deployment is the same as the QA one. 28 of 41
  • 29. SSHD dependency now as predicted 29 of 41
  • 30. Portable Contracts Our bundle contains: IImmppoorrtt-PPaacckkaaggee: javax.servlet;version="[2.5,3)", This API is defined by the JCP. but... spot the problem! 30 of 41
  • 31. Semantic Versioning ... versioning policy for exported packages. OSGi versions: <major>.<minor>.<micro>.<qualifier> Updating package versions: fix/patch (no change to API): update micro extend API (affects implementers, not clients): update minor API breakage: update major Using semantic versioning allows creating components that can work with future patches and other compatible releases of deps just Import-Package a range like: [5.3, 6) 31 of 41
  • 32. javax.servlet Problem IImmppoorrtt-PPaacckkaaggee: javax.servlet;version="[2.5,3)", Servlet 3.0 is actually compatible with 2.5 JCP specs don't follow semantic versioning 3.0 is more of a marketing version But what version to use for javax.servlet in OSGi? Different providers made different decisions Some use 2.6 to export javax.servlet from Servlet 3 spec Others use 3.0 Some even use 0.0.0 This prohibits creating portable bundles using these APIs 32 of 41
  • 33. Portable Java Contracts osgi.contract capability to the rescue client bundle requires capability with single 'marketing' or 'spec' version and also imports the package without version osgi.contract provider binds the contract version to package versions IImmppoorrtt-PPaacckkaaggee: javax.servlet, javax.servlet.http RReeqquuiirree-CCaappaabbiilliittyy: osgi.contract; filter:="(&(osgi.contract=JavaServlet)(version=2.5))" Enables creating portable bundles importing non-semantically versioned packages. 33 of 41
  • 34. Our bundle manifest should really be BBuunnddllee-MMaanniiffeessttVVeerrssiioonn: 2 BBuunnddllee-SSyymmbboolliiccNNaammee: devicemon-ds BBuunnddllee-VVeerrssiioonn: 0.0.1 IImmppoorrtt-PPaacckkaaggee: javax.servlet, org.coderthoughts.devicemon.ssh;version="[1.0,2)", org.osgi.service.http;version="[1.2,2)" RReeqquuiirree-CCaappaabbiilliittyy: osgi.extender;filter:="(&(osgi.extender=osgi.component) (version>=1.2)(!(version>=2.0)))", osgi.whiteboard;filter:="(osgi.whiteboard=osgi.http) (version>=1.0)(!(version>=2.0)))", osgi.contract;filter:="(&(osgi.contract=JavaServlet) (version=2.5))" 34 of 41
  • 35. Providing Portable Contracts The bundle exporting the package should do this: EExxppoorrtt-PPaacckkaaggee: javax.servlet;version=2.6, javax.servlet.http;version=2.6 PPrroovviiddee-CCaappaabbiilliittyy: osgi.contract; osgi.contract=JJaavvaaSSeerrvvlleett;version:VVeerrssiioonn=2.5; uses:="javax.servlet, javax.servlet.http", osgi.contract;osgi.contract=JJaavvaaSSeerrvvlleett;version:VVeerrssiioonn=3; uses:="javax.servlet, javax.servlet.http" as it only knows how the mapping is done. Each marketing version is mapped to a package version. For more details, see OSGi RFC 180 (https://github.com/osgi/design/raw/master /rfcs/rfc0180/rfc-0180-portable- java-contracts.pdf). 35 of 41
  • 36. For all packages other than JCP-ones 36 of 41
  • 37. http://www.bndtools.org (http://www.bndtools.org) can help with version maintenance! reallybndtools Use Semantic Versioning! 37 of 41
  • 38. Where can I get it? Core R6 spec released this week: http://www.osgi.org/Specifications/HomePage (http://www.osgi.org/Specifications/HomePage) Enterprise R6 draft released this week: http://www.osgi.org/Specifications/Drafts (http://www.osgi.org/Specifications/Drafts) RFCs 189, 190, 208 included in zip 38 of 41
  • 39. Links OSGi specs: http://www.osgi.org/Specifications (http://www.osgi.org/Specifications) Apache Felix Project: http://felix.apache.org (http://felix.apache.org) OSGi RFC 180 https://github.com/osgi/design/raw/master /rfcs/rfc0180/rfc-0180-portable-java-contracts.pdf (https://github.com/osgi/design/raw/master /rfcs/rfc0180/rfc-0180-portable-java-contracts.pdf) devicemon project: https://github.com/bosschaert/devicemon (https://github.com/bosschaert/devicemon) Subsystem Gogo command https://github.com/bosschaert/coderthoughts39 of 41