SlideShare ist ein Scribd-Unternehmen logo
1 von 33
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

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
 

Was ist angesagt? (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
 

Andere mochten auch

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
 

Andere mochten auch (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
 

Ähnlich wie 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
 

Ähnlich wie 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...
 

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

Mehr von 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)
 

Kürzlich hochgeladen

Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
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
 
"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
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DaySri Ambati
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
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 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
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
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
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 

Kürzlich hochgeladen (20)

Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
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
 
"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
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
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 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
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
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
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 

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