SlideShare a Scribd company logo
1 of 33
Download to read offline
Going Native with the
OSGi Service Layer
Sascha Zelzer
About Me
●

●

Post-doctoral researcher at the German Cancer Research
Center (DKFZ)
Interested in
–

Medical Image Processing
and Analysis

–

Modularity and interoperability

–

Large scale C++ systems

–

OSGi technology

●

Several years of Java and C++ programming experience

●

OSGi Invited Researcher

●

Participant in the Native OSGi specification effort
Outline
●

Motivation for native OSGi – like frameworks

●

Challenges
–

Conceptual

–

Language

●

History and Requirements

●

The C++ Micro Services Project
–

Architecture

–

Features

●

Use Cases

●

Excursion: Native OSGi

●

Roadmap & Summary
Motivation
●

●

●

●

●

Common C++ software toolkit for medical imaging (MITK)
Researchers develop their algorithms in shared libraries
(modules)
High potential for
reuse of common
services
Modularity and
interoperability are
key points
OSGi provides
established means
to handle modularity
and flexibility
Sascha Zelzer

29/10/13
Motivation
However
●

●

●

Medical image processing is traditionally done in C++
(Java and Python are gaining popularity)
Large existing code bases written in C++
Full blown OSGi framework (even if available for C++)
considered too intrusive and heavy-weight

●

C/C++ developers are very conservative

●

Lack of a migration path towards full OSGi support
Still, there is a need for strong modularity!

Sascha Zelzer

29/10/13
Challenges
OSGi layers are coupled to Java specifics
●

Module Layer
–
–

●

Class loading architecture (visibility of classes)
Dependency resolution (package wiring)

Life-cycle Layer
–
–

●

Lazy activation
Updates

Service Layer
–

●

Nothing crucial

Security Layer
–

Based on the Java 2 security architecture
Sascha Zelzer

29/10/13
Conceptual Challenge – Module Layer
●

Bundles are represented by JAR files with meta-data

●

Code is organized in packages

●

Bundles export and import Java packages

●

●

Visibility is controlled
via meta-data and
custom class loaders
OSGi takes care of
the correct wiring

Platform independent:
●

Meta-data

●

Embedded resources
Sascha Zelzer

29/10/13
Conceptual Challenge – Life Cycle
●

Elaborate bundle life-cycle and dependency resolution

●

Lazy activation triggered by class loading

●

Bundle updates at runtime

Platform independent:
●

Activation

●

Life-cycle listeners

Sascha Zelzer

29/10/13
Language Challenges
●

Garbage collector VS Destructors

●

Generics VS Templates

●

Thread-safety (without third-party libraries)

●

Common base class (Object in Java)

ServiceRegistration<?> BundleContext.registerService(
java.lang.String clazz, java.lang.Object service, …);

ServiceRegistration<?> BundleContext::registerService(
const std::string& clazz, Object* service, …);

Sascha Zelzer

29/10/13
Internal History
●

The CTK Plugin Framework (started 2007/2008)
–

Full C++ OSGi implementation (except Security Layer)

–

Qt dependency

●

C++ developers like shared libraries, but frameworks not so much

●

Full dynamism was rarely needed

●

Service registry and bundle activator solved a couple of issues
(e.g. dependencies between singletons)
Service registry and basic module layer support
useful throughout the whole code-base!

Sascha Zelzer

29/10/13
Requirements
●

No third-party dependencies (only the STL)

●

Cross-platform support (Linux, Windows, MacOS)

●

C++98 compliance (use C++11 features if available)

●

Type-safe API (no void* or client dynamic_cast calls)

●

Full Service Layer support

●

Module Layer support without its dynamics

Sascha Zelzer

29/10/13
C++ Micro Services
●

Developed and © German Cancer Research Center

●

Is a “OSGi Lite” implementation in C++

●

Apache License 2.0

●

GitHub hosted

Sascha Zelzer

29/10/13
C++ Micro Services - Architecture
The CppMicroServices library uses standard shared libraries
●

Shared objects (.so) in ELF format on Linux

●

Dynamic Link Libraries (.dll) in PE format on Windows

●

Dynamic Libraries (.dylib) in MachO format on MacOS

The dynamic linker is a
sophisticated program
handling
●

Dependency resolution

●

Symbol versioning

●

Library initialization

Sascha Zelzer

29/10/13
Module Layer – Dynamic Linker
The dynamic linker of the OS handles
●

Symbol visibility
–

