SlideShare uma empresa Scribd logo
1 de 32
Baixar para ler offline
Motivation
Implementation
Going Universal
Summary
Universal Declarative Services
A component framework for C++ and a model-driven solution to
polyglot components
Simon Chemouil
1
1Global Vision Systems
OSGi Community Event, 2012
Simon Chemouil Universal Declarative Services
Motivation
Implementation
Going Universal
Summary
Who am I?
Free Software enthusiast, functional programmer, interested in
model-driven development, modularity, re-usability,
maintainability. . .
How to never have to write that piece of software again?
Technical Architect at Global Vision Systems, Toulouse
We create data visualization software for large industries (2D,
3D, tables, etc).
We do both Java and C++
Java using OSGi (Felix, iPojo) for server and client side
(Eclipse RCP and Android)
C++ to keep a fast 3D engine-agnostic manipulation layer
Simon Chemouil Universal Declarative Services
Motivation
Implementation
Going Universal
Summary
Outline
1 Motivation
The case for modularity
Service Components and C++
2 Implementing Declarative Services for C++
Challenges in C++
Dening components
3 Going Universal
Simpler Component Denitions
What's next?
4 Summary
Conclusion
Simon Chemouil Universal Declarative Services
Motivation
Implementation
Going Universal
Summary
Why modularity?
Service Components
Native OSGi
Did you miss Native-OSGi, Modular Software Development in
a Native world by Alexander Broekhuis and Sascha Zelzer?
Universal OSGi
an RFP and a blog post by Peter Kriens in 2007.
Apply OSGi techniques to native (C/C++) development.
Simon Chemouil Universal Declarative Services
Motivation
Implementation
Going Universal
Summary
Why modularity?
Service Components
An OSGi Architect Walks in a C++ Bar...
Our C++ project going through re-architecture / refactoring
Custom-made plugin system, limited.
Plugins can't use each other
C/C++ OSGi ports:
Celix (Alexander), CppMicroServices (Sascha), SOF, CTK,
nOSGi, . . .
Yet no service component framework such as Declarative
Services
Simon Chemouil Universal Declarative Services
Motivation
Implementation
Going Universal
Summary
Why modularity?
Service Components
Why a Service Component Framework?
Services: powerful primitives, unpractical programming:
Lack of structure
Dynamic
Service Components:
Structure the services
A nice semantic model to reason about dynamism
Why is there no such framework for an OSGi C++ port:
1 Technical challenges
2 It was just not done yet!
Simon Chemouil Universal Declarative Services
Motivation
Implementation
Going Universal
Summary
Why modularity?
Service Components
Why Declarative Services?
Many existing component frameworks for C++
Just as there were some for Java before DS
No modularity
Simple and matured component model
A few years of personal experience
Works with POJOs (or POCOs!)
Components do not depend on the framework
Makes them testable and easily reusable!
Simon Chemouil Universal Declarative Services
Motivation
Implementation
Going Universal
Summary
Why modularity?
Service Components
Does it make sense for C++?
We use C++ for performance:
Performance hit with component frameworks?
We need extensibility and customization...
Do we need modularity?
Why use dierent architecture between Java and C++?
What if we could talk about components, whatever the
implementation language?
Simon Chemouil Universal Declarative Services
Motivation
Implementation
Going Universal
Summary
Challenges in C++
Dening components
Getting started
Native OSGi implementation:
CppMicroServices is light, works with any shared library
Inspired by PojoSR
For C++!
Bundles are called Modules:
Native shared libraries: not archives.
Moving to NativeOSGi later?
Easy! Components are framework-agnostic!
Simon Chemouil Universal Declarative Services
Motivation
Implementation
Going Universal
Summary
Challenges in C++
Dening components
Ingredients in Declarative Services
Components are described in XML les in the bundle
Service callbacks
Dened in description
Service arrival/departure
Policy, Cardinality, Target
Component callbacks
Activation, modication, deactivation
Simon Chemouil Universal Declarative Services
Motivation
Implementation
Going Universal
Summary
Challenges in C++
Dening components
Component Descriptions in C++
XML descriptions. . .
We have native shared libraries, not JARs!
Instead, we register a ComponentDescriptor instance to the
ComponentManager service.
The ComponentManager service is provided by the core
Ds4Cpp framework.
Simon Chemouil Universal Declarative Services
Motivation
Implementation
Going Universal
Summary
Challenges in C++
Dening components
Component Descriptions in C++
Denition
class C o m p o n e n t D e s c r i p t o r {
public :
const s t r i n g c o m p o n e n t I d ;
const s t r i n g i m p l S h a r e d O b j e c t ;
const v e c t o r s t r i n g ∗ p r o v i d e d S e r v i c e s ;
v e c t o r C omponent Reference ∗ r e f e r e n c e s ;
const bool i m m e d i a t e ;
const bool a u t o E n a b l e ;
} ;
Simon Chemouil Universal Declarative Services
Motivation
Implementation
Going Universal
Summary
Challenges in C++
Dening components
Component Descriptions in C++
Let's see how it looks like in practice. . .
Simon Chemouil Universal Declarative Services
Motivation
Implementation
Going Universal
Summary
Challenges in C++
Dening components
Extensible Hello World!
Simon Chemouil Universal Declarative Services
Motivation
Implementation
Going Universal
Summary
Challenges in C++
Dening components
Component Descriptions in C++
Denition
std : : vector ComponentReference ∗ r e f e r e n c e s = . . . ;
references −push_back (
ComponentReference (greetdemo : : GreetProvider  , 
greetdemo : : GreetProvider  ,
std : : s t r i n g () , ComponentReference : : DYNAMIC,
ComponentReference : : MULTIPLE,
ComponentReference : : OPTIONAL_REF) ) ;
std : : vector std : : string  s e r v i c e s ;
s e r v i c e s . push_back (greetdemo : : GreetManager) ;
ComponentDescriptor ∗ componentDesc =
new ds4cpp : : ComponentDescriptor (
greetdemo : : GreetManagerImpl , ,
s e r v i c e s , ∗ references , true , true ) ;
Simon Chemouil Universal Declarative Services
Motivation
Implementation
Going Universal
Summary
Challenges in C++
Dening components
A Component in C++
Denition
c l a s s GreetManagerImpl : p u b l i c GreetManager {
p u b l i c :
GreetManagerImpl () ; v i r t u a l ~GreetManagerImpl () ;
void a c t i v a t e () ;
void addGreetProvider ( GreetProvider ∗) ;
void removeGreetProvider ( GreetProvider ∗) ;
// S e r v i c e m e t h o d s .
s t r i n g getDefaultTarget ( const s t r i n g ) const ;
s t r i n g getGreeting ( const s t r i n g , const s t r i n g )
const ;
l i s t string  g e t A l l G r e e t i n g s ( const s t r i n g ) const ;
l i s t string  getAvailableLanguages () const ;
};
Simon Chemouil Universal Declarative Services
Motivation
Implementation
Going Universal
Summary
Challenges in C++
Dening components
Service Callbacks in C++ (1/2)
No reection/introspection!
There are some limited libraries (e.g Reex).
C++ name mangling
We can't guess the binary name
Instead, we force a convention in the C++ component:
setRefName, unsetRefName for single dependencies
addRefName, removeRefName for multiple
dependencies
Simon Chemouil Universal Declarative Services
Motivation
Implementation
Going Universal
Summary
Challenges in C++
Dening components
Service Callbacks in C++ (2/2)
Our tools: dlopen/dlsym/dlclose (and Windows equivalents)
Against us: C++ name mangling
Solutions?
Reection libraries: too limited, not dynamic.
C++11 attributes (≈ Java annotations): still largely
unsupported
Qt meta-objects? Not bad!
Yet need a custom preprocessor
Still not modular (work in progress)
How about C wrappers?
Dicult to write manually, but provide universal ABI!
Simon Chemouil Universal Declarative Services
Motivation
Implementation
Going Universal
Summary
Challenges in C++
Dening components
C Wrapper
Denition
extern C {
DS_ABI_EXPORT GreetManagerImplWrapper∗
__greetdemo__GreetManagerImpl__create () {
return new GreetManagerImplWrapper ;
}
DS_ABI_EXPORT void __greetdemo__GreetManagerImpl__activate (
GreetManagerImplWrapper∗ object ) {
object −a c t i v a t e () ;
}
DS_ABI_EXPORT void
__greetdemo__GreetManagerImpl__add_greetdemo__GreetProvider (
GreetManagerImplWrapper∗ object , : : us : : Base ∗ s e r v i c e ) {
greetdemo : : GreetProvider ∗ l s e r v i c e = dynamic_castgreetdemo : :
GreetProvider ∗( s e r v i c e ) ;
object −addGreetProvider ( l s e r v i c e ) ;
}
DS_ABI_EXPORT void
__greetdemo__GreetManagerImpl__remove_greetdemo__GreetProvider (
GreetManagerImplWrapper∗ object , : : us : : Base ∗ s e r v i c e ) {
greetdemo : : GreetProvider ∗ l s e r v i c e = dynamic_castgreetdemo : :
GreetProvider ∗( s e r v i c e ) ;
object −removeGreetProvider ( l s e r v i c e ) ;
} } // extern C
Simon Chemouil Universal Declarative Services
Motivation
Implementation
Going Universal
Summary
Challenges in C++
Dening components
It works! But. . .
The proof-of-concept is successful:
We have components wired dynamically
OSGi's patterns work nicely (yet a bit more tricky)
We support the use cases we need
Dynamic arrival, thread-safety planned but unnished, service
removal to do.
But no one would write that wrapper code!
Are there solutions to help us here?
Simon Chemouil Universal Declarative Services
Demo Time!
Motivation
Implementation
Going Universal
Summary
Simpler Component Denitions
What's next?
C++ is too complex!
Automatically generating the wrappers?
Where to get the description?
Macros?
Parsing C++?!
Xtext
Java tooling to dene DSLs and compilers
Generates an Eclipse editor!
Uses EMF as backend, so more can be built upon.
Simon Chemouil Universal Declarative Services
Motivation
Implementation
Going Universal
Summary
Simpler Component Denitions
What's next?
Back to GreetManagerImpl!
Denition
component g r e e t d e m o . G r e e t M a n a g e r I m p l {
provides {
g r e e t d e m o . G r e e t M a n a g e r
}
references {
dynamic service g r e e t d e m o . G r e e t P r o v i d e r [ 0 . . n ]
}
}
Simon Chemouil Universal Declarative Services
Motivation
Implementation
Going Universal
Summary
Simpler Component Denitions
What's next?
Dening multiple components
Denition
module DSDemo {
name = DS G r e e t Demo
version = 1 . 0 . 0
includes {
g r e e t d e m o . E n g l i s h G r e e t P r o v i d e r
g r e e t d e m o . F r e n c h G r e e t P r o v i d e r
g r e e t d e m o . G r e e t M a n a g e r I m p l
g r e e t d e m o . C o n s o l e G r e e t e r
}
}
Simon Chemouil Universal Declarative Services
Generating C++ code
Demo Time!
Motivation
Implementation
Going Universal
Summary
Simpler Component Denitions
What's next?
Improving our ADL
The ADL we designed maps to Declarative Services'
capabilities
What about richer component models?
Creating new target language back-ends
Java/DS, Java/iPojo
Making it extensible
Simon Chemouil Universal Declarative Services
Motivation
Implementation
Going Universal
Summary
Simpler Component Denitions
What's next?
Bridging Java and C++
Using Remote OSGi Services:
An idea discussed in NativeOSGi.
We expose C++ services where we can generate a Java
interface
Use JNI/JNA bindings or network.
Basically, we bridge the two service registries!
It does sound like CORBA
Simon Chemouil Universal Declarative Services
Motivation
Implementation
Going Universal
Summary
Simpler Component Denitions
What's next?
Creating UI Tools
Textual DSLs are nice...
But component diagrams are nicer!
Up-to-date component metadata is extremely useful:
Forces high-level design (round-trips between architects and
developers)
Allows code generation/rapid project bootstrapping
Static analysis (code conformance)
Can be used for SDK documentation.
Long term project!
Simon Chemouil Universal Declarative Services
Motivation
Implementation
Going Universal
Summary
Conclusion
Declarative Services for C++
We have been using Ds4Cpp for a few months!
If you want to try it. . . you can! We just open sourced it
(Apache Software License 2.0)
https://github.com/Global-Vision-Systems/Ds4Cpp
(the demo is packaged with it)!
We need testers and eyes to x my bad C++ :-)
And remove the limitations (talk to me!)
Simon Chemouil Universal Declarative Services
Motivation
Implementation
Going Universal
Summary
Conclusion
Universal Components Tooling
The tooling has still some rough edges
Enough for our current needs. . .
Some clean-up required.
We have a roadmap for the improvements.
Simon Chemouil Universal Declarative Services
Motivation
Implementation
Going Universal
Summary
Conclusion
Universal Declarative Services
Questions?
Twitter:
@simach
simon.chemouil@global-vision-systems.com
Simon Chemouil Universal Declarative Services

Mais conteúdo relacionado

Mais procurados

Necessitas - Qt on Android - from FSCONS 2011
Necessitas - Qt on Android - from FSCONS 2011Necessitas - Qt on Android - from FSCONS 2011
Necessitas - Qt on Android - from FSCONS 2011Johan Thelin
 
Building the QML Run-time
Building the QML Run-timeBuilding the QML Run-time
Building the QML Run-timeJohan Thelin
 
OpenGL Fixed Function to Shaders - Porting a fixed function application to “m...
OpenGL Fixed Function to Shaders - Porting a fixed function application to “m...OpenGL Fixed Function to Shaders - Porting a fixed function application to “m...
OpenGL Fixed Function to Shaders - Porting a fixed function application to “m...ICS
 
Comunicare, condividere e mantenere decisioni architetturali nei team di svil...
Comunicare, condividere e mantenere decisioni architetturali nei team di svil...Comunicare, condividere e mantenere decisioni architetturali nei team di svil...
Comunicare, condividere e mantenere decisioni architetturali nei team di svil...Michele Orselli
 
ScalaMatsuri 2016 ドワンゴアカウントシステムを支えるScala技術
ScalaMatsuri 2016 ドワンゴアカウントシステムを支えるScala技術ScalaMatsuri 2016 ドワンゴアカウントシステムを支えるScala技術
ScalaMatsuri 2016 ドワンゴアカウントシステムを支えるScala技術Seitaro Yuuki
 