GCC / Clang use __attribute__((visibility (“default”))

–

MSVC uses
__declspec(dllexport)

●

●

●

●

Dependency resolution
Symbol lookup (based on
link-time dependencies)
Less powerful dependency
versioning
No flat classpath issues as
in Java OSGi Lite!
Sascha Zelzer

29/10/13
Life Cycle – Dynamic Linker
The life-cycle is handled by the dynamic
linker too
●

●

Sequential state diagram
Successfully reaches the ACTIVE
state or fails completely

●

No lazy activation

●

No library updates at runtime

●

Activation via static initialization

●

Deactivation via static de-initialization

●

Life-cycle events available

Sascha Zelzer

29/10/13
Service Layer - Templates
●

Type-safe templated API
–

–

Any class can be used as a service interface

–

No custom dynamic_cast calls necessary

–
●

No base class for service interfaces or service
implementations required

Pointer magic hidden from the API user

API is almost identical to the OSGi specifications

Sascha Zelzer

29/10/13
Example – Type Safety
ServiceRegistration and ServiceReference classes
are templates:
struct IMyService { virtual ~IMyService(); };
US_DECLARE_SERVICE_INTERFACE(IMyService,"org.me.IMyService")
struct MyService : public IMyService {};
MyService myService;
ServiceRegistration<IMyService> reg =
context->RegisterService<IMyService>(&myService);
ServiceReference<IMyService> ref =
context->GetServiceReference<IMyService>();
IMyService* service = context->GetService(ref);
context->UngetService(ref);
reg.Unregister();

Sascha Zelzer

29/10/13
Example – Object Lifetime
●

Implicitly shared objects

●

Almost no raw pointers for library objects in the API

ServiceRegistration<IMyService> reg =
context->RegisterService<IMyService>(&myService);
ServiceReference<IMyService> ref =
context->GetServiceReference<IMyService>();

Sascha Zelzer

29/10/13
Example – Auto Loading
Library A
struct IMyService {};

Library B

Library C

struct MyService :
public IMyService {};

IMyService* service =
ctxt->GetService(...);

Loading of Library A triggers auto-loading of associated
libraries.
Sascha Zelzer

29/10/13
Example – Listeners
●

Listeners for library (bundle) events

●

Listeners for service events

Use a member function pointer
context->AddServiceListener(this, &MyClass::ServiceChanged);
void ServiceChanged(const ServiceEvent event) {…}

Or any “callable” object (functors, lambdas, etc.)
struct MyFunctorialListener {
void operator() (const ServiceEvent event) {…}
};
context->AddServiceListener(MyFunctorialListener());

Sascha Zelzer

29/10/13
Example - Resources
●

The generic resources system allows

●

Embedding arbitrary data

●

Compression if a specific threshold is reached

●

Modelling an embedded resources file system

●

Access via STL compatible streams
ModuleResource resource = module->GetResource("conf.props");
ModuleResourceStream resourceStream(resource);
std::string line;
while (std::getline(resourceStream, line))
{
std::cout << line << std::endl;
}

Sascha Zelzer

29/10/13
Example – JSON Meta-data
●

Library meta-data can be added via a JSON file

●

Embedded as a resource and parsed at load-time

●

Arbitrary key-value pairs, accessible via the module API
{
"module.version" : "1.0.2",
"module.description" : "This module provides a service",
"authors" : [ "John Doe", "Douglas Reynolds", "Daniel Kim" ],
"rating" : 5
}
Module* module = context->GetModule();
int r = ref_any_cast<int>(module->GetProperty("rating"));

Sascha Zelzer

29/10/13
Example – RFC 195 Service Scopes
●

●

In OSGi, services are singletons (sharing state) or bundle
specific (ServiceFactory)
RFC 195 formalizes service scopes
–

Singleton and Bundle Scope: As usual

–

Prototype Scope (new): Create service instances based on a
prototype on demand

class MyFactory : public PrototypeServiceFactory {…};
context->RegisterService<IMyService>(myFactory);
ServiceReference<IMyService> ref =
context->GetServiceReference<IMyService>();
ServiceObjects<IMyService> objects =
context->GetServiceObjects(ref);
IMyService* myService = objects.GetService();
objects.UngetService(myService);
Sascha Zelzer

29/10/13
Example – LDAP Filter DSL
Creating LDAP filter strings in Java is error-prone.
Filter example: “(&(name=Ben)(!(count=1)))”
context.createFilter("(&(name=Ben)(!(count=1))");

LDAPFilter filter(
LDAPProp("name") == "Ben" && LDAPProp("count") != 1
);

Sascha Zelzer

29/10/13
More

●

Global library specific GetModuleContext() function for
easy context retrieval

●

Hooks for framework log messages

●

Full static linking support

Sascha Zelzer

29/10/13
Use Cases
DS4Cpp
●

●

●

A declarative services framework in C++ based on
CppMicroServices
Contributed by Global Vision Systems
Introduces similar dependency-injection patterns across
their Java and C++ code-base

Interest from various technical companies
●

Embedded systems

●

Avionics and sensoring

●

Military sub-contractors working on mission-critical software

●

Medical Imaging (e.g. Mint Medical)
Sascha Zelzer

29/10/13
Use Case - MITK
●

Injection of an Activator class in all shared libraries

●

Conversion of singletons to services

●

Increased cohesion by embedding resources

●

●

Decreased coupling
via interfaces and
services
Auto-loading of
libraries providing
service
implementations

Sascha Zelzer

29/10/13
Use Case - MITK
●

●

●

Whiteboard pattern for interaction event listener
Hardware devices (like range cameras and optical tracker)
modelled as services
File reader writer
services with
prototype scope

Sascha Zelzer

29/10/13
Native OSGi
●

Several C/C++ implementations have been created
–
–

CTK Plugin Framework (C++, Qt based)

–

Apache Celix (C)

–

Nostrum (C++, POSIX)

–

SOF (C++, CORBA remoting)

–
●

CppMicroServices (C++)

Poco OSP (commercial)

Developers joined forces and created RFP 156 Native
OSGi for standardization of a native C/C++ API
–

RFP 156 will be voted on in November

–

RFC workis about to be started

–

CppMicroServices is field-testing a native service-layer API
Sascha Zelzer

29/10/13
Roadmap
Release 2.0
●

Service hooks

Ecosystem
●

Configuration Admin

●

Device Access

●

Event Admin

●

Remote Services

Native OSGi
●

Specify the Service Layer API

●

Work on a native Module Layer
Sascha Zelzer

29/10/13
Summary
●

OSGi Lite is well accepted by C++ developers

●

Less complexity due to the missing module layer

●

●

●

●

Less flexibility and
dynamism
C++ OSGi API
can be very close
to the Java version
Used in and
interest from
various domains
API should converge
with Native OSGi
efforts in the future
Sascha Zelzer

29/10/13
URLs
C++ Micro Service
●

Homepage http://cppmicroservices.org

●

GitHub https://github.com/saschazelzer/CppMicroServices

●

Blog http://blog.cppmicroservices.org

RFP 156 – Native OSGi
●

Bug https://www.osgi.org/bugzilla/show_bug.cgi?id=165

●

Document https://github.com/osgi/design/tree/master/rfps

Sascha Zelzer

29/10/13
Thank You!
Questions?

Sascha Zelzer

29/10/13

More Related Content

What's hot

Apache, osgi and karaf par Guillaume Nodet
Apache, osgi and karaf par Guillaume NodetApache, osgi and karaf par Guillaume Nodet
Apache, osgi and karaf par Guillaume NodetNormandy JUG
 
Java 9 Module System Introduction
Java 9 Module System IntroductionJava 9 Module System Introduction
Java 9 Module System IntroductionDan Stine
 
Exploring Java Heap Dumps (Oracle Code One 2018)
Exploring Java Heap Dumps (Oracle Code One 2018)Exploring Java Heap Dumps (Oracle Code One 2018)
Exploring Java Heap Dumps (Oracle Code One 2018)Ryan Cuprak
 
Spring Framework 4.0 to 4.1
Spring Framework 4.0 to 4.1Spring Framework 4.0 to 4.1
Spring Framework 4.0 to 4.1Sam Brannen
 
Eclipse Apricot
Eclipse ApricotEclipse Apricot
Eclipse ApricotNuxeo
 
Why jakarta ee matters (ConFoo 2021)
Why jakarta ee matters (ConFoo 2021)Why jakarta ee matters (ConFoo 2021)
Why jakarta ee matters (ConFoo 2021)Ryan Cuprak
 
Building a server platform with os gi
Building a server platform with os giBuilding a server platform with os gi
Building a server platform with os giDileepa Jayakody
 
From XPages Hero to OSGi Guru: Taking the Scary out of Building Extension Lib...
From XPages Hero to OSGi Guru: Taking the Scary out of Building Extension Lib...From XPages Hero to OSGi Guru: Taking the Scary out of Building Extension Lib...
From XPages Hero to OSGi Guru: Taking the Scary out of Building Extension Lib...Paul Withers
 
Deep Dive: Alfresco Core Repository (... embedded in a micro-services style a...
Deep Dive: Alfresco Core Repository (... embedded in a micro-services style a...Deep Dive: Alfresco Core Repository (... embedded in a micro-services style a...
Deep Dive: Alfresco Core Repository (... embedded in a micro-services style a...J V
 
iPOJO - The Simple Life - Richard Hall, Visiting Assistant Professor at Tufts...
iPOJO - The Simple Life - Richard Hall, Visiting Assistant Professor at Tufts...iPOJO - The Simple Life - Richard Hall, Visiting Assistant Professor at Tufts...
iPOJO - The Simple Life - Richard Hall, Visiting Assistant Professor at Tufts...mfrancis
 
What's New and Next in OpenNTF Domino API (ICON UK 2014)
What's New and Next in OpenNTF Domino API (ICON UK 2014)What's New and Next in OpenNTF Domino API (ICON UK 2014)
What's New and Next in OpenNTF Domino API (ICON UK 2014)Paul Withers
 
Java SE 9 modules (JPMS) - an introduction
Java SE 9 modules (JPMS) - an introductionJava SE 9 modules (JPMS) - an introduction
Java SE 9 modules (JPMS) - an introductionStephen Colebourne
 
Run-time of Node.js : V8 JavaScript Engine
Run-time of Node.js: V8 JavaScript EngineRun-time of Node.js: V8 JavaScript Engine
Run-time of Node.js : V8 JavaScript EngineGary Yeh
 

What's hot (20)

Apache, osgi and karaf par Guillaume Nodet
Apache, osgi and karaf par Guillaume NodetApache, osgi and karaf par Guillaume Nodet
Apache, osgi and karaf par Guillaume Nodet
 
Java EE 8
Java EE 8Java EE 8
Java EE 8
 
Java 9 Module System Introduction
Java 9 Module System IntroductionJava 9 Module System Introduction
Java 9 Module System Introduction
 
Modular Java
Modular JavaModular Java
Modular Java
 
Liferay (DXP) 7 Tech Meetup for Developers
Liferay (DXP) 7 Tech Meetup for DevelopersLiferay (DXP) 7 Tech Meetup for Developers
Liferay (DXP) 7 Tech Meetup for Developers
 
JavaCro'15 - Service Discovery in OSGi Beyond the JVM using Docker and Consul...
JavaCro'15 - Service Discovery in OSGi Beyond the JVM using Docker and Consul...JavaCro'15 - Service Discovery in OSGi Beyond the JVM using Docker and Consul...
JavaCro'15 - Service Discovery in OSGi Beyond the JVM using Docker and Consul...
 
Exploring Java Heap Dumps (Oracle Code One 2018)
Exploring Java Heap Dumps (Oracle Code One 2018)Exploring Java Heap Dumps (Oracle Code One 2018)
Exploring Java Heap Dumps (Oracle Code One 2018)
 
Spring Framework 4.0 to 4.1
Spring Framework 4.0 to 4.1Spring Framework 4.0 to 4.1
Spring Framework 4.0 to 4.1
 
Eclipse Apricot
Eclipse ApricotEclipse Apricot
Eclipse Apricot
 
Why jakarta ee matters (ConFoo 2021)
Why jakarta ee matters (ConFoo 2021)Why jakarta ee matters (ConFoo 2021)
Why jakarta ee matters (ConFoo 2021)
 
Building a server platform with os gi
Building a server platform with os giBuilding a server platform with os gi
Building a server platform with os gi
 
From XPages Hero to OSGi Guru: Taking the Scary out of Building Extension Lib...
From XPages Hero to OSGi Guru: Taking the Scary out of Building Extension Lib...From XPages Hero to OSGi Guru: Taking the Scary out of Building Extension Lib...
From XPages Hero to OSGi Guru: Taking the Scary out of Building Extension Lib...
 
Deep Dive: Alfresco Core Repository (... embedded in a micro-services style a...
Deep Dive: Alfresco Core Repository (... embedded in a micro-services style a...Deep Dive: Alfresco Core Repository (... embedded in a micro-services style a...
Deep Dive: Alfresco Core Repository (... embedded in a micro-services style a...
 
Java 9, JShell, and Modularity
Java 9, JShell, and ModularityJava 9, JShell, and Modularity
Java 9, JShell, and Modularity
 
iPOJO - The Simple Life - Richard Hall, Visiting Assistant Professor at Tufts...
iPOJO - The Simple Life - Richard Hall, Visiting Assistant Professor at Tufts...iPOJO - The Simple Life - Richard Hall, Visiting Assistant Professor at Tufts...
iPOJO - The Simple Life - Richard Hall, Visiting Assistant Professor at Tufts...
 
Java 9 and Project Jigsaw
Java 9 and Project JigsawJava 9 and Project Jigsaw
Java 9 and Project Jigsaw
 
What's New and Next in OpenNTF Domino API (ICON UK 2014)
What's New and Next in OpenNTF Domino API (ICON UK 2014)What's New and Next in OpenNTF Domino API (ICON UK 2014)
What's New and Next in OpenNTF Domino API (ICON UK 2014)
 
Java modularization
Java modularizationJava modularization
Java modularization
 
Java SE 9 modules (JPMS) - an introduction
Java SE 9 modules (JPMS) - an introductionJava SE 9 modules (JPMS) - an introduction
Java SE 9 modules (JPMS) - an introduction
 
Run-time of Node.js : V8 JavaScript Engine
Run-time of Node.js: V8 JavaScript EngineRun-time of Node.js: V8 JavaScript Engine
Run-time of Node.js : V8 JavaScript Engine
 

Viewers also liked

OSGi and JavaScript - Simon Kaegi
OSGi and JavaScript - Simon KaegiOSGi and JavaScript - Simon Kaegi
OSGi and JavaScript - Simon Kaegimfrancis
 
Writing great documentation - CodeConf 2011
Writing great documentation - CodeConf 2011Writing great documentation - CodeConf 2011
Writing great documentation - CodeConf 2011Jacob Kaplan-Moss
 
OSGi and Spring Data for simple (Web) Application Development
OSGi and Spring Data  for simple (Web) Application DevelopmentOSGi and Spring Data  for simple (Web) Application Development
OSGi and Spring Data for simple (Web) Application DevelopmentChristian Baranowski
 
Modular JavaScript in an OSGi World - S Mak
Modular JavaScript in an OSGi World - S MakModular JavaScript in an OSGi World - S Mak
Modular JavaScript in an OSGi World - S Makmfrancis
 
Telling stories through your commits - Lead Developer Conference 2016
Telling stories through your commits - Lead Developer Conference 2016Telling stories through your commits - Lead Developer Conference 2016
Telling stories through your commits - Lead Developer Conference 2016Joel Chippindale
 
Libvirt and bhyve under FreeBSD
Libvirt and bhyve under FreeBSDLibvirt and bhyve under FreeBSD
Libvirt and bhyve under FreeBSDCraig Rodrigues
 
Commit messages - Good practices
Commit messages - Good practicesCommit messages - Good practices
Commit messages - Good practicesTarin Gamberini
 
Protecting Source Code
Protecting Source CodeProtecting Source Code
Protecting Source CodeGodfrey Nolan
 
Hands on with lightweight m2m and Eclipse Leshan
Hands on with lightweight m2m and Eclipse LeshanHands on with lightweight m2m and Eclipse Leshan
Hands on with lightweight m2m and Eclipse LeshanJulien Vermillard
 

Viewers also liked (11)

OSGi and JavaScript - Simon Kaegi
OSGi and JavaScript - Simon KaegiOSGi and JavaScript - Simon Kaegi
OSGi and JavaScript - Simon Kaegi
 
Writing great documentation - CodeConf 2011
Writing great documentation - CodeConf 2011Writing great documentation - CodeConf 2011
Writing great documentation - CodeConf 2011
 
OSGi and Spring Data for simple (Web) Application Development
OSGi and Spring Data  for simple (Web) Application DevelopmentOSGi and Spring Data  for simple (Web) Application Development
OSGi and Spring Data for simple (Web) Application Development
 
Modular JavaScript in an OSGi World - S Mak
Modular JavaScript in an OSGi World - S MakModular JavaScript in an OSGi World - S Mak
Modular JavaScript in an OSGi World - S Mak
 
Jenkins without Install
Jenkins without InstallJenkins without Install
Jenkins without Install
 
Telling stories through your commits - Lead Developer Conference 2016
Telling stories through your commits - Lead Developer Conference 2016Telling stories through your commits - Lead Developer Conference 2016
Telling stories through your commits - Lead Developer Conference 2016
 
Libvirt and bhyve under FreeBSD
Libvirt and bhyve under FreeBSDLibvirt and bhyve under FreeBSD
Libvirt and bhyve under FreeBSD
 
Commit messages - Good practices
Commit messages - Good practicesCommit messages - Good practices
Commit messages - Good practices
 
Why OSGi?
Why OSGi?Why OSGi?
Why OSGi?
 
Protecting Source Code
Protecting Source CodeProtecting Source Code
Protecting Source Code
 
Hands on with lightweight m2m and Eclipse Leshan
Hands on with lightweight m2m and Eclipse LeshanHands on with lightweight m2m and Eclipse Leshan
Hands on with lightweight m2m and Eclipse Leshan
 

Similar to Going Native With The OSGi Service Layer - Sascha Zelzer

Eclipse plug in development
Eclipse plug in developmentEclipse plug in development
Eclipse plug in developmentMartin Toshev
 
OSGi For Java Infrastructures [5th IndicThreads Conference On Java 2010, Pune...
OSGi For Java Infrastructures [5th IndicThreads Conference On Java 2010, Pune...OSGi For Java Infrastructures [5th IndicThreads Conference On Java 2010, Pune...
OSGi For Java Infrastructures [5th IndicThreads Conference On Java 2010, Pune...IndicThreads
 
What's new in the OSGi Enterprise Release 5.0
What's new in the OSGi Enterprise Release 5.0What's new in the OSGi Enterprise Release 5.0
What's new in the OSGi Enterprise Release 5.0David Bosschaert
 
Microservices and modularity with java
Microservices and modularity with javaMicroservices and modularity with java
Microservices and modularity with javaDPC Consulting Ltd
 
OSGi DevCon 2009 Review
OSGi DevCon 2009 ReviewOSGi DevCon 2009 Review
OSGi DevCon 2009 Reviewnjbartlett
 
OSGi User Forum US DC Metro
OSGi User Forum US DC MetroOSGi User Forum US DC Metro
OSGi User Forum US DC MetropjhInovex
 
OSGi user forum dc metro v1
OSGi user forum dc metro v1OSGi user forum dc metro v1
OSGi user forum dc metro v1pjhInovex
 
Plugin-based IVI Architectures with Qt
Plugin-based IVI Architectures with Qt Plugin-based IVI Architectures with Qt
Plugin-based IVI Architectures with Qt ICS
 
CTS2 Development Framework
CTS2 Development FrameworkCTS2 Development Framework
CTS2 Development Frameworkcts2framework
 
Dirigible powered by Orion for Cloud Development (EclipseCon EU 2015)
Dirigible powered by Orion for Cloud Development (EclipseCon EU 2015)Dirigible powered by Orion for Cloud Development (EclipseCon EU 2015)
Dirigible powered by Orion for Cloud Development (EclipseCon EU 2015)Nedelcho Delchev
 
Building modular software with OSGi - Ulf Fildebrandt
Building modular software with OSGi - Ulf FildebrandtBuilding modular software with OSGi - Ulf Fildebrandt
Building modular software with OSGi - Ulf Fildebrandtmfrancis
 
An introduction to Node.js application development
An introduction to Node.js application developmentAn introduction to Node.js application development
An introduction to Node.js application developmentshelloidhq
 
DS, BP, EJB, CDI, WTF!? - Graham Charters
DS, BP, EJB, CDI, WTF!? - Graham ChartersDS, BP, EJB, CDI, WTF!? - Graham Charters
DS, BP, EJB, CDI, WTF!? - Graham Chartersmfrancis
 
Frankenstein's IDE: NetBeans and OSGi
Frankenstein's IDE: NetBeans and OSGiFrankenstein's IDE: NetBeans and OSGi
Frankenstein's IDE: NetBeans and OSGiToni Epple
 
OpenDaylight Developer Experience 2.0
 OpenDaylight Developer Experience 2.0 OpenDaylight Developer Experience 2.0
OpenDaylight Developer Experience 2.0Michael Vorburger
 
Software variability management - 2017
Software variability management - 2017Software variability management - 2017
Software variability management - 2017XavierDevroey
 
NIIF Grid Development portfolio
NIIF Grid Development portfolioNIIF Grid Development portfolio
NIIF Grid Development portfolioFerenc Szalai
 
What's new in the OSGi Enterprise Release 5.0 - David Bosschaert and Tim Diek...
What's new in the OSGi Enterprise Release 5.0 - David Bosschaert and Tim Diek...What's new in the OSGi Enterprise Release 5.0 - David Bosschaert and Tim Diek...
What's new in the OSGi Enterprise Release 5.0 - David Bosschaert and Tim Diek...mfrancis
 

Similar to Going Native With The OSGi Service Layer - Sascha Zelzer (20)

Eclipse plug in development
Eclipse plug in developmentEclipse plug in development
Eclipse plug in development
 
OSGi For Java Infrastructures [5th IndicThreads Conference On Java 2010, Pune...
OSGi For Java Infrastructures [5th IndicThreads Conference On Java 2010, Pune...OSGi For Java Infrastructures [5th IndicThreads Conference On Java 2010, Pune...
OSGi For Java Infrastructures [5th IndicThreads Conference On Java 2010, Pune...
 
What's new in the OSGi Enterprise Release 5.0
What's new in the OSGi Enterprise Release 5.0What's new in the OSGi Enterprise Release 5.0
What's new in the OSGi Enterprise Release 5.0
 
Microservices and modularity with java
Microservices and modularity with javaMicroservices and modularity with java
Microservices and modularity with java
 
OSGi DevCon 2009 Review
OSGi DevCon 2009 ReviewOSGi DevCon 2009 Review
OSGi DevCon 2009 Review
 
OSGi User Forum US DC Metro
OSGi User Forum US DC MetroOSGi User Forum US DC Metro
OSGi User Forum US DC Metro
 
OSGi user forum dc metro v1
OSGi user forum dc metro v1OSGi user forum dc metro v1
OSGi user forum dc metro v1
 
Plugin-based IVI Architectures with Qt
Plugin-based IVI Architectures with Qt Plugin-based IVI Architectures with Qt
Plugin-based IVI Architectures with Qt
 
CTS2 Development Framework
CTS2 Development FrameworkCTS2 Development Framework
CTS2 Development Framework
 
Dirigible powered by Orion for Cloud Development (EclipseCon EU 2015)
Dirigible powered by Orion for Cloud Development (EclipseCon EU 2015)Dirigible powered by Orion for Cloud Development (EclipseCon EU 2015)
Dirigible powered by Orion for Cloud Development (EclipseCon EU 2015)
 
Building modular software with OSGi - Ulf Fildebrandt
Building modular software with OSGi - Ulf FildebrandtBuilding modular software with OSGi - Ulf Fildebrandt
Building modular software with OSGi - Ulf Fildebrandt
 
An introduction to Node.js application development
An introduction to Node.js application developmentAn introduction to Node.js application development
An introduction to Node.js application development
 
Os gi l
Os gi lOs gi l
Os gi l
 
Java one2013
Java one2013Java one2013
Java one2013
 
DS, BP, EJB, CDI, WTF!? - Graham Charters
DS, BP, EJB, CDI, WTF!? - Graham ChartersDS, BP, EJB, CDI, WTF!? - Graham Charters
DS, BP, EJB, CDI, WTF!? - Graham Charters
 
Frankenstein's IDE: NetBeans and OSGi
Frankenstein's IDE: NetBeans and OSGiFrankenstein's IDE: NetBeans and OSGi
Frankenstein's IDE: NetBeans and OSGi
 
OpenDaylight Developer Experience 2.0
 OpenDaylight Developer Experience 2.0 OpenDaylight Developer Experience 2.0
OpenDaylight Developer Experience 2.0
 
Software variability management - 2017
Software variability management - 2017Software variability management - 2017
Software variability management - 2017
 
NIIF Grid Development portfolio
NIIF Grid Development portfolioNIIF Grid Development portfolio
NIIF Grid Development portfolio
 
What's new in the OSGi Enterprise Release 5.0 - David Bosschaert and Tim Diek...
What's new in the OSGi Enterprise Release 5.0 - David Bosschaert and Tim Diek...What's new in the OSGi Enterprise Release 5.0 - David Bosschaert and Tim Diek...
What's new in the OSGi Enterprise Release 5.0 - David Bosschaert and Tim Diek...
 

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

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024The Digital Insurer
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfOverkill Security
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024The Digital Insurer
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native ApplicationsWSO2
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxRustici Software
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024The Digital Insurer
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesrafiqahmad00786416
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 

Recently uploaded (20)

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 

Going Native With The OSGi Service Layer - Sascha Zelzer

  • 1. Going Native with the OSGi Service Layer Sascha Zelzer
  • 2. About Me ● ● Post-doctoral researcher at the German Cancer Research Center (DKFZ) Interested in – Medical Image Processing and Analysis – Modularity and interoperability – Large scale C++ systems – OSGi technology ● Several years of Java and C++ programming experience ● OSGi Invited Researcher ● Participant in the Native OSGi specification effort
  • 3. Outline ● Motivation for native OSGi – like frameworks ● Challenges – Conceptual – Language ● History and Requirements ● The C++ Micro Services Project – Architecture – Features ● Use Cases ● Excursion: Native OSGi ● Roadmap & Summary
  • 4. Motivation ● ● ● ● ● Common C++ software toolkit for medical imaging (MITK) Researchers develop their algorithms in shared libraries (modules) High potential for reuse of common services Modularity and interoperability are key points OSGi provides established means to handle modularity and flexibility Sascha Zelzer 29/10/13
  • 5. Motivation However ● ● ● Medical image processing is traditionally done in C++ (Java and Python are gaining popularity) Large existing code bases written in C++ Full blown OSGi framework (even if available for C++) considered too intrusive and heavy-weight ● C/C++ developers are very conservative ● Lack of a migration path towards full OSGi support Still, there is a need for strong modularity! Sascha Zelzer 29/10/13
  • 6. Challenges OSGi layers are coupled to Java specifics ● Module Layer – – ● Class loading architecture (visibility of classes) Dependency resolution (package wiring) Life-cycle Layer – – ● Lazy activation Updates Service Layer – ● Nothing crucial Security Layer – Based on the Java 2 security architecture Sascha Zelzer 29/10/13
  • 7. Conceptual Challenge – Module Layer ● Bundles are represented by JAR files with meta-data ● Code is organized in packages ● Bundles export and import Java packages ● ● Visibility is controlled via meta-data and custom class loaders OSGi takes care of the correct wiring Platform independent: ● Meta-data ● Embedded resources Sascha Zelzer 29/10/13
  • 8. Conceptual Challenge – Life Cycle ● Elaborate bundle life-cycle and dependency resolution ● Lazy activation triggered by class loading ● Bundle updates at runtime Platform independent: ● Activation ● Life-cycle listeners Sascha Zelzer 29/10/13
  • 9. Language Challenges ● Garbage collector VS Destructors ● Generics VS Templates ● Thread-safety (without third-party libraries) ● Common base class (Object in Java) ServiceRegistration<?> BundleContext.registerService( java.lang.String clazz, java.lang.Object service, …); ServiceRegistration<?> BundleContext::registerService( const std::string& clazz, Object* service, …); Sascha Zelzer 29/10/13
  • 10. Internal History ● The CTK Plugin Framework (started 2007/2008) – Full C++ OSGi implementation (except Security Layer) – Qt dependency ● C++ developers like shared libraries, but frameworks not so much ● Full dynamism was rarely needed ● Service registry and bundle activator solved a couple of issues (e.g. dependencies between singletons) Service registry and basic module layer support useful throughout the whole code-base! Sascha Zelzer 29/10/13
  • 11. Requirements ● No third-party dependencies (only the STL) ● Cross-platform support (Linux, Windows, MacOS) ● C++98 compliance (use C++11 features if available) ● Type-safe API (no void* or client dynamic_cast calls) ● Full Service Layer support ● Module Layer support without its dynamics Sascha Zelzer 29/10/13
  • 12. C++ Micro Services ● Developed and © German Cancer Research Center ● Is a “OSGi Lite” implementation in C++ ● Apache License 2.0 ● GitHub hosted Sascha Zelzer 29/10/13
  • 13. C++ Micro Services - Architecture The CppMicroServices library uses standard shared libraries ● Shared objects (.so) in ELF format on Linux ● Dynamic Link Libraries (.dll) in PE format on Windows ● Dynamic Libraries (.dylib) in MachO format on MacOS The dynamic linker is a sophisticated program handling ● Dependency resolution ● Symbol versioning ● Library initialization Sascha Zelzer 29/10/13
  • 14. Module Layer – Dynamic Linker The dynamic linker of the OS handles ● Symbol visibility – GCC / Clang use __attribute__((visibility (“default”)) – MSVC uses __declspec(dllexport) ● ● ● ● Dependency resolution Symbol lookup (based on link-time dependencies) Less powerful dependency versioning No flat classpath issues as in Java OSGi Lite! Sascha Zelzer 29/10/13
  • 15. Life Cycle – Dynamic Linker The life-cycle is handled by the dynamic linker too ● ● Sequential state diagram Successfully reaches the ACTIVE state or fails completely ● No lazy activation ● No library updates at runtime ● Activation via static initialization ● Deactivation via static de-initialization ● Life-cycle events available Sascha Zelzer 29/10/13
  • 16. Service Layer - Templates ● Type-safe templated API – – Any class can be used as a service interface – No custom dynamic_cast calls necessary – ● No base class for service interfaces or service implementations required Pointer magic hidden from the API user API is almost identical to the OSGi specifications Sascha Zelzer 29/10/13
  • 17. Example – Type Safety ServiceRegistration and ServiceReference classes are templates: struct IMyService { virtual ~IMyService(); }; US_DECLARE_SERVICE_INTERFACE(IMyService,"org.me.IMyService") struct MyService : public IMyService {}; MyService myService; ServiceRegistration<IMyService> reg = context->RegisterService<IMyService>(&myService); ServiceReference<IMyService> ref = context->GetServiceReference<IMyService>(); IMyService* service = context->GetService(ref); context->UngetService(ref); reg.Unregister(); Sascha Zelzer 29/10/13
  • 18. Example – Object Lifetime ● Implicitly shared objects ● Almost no raw pointers for library objects in the API ServiceRegistration<IMyService> reg = context->RegisterService<IMyService>(&myService); ServiceReference<IMyService> ref = context->GetServiceReference<IMyService>(); Sascha Zelzer 29/10/13
  • 19. Example – Auto Loading Library A struct IMyService {}; Library B Library C struct MyService : public IMyService {}; IMyService* service = ctxt->GetService(...); Loading of Library A triggers auto-loading of associated libraries. Sascha Zelzer 29/10/13
  • 20. Example – Listeners ● Listeners for library (bundle) events ● Listeners for service events Use a member function pointer context->AddServiceListener(this, &MyClass::ServiceChanged); void ServiceChanged(const ServiceEvent event) {…} Or any “callable” object (functors, lambdas, etc.) struct MyFunctorialListener { void operator() (const ServiceEvent event) {…} }; context->AddServiceListener(MyFunctorialListener()); Sascha Zelzer 29/10/13
  • 21. Example - Resources ● The generic resources system allows ● Embedding arbitrary data ● Compression if a specific threshold is reached ● Modelling an embedded resources file system ● Access via STL compatible streams ModuleResource resource = module->GetResource("conf.props"); ModuleResourceStream resourceStream(resource); std::string line; while (std::getline(resourceStream, line)) { std::cout << line << std::endl; } Sascha Zelzer 29/10/13
  • 22. Example – JSON Meta-data ● Library meta-data can be added via a JSON file ● Embedded as a resource and parsed at load-time ● Arbitrary key-value pairs, accessible via the module API { "module.version" : "1.0.2", "module.description" : "This module provides a service", "authors" : [ "John Doe", "Douglas Reynolds", "Daniel Kim" ], "rating" : 5 } Module* module = context->GetModule(); int r = ref_any_cast<int>(module->GetProperty("rating")); Sascha Zelzer 29/10/13
  • 23. Example – RFC 195 Service Scopes ● ● In OSGi, services are singletons (sharing state) or bundle specific (ServiceFactory) RFC 195 formalizes service scopes – Singleton and Bundle Scope: As usual – Prototype Scope (new): Create service instances based on a prototype on demand class MyFactory : public PrototypeServiceFactory {…}; context->RegisterService<IMyService>(myFactory); ServiceReference<IMyService> ref = context->GetServiceReference<IMyService>(); ServiceObjects<IMyService> objects = context->GetServiceObjects(ref); IMyService* myService = objects.GetService(); objects.UngetService(myService); Sascha Zelzer 29/10/13
  • 24. Example – LDAP Filter DSL Creating LDAP filter strings in Java is error-prone. Filter example: “(&(name=Ben)(!(count=1)))” context.createFilter("(&(name=Ben)(!(count=1))"); LDAPFilter filter( LDAPProp("name") == "Ben" && LDAPProp("count") != 1 ); Sascha Zelzer 29/10/13
  • 25. More ● Global library specific GetModuleContext() function for easy context retrieval ● Hooks for framework log messages ● Full static linking support Sascha Zelzer 29/10/13
  • 26. Use Cases DS4Cpp ● ● ● A declarative services framework in C++ based on CppMicroServices Contributed by Global Vision Systems Introduces similar dependency-injection patterns across their Java and C++ code-base Interest from various technical companies ● Embedded systems ● Avionics and sensoring ● Military sub-contractors working on mission-critical software ● Medical Imaging (e.g. Mint Medical) Sascha Zelzer 29/10/13
  • 27. Use Case - MITK ● Injection of an Activator class in all shared libraries ● Conversion of singletons to services ● Increased cohesion by embedding resources ● ● Decreased coupling via interfaces and services Auto-loading of libraries providing service implementations Sascha Zelzer 29/10/13
  • 28. Use Case - MITK ● ● ● Whiteboard pattern for interaction event listener Hardware devices (like range cameras and optical tracker) modelled as services File reader writer services with prototype scope Sascha Zelzer 29/10/13
  • 29. Native OSGi ● Several C/C++ implementations have been created – – CTK Plugin Framework (C++, Qt based) – Apache Celix (C) – Nostrum (C++, POSIX) – SOF (C++, CORBA remoting) – ● CppMicroServices (C++) Poco OSP (commercial) Developers joined forces and created RFP 156 Native OSGi for standardization of a native C/C++ API – RFP 156 will be voted on in November – RFC workis about to be started – CppMicroServices is field-testing a native service-layer API Sascha Zelzer 29/10/13
  • 30. Roadmap Release 2.0 ● Service hooks Ecosystem ● Configuration Admin ● Device Access ● Event Admin ● Remote Services Native OSGi ● Specify the Service Layer API ● Work on a native Module Layer Sascha Zelzer 29/10/13
  • 31. Summary ● OSGi Lite is well accepted by C++ developers ● Less complexity due to the missing module layer ● ● ● ● Less flexibility and dynamism C++ OSGi API can be very close to the Java version Used in and interest from various domains API should converge with Native OSGi efforts in the future Sascha Zelzer 29/10/13
  • 32. URLs C++ Micro Service ● Homepage http://cppmicroservices.org ● GitHub https://github.com/saschazelzer/CppMicroServices ● Blog http://blog.cppmicroservices.org RFP 156 – Native OSGi ● Bug https://www.osgi.org/bugzilla/show_bug.cgi?id=165 ● Document https://github.com/osgi/design/tree/master/rfps Sascha Zelzer 29/10/13