Mais procurados (9)

Necessitas - Qt on Android - from FSCONS 2011
Necessitas - Qt on Android - from FSCONS 2011Necessitas - Qt on Android - from FSCONS 2011
Necessitas - Qt on Android - from FSCONS 2011
 
Qt Workshop
Qt WorkshopQt Workshop
Qt Workshop
 
Cross Platform Qt
Cross Platform QtCross Platform Qt
Cross Platform Qt
 
Building the QML Run-time
Building the QML Run-timeBuilding the QML Run-time
Building the QML Run-time
 
OpenGL Fixed Function to Shaders - Porting a fixed function application to “m...
OpenGL Fixed Function to Shaders - Porting a fixed function application to “m...OpenGL Fixed Function to Shaders - Porting a fixed function application to “m...
OpenGL Fixed Function to Shaders - Porting a fixed function application to “m...
 
Comunicare, condividere e mantenere decisioni architetturali nei team di svil...
Comunicare, condividere e mantenere decisioni architetturali nei team di svil...Comunicare, condividere e mantenere decisioni architetturali nei team di svil...
Comunicare, condividere e mantenere decisioni architetturali nei team di svil...
 
ScalaMatsuri 2016 ドワンゴアカウントシステムを支えるScala技術
ScalaMatsuri 2016 ドワンゴアカウントシステムを支えるScala技術ScalaMatsuri 2016 ドワンゴアカウントシステムを支えるScala技術
ScalaMatsuri 2016 ドワンゴアカウントシステムを支えるScala技術
 
Beyond C++17
Beyond C++17Beyond C++17
Beyond C++17
 
Concurrencyproblem
ConcurrencyproblemConcurrencyproblem
Concurrencyproblem
 

Semelhante a Universal Declarative Services - Simon Chemouil

Universal Declarative Services
Universal Declarative ServicesUniversal Declarative Services
Universal Declarative Servicesschemouil
 
Auto sre with keptn
Auto sre with keptnAuto sre with keptn
Auto sre with keptnLibbySchulze
 
C:\Fakepath\Combating Software Entropy 2
C:\Fakepath\Combating Software Entropy 2C:\Fakepath\Combating Software Entropy 2
C:\Fakepath\Combating Software Entropy 2Hammad Rajjoub
 
C:\Fakepath\Combating Software Entropy 2
C:\Fakepath\Combating Software Entropy 2C:\Fakepath\Combating Software Entropy 2
C:\Fakepath\Combating Software Entropy 2Hammad Rajjoub
 
Combating software entropy 2-roc1-
Combating software entropy 2-roc1-Combating software entropy 2-roc1-
Combating software entropy 2-roc1-Hammad Rajjoub
 
A Guide to Event-Driven SRE-inspired DevOps
A Guide to Event-Driven SRE-inspired DevOpsA Guide to Event-Driven SRE-inspired DevOps
A Guide to Event-Driven SRE-inspired DevOpsAndreas Grabner
 
The First C# Project Analyzed
The First C# Project AnalyzedThe First C# Project Analyzed
The First C# Project AnalyzedPVS-Studio
 
On component interface
On component interfaceOn component interface
On component interfaceLaurence Chen
 
The Magic Of Application Lifecycle Management In Vs Public
The Magic Of Application Lifecycle Management In Vs PublicThe Magic Of Application Lifecycle Management In Vs Public
The Magic Of Application Lifecycle Management In Vs PublicDavid Solivan
 
Migrating From Cpp To C Sharp
Migrating From Cpp To C SharpMigrating From Cpp To C Sharp
Migrating From Cpp To C SharpGanesh Samarthyam
 
Architecture refactoring - accelerating business success
Architecture refactoring - accelerating business successArchitecture refactoring - accelerating business success
Architecture refactoring - accelerating business successGanesh Samarthyam
 
How to avoid bugs using modern C++
How to avoid bugs using modern C++How to avoid bugs using modern C++
How to avoid bugs using modern C++PVS-Studio
 
Core .NET Framework 4.0 Enhancements
Core .NET Framework 4.0 EnhancementsCore .NET Framework 4.0 Enhancements
Core .NET Framework 4.0 EnhancementsRobert MacLean
 
Keeping Your DevOps Transformation From Crushing Your Ops Capacity
Keeping Your DevOps Transformation From Crushing Your Ops Capacity Keeping Your DevOps Transformation From Crushing Your Ops Capacity
Keeping Your DevOps Transformation From Crushing Your Ops Capacity Rundeck
 
High performance web programming with C++14
High performance web programming with C++14High performance web programming with C++14
High performance web programming with C++14Matthieu Garrigues
 
Intro to Eclipse Che, by Tyler Jewell
Intro to Eclipse Che, by Tyler JewellIntro to Eclipse Che, by Tyler Jewell
Intro to Eclipse Che, by Tyler Jewelljwi11iams
 
Transforming Front-End Disaster Code™ Into A Maintainable Masterpiece
Transforming Front-End Disaster Code™ Into A Maintainable MasterpieceTransforming Front-End Disaster Code™ Into A Maintainable Masterpiece
Transforming Front-End Disaster Code™ Into A Maintainable MasterpieceDan Gribbin
 

Semelhante a Universal Declarative Services - Simon Chemouil (20)

Universal Declarative Services
Universal Declarative ServicesUniversal Declarative Services
Universal Declarative Services
 
Auto sre with keptn
Auto sre with keptnAuto sre with keptn
Auto sre with keptn
 
C:\Fakepath\Combating Software Entropy 2
C:\Fakepath\Combating Software Entropy 2C:\Fakepath\Combating Software Entropy 2
C:\Fakepath\Combating Software Entropy 2
 
C:\Fakepath\Combating Software Entropy 2
C:\Fakepath\Combating Software Entropy 2C:\Fakepath\Combating Software Entropy 2
C:\Fakepath\Combating Software Entropy 2
 
Combating software entropy 2-roc1-
Combating software entropy 2-roc1-Combating software entropy 2-roc1-
Combating software entropy 2-roc1-
 
A Guide to Event-Driven SRE-inspired DevOps
A Guide to Event-Driven SRE-inspired DevOpsA Guide to Event-Driven SRE-inspired DevOps
A Guide to Event-Driven SRE-inspired DevOps
 
The First C# Project Analyzed
The First C# Project AnalyzedThe First C# Project Analyzed
The First C# Project Analyzed
 
On component interface
On component interfaceOn component interface
On component interface
 
The MirAL Story
The MirAL StoryThe MirAL Story
The MirAL Story
 
Binding android piece by piece
Binding android piece by pieceBinding android piece by piece
Binding android piece by piece
 
The Magic Of Application Lifecycle Management In Vs Public
The Magic Of Application Lifecycle Management In Vs PublicThe Magic Of Application Lifecycle Management In Vs Public
The Magic Of Application Lifecycle Management In Vs Public
 
Migrating From Cpp To C Sharp
Migrating From Cpp To C SharpMigrating From Cpp To C Sharp
Migrating From Cpp To C Sharp
 
Architecture refactoring - accelerating business success
Architecture refactoring - accelerating business successArchitecture refactoring - accelerating business success
Architecture refactoring - accelerating business success
 
Part 1
Part 1Part 1
Part 1
 
How to avoid bugs using modern C++
How to avoid bugs using modern C++How to avoid bugs using modern C++
How to avoid bugs using modern C++
 
Core .NET Framework 4.0 Enhancements
Core .NET Framework 4.0 EnhancementsCore .NET Framework 4.0 Enhancements
Core .NET Framework 4.0 Enhancements
 
Keeping Your DevOps Transformation From Crushing Your Ops Capacity
Keeping Your DevOps Transformation From Crushing Your Ops Capacity Keeping Your DevOps Transformation From Crushing Your Ops Capacity
Keeping Your DevOps Transformation From Crushing Your Ops Capacity
 
High performance web programming with C++14
High performance web programming with C++14High performance web programming with C++14
High performance web programming with C++14
 
Intro to Eclipse Che, by Tyler Jewell
Intro to Eclipse Che, by Tyler JewellIntro to Eclipse Che, by Tyler Jewell
Intro to Eclipse Che, by Tyler Jewell
 
Transforming Front-End Disaster Code™ Into A Maintainable Masterpiece
Transforming Front-End Disaster Code™ Into A Maintainable MasterpieceTransforming Front-End Disaster Code™ Into A Maintainable Masterpiece
Transforming Front-End Disaster Code™ Into A Maintainable Masterpiece
 

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

Mais de 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)
 

Último

Cyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdfCyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdfOverkill Security
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKJago de Vreede
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodJuan lago vázquez
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
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
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Angeliki Cooney
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
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
 
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
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamUiPathCommunity
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...Zilliz
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Victor Rentea
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...apidays
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
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
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native ApplicationsWSO2
 
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
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...apidays
 

Último (20)

Cyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdfCyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdf
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
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
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
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...
 
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...
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
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...
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
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
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 

Universal Declarative Services - Simon Chemouil

  • 1. Motivation Implementation Going Universal Summary Universal Declarative Services A component framework for C++ and a model-driven solution to polyglot components Simon Chemouil 1 1Global Vision Systems OSGi Community Event, 2012 Simon Chemouil Universal Declarative Services
  • 2. Motivation Implementation Going Universal Summary Who am I? Free Software enthusiast, functional programmer, interested in model-driven development, modularity, re-usability, maintainability. . . How to never have to write that piece of software again? Technical Architect at Global Vision Systems, Toulouse We create data visualization software for large industries (2D, 3D, tables, etc). We do both Java and C++ Java using OSGi (Felix, iPojo) for server and client side (Eclipse RCP and Android) C++ to keep a fast 3D engine-agnostic manipulation layer Simon Chemouil Universal Declarative Services
  • 3. Motivation Implementation Going Universal Summary Outline 1 Motivation The case for modularity Service Components and C++ 2 Implementing Declarative Services for C++ Challenges in C++ Dening components 3 Going Universal Simpler Component Denitions What's next? 4 Summary Conclusion Simon Chemouil Universal Declarative Services
  • 4. Motivation Implementation Going Universal Summary Why modularity? Service Components Native OSGi Did you miss Native-OSGi, Modular Software Development in a Native world by Alexander Broekhuis and Sascha Zelzer? Universal OSGi an RFP and a blog post by Peter Kriens in 2007. Apply OSGi techniques to native (C/C++) development. Simon Chemouil Universal Declarative Services
  • 5. Motivation Implementation Going Universal Summary Why modularity? Service Components An OSGi Architect Walks in a C++ Bar... Our C++ project going through re-architecture / refactoring Custom-made plugin system, limited. Plugins can't use each other C/C++ OSGi ports: Celix (Alexander), CppMicroServices (Sascha), SOF, CTK, nOSGi, . . . Yet no service component framework such as Declarative Services Simon Chemouil Universal Declarative Services
  • 6. Motivation Implementation Going Universal Summary Why modularity? Service Components Why a Service Component Framework? Services: powerful primitives, unpractical programming: Lack of structure Dynamic Service Components: Structure the services A nice semantic model to reason about dynamism Why is there no such framework for an OSGi C++ port: 1 Technical challenges 2 It was just not done yet! Simon Chemouil Universal Declarative Services
  • 7. Motivation Implementation Going Universal Summary Why modularity? Service Components Why Declarative Services? Many existing component frameworks for C++ Just as there were some for Java before DS No modularity Simple and matured component model A few years of personal experience Works with POJOs (or POCOs!) Components do not depend on the framework Makes them testable and easily reusable! Simon Chemouil Universal Declarative Services
  • 8. Motivation Implementation Going Universal Summary Why modularity? Service Components Does it make sense for C++? We use C++ for performance: Performance hit with component frameworks? We need extensibility and customization... Do we need modularity? Why use dierent architecture between Java and C++? What if we could talk about components, whatever the implementation language? Simon Chemouil Universal Declarative Services
  • 9. Motivation Implementation Going Universal Summary Challenges in C++ Dening components Getting started Native OSGi implementation: CppMicroServices is light, works with any shared library Inspired by PojoSR For C++! Bundles are called Modules: Native shared libraries: not archives. Moving to NativeOSGi later? Easy! Components are framework-agnostic! Simon Chemouil Universal Declarative Services
  • 10. Motivation Implementation Going Universal Summary Challenges in C++ Dening components Ingredients in Declarative Services Components are described in XML les in the bundle Service callbacks Dened in description Service arrival/departure Policy, Cardinality, Target Component callbacks Activation, modication, deactivation Simon Chemouil Universal Declarative Services
  • 11. Motivation Implementation Going Universal Summary Challenges in C++ Dening components Component Descriptions in C++ XML descriptions. . . We have native shared libraries, not JARs! Instead, we register a ComponentDescriptor instance to the ComponentManager service. The ComponentManager service is provided by the core Ds4Cpp framework. Simon Chemouil Universal Declarative Services
  • 12. Motivation Implementation Going Universal Summary Challenges in C++ Dening components Component Descriptions in C++ Denition class C o m p o n e n t D e s c r i p t o r { public : const s t r i n g c o m p o n e n t I d ; const s t r i n g i m p l S h a r e d O b j e c t ; const v e c t o r s t r i n g ∗ p r o v i d e d S e r v i c e s ; v e c t o r C omponent Reference ∗ r e f e r e n c e s ; const bool i m m e d i a t e ; const bool a u t o E n a b l e ; } ; Simon Chemouil Universal Declarative Services
  • 13. Motivation Implementation Going Universal Summary Challenges in C++ Dening components Component Descriptions in C++ Let's see how it looks like in practice. . . Simon Chemouil Universal Declarative Services
  • 14. Motivation Implementation Going Universal Summary Challenges in C++ Dening components Extensible Hello World! Simon Chemouil Universal Declarative Services
  • 15. Motivation Implementation Going Universal Summary Challenges in C++ Dening components Component Descriptions in C++ Denition std : : vector ComponentReference ∗ r e f e r e n c e s = . . . ; references −push_back ( ComponentReference (greetdemo : : GreetProvider , greetdemo : : GreetProvider , std : : s t r i n g () , ComponentReference : : DYNAMIC, ComponentReference : : MULTIPLE, ComponentReference : : OPTIONAL_REF) ) ; std : : vector std : : string s e r v i c e s ; s e r v i c e s . push_back (greetdemo : : GreetManager) ; ComponentDescriptor ∗ componentDesc = new ds4cpp : : ComponentDescriptor ( greetdemo : : GreetManagerImpl , , s e r v i c e s , ∗ references , true , true ) ; Simon Chemouil Universal Declarative Services
  • 16. Motivation Implementation Going Universal Summary Challenges in C++ Dening components A Component in C++ Denition c l a s s GreetManagerImpl : p u b l i c GreetManager { p u b l i c : GreetManagerImpl () ; v i r t u a l ~GreetManagerImpl () ; void a c t i v a t e () ; void addGreetProvider ( GreetProvider ∗) ; void removeGreetProvider ( GreetProvider ∗) ; // S e r v i c e m e t h o d s . s t r i n g getDefaultTarget ( const s t r i n g ) const ; s t r i n g getGreeting ( const s t r i n g , const s t r i n g ) const ; l i s t string g e t A l l G r e e t i n g s ( const s t r i n g ) const ; l i s t string getAvailableLanguages () const ; }; Simon Chemouil Universal Declarative Services
  • 17. Motivation Implementation Going Universal Summary Challenges in C++ Dening components Service Callbacks in C++ (1/2) No reection/introspection! There are some limited libraries (e.g Reex). C++ name mangling We can't guess the binary name Instead, we force a convention in the C++ component: setRefName, unsetRefName for single dependencies addRefName, removeRefName for multiple dependencies Simon Chemouil Universal Declarative Services
  • 18. Motivation Implementation Going Universal Summary Challenges in C++ Dening components Service Callbacks in C++ (2/2) Our tools: dlopen/dlsym/dlclose (and Windows equivalents) Against us: C++ name mangling Solutions? Reection libraries: too limited, not dynamic. C++11 attributes (≈ Java annotations): still largely unsupported Qt meta-objects? Not bad! Yet need a custom preprocessor Still not modular (work in progress) How about C wrappers? Dicult to write manually, but provide universal ABI! Simon Chemouil Universal Declarative Services
  • 19. Motivation Implementation Going Universal Summary Challenges in C++ Dening components C Wrapper Denition extern C { DS_ABI_EXPORT GreetManagerImplWrapper∗ __greetdemo__GreetManagerImpl__create () { return new GreetManagerImplWrapper ; } DS_ABI_EXPORT void __greetdemo__GreetManagerImpl__activate ( GreetManagerImplWrapper∗ object ) { object −a c t i v a t e () ; } DS_ABI_EXPORT void __greetdemo__GreetManagerImpl__add_greetdemo__GreetProvider ( GreetManagerImplWrapper∗ object , : : us : : Base ∗ s e r v i c e ) { greetdemo : : GreetProvider ∗ l s e r v i c e = dynamic_castgreetdemo : : GreetProvider ∗( s e r v i c e ) ; object −addGreetProvider ( l s e r v i c e ) ; } DS_ABI_EXPORT void __greetdemo__GreetManagerImpl__remove_greetdemo__GreetProvider ( GreetManagerImplWrapper∗ object , : : us : : Base ∗ s e r v i c e ) { greetdemo : : GreetProvider ∗ l s e r v i c e = dynamic_castgreetdemo : : GreetProvider ∗( s e r v i c e ) ; object −removeGreetProvider ( l s e r v i c e ) ; } } // extern C Simon Chemouil Universal Declarative Services
  • 20. Motivation Implementation Going Universal Summary Challenges in C++ Dening components It works! But. . . The proof-of-concept is successful: We have components wired dynamically OSGi's patterns work nicely (yet a bit more tricky) We support the use cases we need Dynamic arrival, thread-safety planned but unnished, service removal to do. But no one would write that wrapper code! Are there solutions to help us here? Simon Chemouil Universal Declarative Services
  • 22. Motivation Implementation Going Universal Summary Simpler Component Denitions What's next? C++ is too complex! Automatically generating the wrappers? Where to get the description? Macros? Parsing C++?! Xtext Java tooling to dene DSLs and compilers Generates an Eclipse editor! Uses EMF as backend, so more can be built upon. Simon Chemouil Universal Declarative Services
  • 23. Motivation Implementation Going Universal Summary Simpler Component Denitions What's next? Back to GreetManagerImpl! Denition component g r e e t d e m o . G r e e t M a n a g e r I m p l { provides { g r e e t d e m o . G r e e t M a n a g e r } references { dynamic service g r e e t d e m o . G r e e t P r o v i d e r [ 0 . . n ] } } Simon Chemouil Universal Declarative Services
  • 24. Motivation Implementation Going Universal Summary Simpler Component Denitions What's next? Dening multiple components Denition module DSDemo { name = DS G r e e t Demo version = 1 . 0 . 0 includes { g r e e t d e m o . E n g l i s h G r e e t P r o v i d e r g r e e t d e m o . F r e n c h G r e e t P r o v i d e r g r e e t d e m o . G r e e t M a n a g e r I m p l g r e e t d e m o . C o n s o l e G r e e t e r } } Simon Chemouil Universal Declarative Services
  • 27. Motivation Implementation Going Universal Summary Simpler Component Denitions What's next? Improving our ADL The ADL we designed maps to Declarative Services' capabilities What about richer component models? Creating new target language back-ends Java/DS, Java/iPojo Making it extensible Simon Chemouil Universal Declarative Services
  • 28. Motivation Implementation Going Universal Summary Simpler Component Denitions What's next? Bridging Java and C++ Using Remote OSGi Services: An idea discussed in NativeOSGi. We expose C++ services where we can generate a Java interface Use JNI/JNA bindings or network. Basically, we bridge the two service registries! It does sound like CORBA Simon Chemouil Universal Declarative Services
  • 29. Motivation Implementation Going Universal Summary Simpler Component Denitions What's next? Creating UI Tools Textual DSLs are nice... But component diagrams are nicer! Up-to-date component metadata is extremely useful: Forces high-level design (round-trips between architects and developers) Allows code generation/rapid project bootstrapping Static analysis (code conformance) Can be used for SDK documentation. Long term project! Simon Chemouil Universal Declarative Services
  • 30. Motivation Implementation Going Universal Summary Conclusion Declarative Services for C++ We have been using Ds4Cpp for a few months! If you want to try it. . . you can! We just open sourced it (Apache Software License 2.0) https://github.com/Global-Vision-Systems/Ds4Cpp (the demo is packaged with it)! We need testers and eyes to x my bad C++ :-) And remove the limitations (talk to me!) Simon Chemouil Universal Declarative Services
  • 31. Motivation Implementation Going Universal Summary Conclusion Universal Components Tooling The tooling has still some rough edges Enough for our current needs. . . Some clean-up required. We have a roadmap for the improvements. Simon Chemouil Universal Declarative Services
  • 32. Motivation Implementation Going Universal Summary Conclusion Universal Declarative Services Questions? Twitter: @simach simon.chemouil@global-vision-systems.com Simon Chemouil Universal Declarative Services