SlideShare a Scribd company logo
Building Modular Software with
OSGi
Ulf Fildebrandt
Some words before
This presentation should…
• …give some insights in big software products
• …and how the structure of these products is
managed
About the presenter
•
•
•
•
•

Ulf Fildebrandt
Studied computer science
Works for SAP since 1998
Starting with C++ and COM
Development in Java for Java EE server and Eclipse
(even Eclipse 2.x)
• Product architect of SAP Netweaver Composition
Environment (Java stack)
• Program architect of SAP Netweaver 7.30
• Program architect of Integration on Java on demand
stack
Agenda
Problem
statement

Goals

Implementation
of Modularity

Measurement of
Modularity
„In every phenomenon the beginning remains
always the most notable moment.“
Thomas Carlyle

Findbugs Analysis by Structure 101
SAP Netweaver Structure

PROBLEM STATEMENT
Findbugs Analysis
• Famous analysis done by Ian Sutton
• Can be found at
http://structure101.com/blog/2008/11/softw
are-erosion-findbugs/
• Used Structure 101 (see also JAX 2012
innovation award for Restructure 101)
Findbugs 0.7.2
Findbugs 0.8.6
Findbugs 0.8.7
Findbugs 1.0.0
Findbugs 1.3.0
Findbugs 1.3.5
Server Analysis
• SAP Java server’s own analysis tool
• It shows the structure of the current
Netweaver server
• In contrast to Structure 101 it does not only
show Java dependencies (packages) but also:
– Usage Types
– Software Components
– Packages
Structure of Complex System – I
Overview of product

http://pwdfm295.wdf.sap.corp:9090/makeresults/ce.lc.reporting/NW730EXT_SP_COR/gen/dbg
/java/packaged/full/_doc_pkg/content/index.html
Structure of a Complex System – II
Basic Scenario
Structure of a Complex System – III
Detailed dependencies
„...it is almost always incorrect to begin the
decomposition of a system into modules on the
basis of a flowchart. We propose instead that
one begins with a list of difficult design
decisions or design decisions which are likely to
change. Each module is then designed to hide
such a decision from the others.“
David Parnas

Substitutability
Extensibility

GOALS
Software Development Goals
Modules
Manage complexity of software
systems by „divide and conquer“
(see
http://firstround.com/article/Th
e-one-cost-engineers-andproduct-managers-dontconsider#)

A module is a self-contained component of a system, often interchangeable, which
has a well-defined interface to the other components.
http://en.wiktionary.org/wiki/module
Software Development Goals
Principles
Extensibility

Substitutability

A module is a self-contained component of a system, often interchangeable, which
has a well-defined interface to the other components.
http://en.wiktionary.org/wiki/module
Software Development Goals
One Product

One system can evolve over time and modules can be replaced without impacting
the other modules.
Software Development Goals
Multiple Products

Product 1

Product 2

Common modules
Multiple systems can be assembled in different products and do not have to be
implemented again and again.
Demo
„Programming without an overall architecture
or design in mind is like exploring a cave with
only a flashlight: You don't know where you've
been, you don't know where you're going, and
you don't know quite where you are.“
Danny Thorpe

Process in development

MODULARITY BY INTENTION
Process to define modular software
Select modular
runtime

Definition of
modules

Measurement of
metrics

Decoupling
•SOLID
•Design Pattern

Active definition
of system
Definition of
modules

Decoupling
•SOLID
•Design Pattern

Measurement
of metrics

Select modular
runtime

Active
definition of
system

Packages
Services
Lifecycle

BASIC MODULARITY WITH OSGI
Package Dependencies of a Bundle
Bundle
(internal packages)
Imported
Package

Imported
Package

Exported
Package

Exported
Package

(internal packages)
Bundle

• Bundle exports only
defined packages
• Packages can be
imported from other
archives (bundles)
• All other packages are
only visible inside the
bundle
Lifecycle of a Bundle
install
installed

start

starting

resolve
uninstall

resolved
uninstall
uninstalled

active
stop
stopping
How to achieve modularity...
• OSGi is a framework on top of Java
• Complements Java very good
• ...but not suffient, because complex system
require higher-level structure
 OSGi subsystem specification
Subsystems
• Subsystems bundle many
OSGi bundles
• Defined in OSGi R5
Enterprise Specification
• Reference
implementation in
Apache Aries
(http://apache.aries.org)

http://coderthoughts.blogspot.de/2013/04/osgi-subsystems.html
Definition of
modules

Decoupling
•SOLID
•Design Pattern

Measurement
of metrics

Select modular
runtime

Active
definition of
system

Facade
Factory

PRINCIPLES AND PATTERNS
- DESIGN PATTERN (GOF)
Factory – I
A factory is an object for creating other objects. It is an abstraction of a constructor.
http://en.wikipedia.org/wiki/Factory_(software_concept)

• A factory externalizes the
creation of objects
• Creation and usage of
objects is decoupled
• Pattern definition works for
coding

Without factory:
DataAggregator da = new
DataAggregator();

With factory:
IDataAggregator aggregator =
DataAggregatorFactory.getInstance();
Factory – II
Apply on component level
• Externalization of creation of objects is a general pattern
How can OSGi help:
• Service registry provides an abstraction between provider
and consumer of a service (object instance)
• Creation of instances of a service can be handled by
frameworks:
– Declarative services
– Blueprint
Facade – I
A facade is an object that provides a simplified interface to a larger body of code,
such as a class library.
http://en.wikipedia.org/wiki/Facade_pattern
Facade:
public interface IDataAggregator {
public List<IDataItem> get();
}

Implementation of facade:
final class IdentityDataAggregator extends DataAggregator {
@Override
public ArrayList<IDataItem> get() {
List<IDataItem> itemList = new ArrayList<IDataItem>();
...
return itemList;
}
}
Facade – II
Apply on component level
• Access to a component as a general pattern
How can OSGi help:
1. Services are Java interfaces
1.

Service implementations are accessed via interface = facade

2. Exported packages are the only external visible entities of a
bundle
1.
2.

Not exported packages are not accessible
Clear definition of a facade of the bundle
Definition of
modules

Decoupling
•SOLID
•Design Pattern

Measurement
of metrics

Select modular
runtime

Active
definition of
system

Dependency Injection (SOLID)
Liskov (SOLID)

PRINCIPLES AND PATTERNS
- SOLID
Dependency Injection – I
Dependency injection involves at least three elements:
• a dependent consumer,
• a declaration of a component's dependencies, defined as interface
contracts,
• an injector (sometimes referred to as a provider or container) that creates
instances of classes that implement a given dependency interface on
request.
The dependent object describes what software component it depends on to do its
work. The injector decides what concrete classes satisfy the requirements of the
dependent object, and provides them to the dependent.
http://en.wikipedia.org/wiki/Dependency_injection
property
method

method

property
method

method

method

property
method

Class 1

method

property
method

Dependency Injection – II
Class 2
Dependency Injection – III
Apply on component level
• Reverse the dependency is a general pattern
How can OSGi help:
• Service registry provides an abstraction between provider
and consumer of a service (object instance)
• Injecting dependencies can be handled by additional
frameworks
– Declarative services
– Blueprint
Liskov
Let q(x) be a property provable about objects x of type T. Then q(y) should be
provable for objects y of type S where S is a subtype of T.
http://en.wikipedia.org/wiki/Liskov_substitution_principle
Facade = T:
public interface IDataAggregator {
public List<IDataItem> get();
}

Implementation of facade = S:
final class IdentityDataAggregator extends DataAggregator {
@Override
public ArrayList<IDataItem> get() {
List<IDataItem> itemList = new ArrayList<IDataItem>();
...
return itemList;
}
}
Definition of
modules

Decoupling
•SOLID
•Design Pattern

Measurement
of metrics

Select modular
runtime

Active
definition of
system

Architecture Layer

SYSTEM ARCHITECTURE
Architecture Layer – I
•
•
•

…
Package

…

Module
Sub system
System Layer

System
Platform

•

…
…

•
•
•

A platform (in terms of runtime framework)
hosts a system and is a versioned artifact
A system consists of a set of sub-systems and is
a versioned artifact running on a platform
A system layer groups sub-systems providing
structure and direction in terms of
dependencies and is a layer which has no
associated versioned artifact
A system layer incarnation is the bill of
materials or assembled sub-systems of a
system layer relevant for a specific use case
A sub-system consists of a set of modules and is
a versioned artifact
A module contains packages and is a versioned
artifact
A package contains components
–
–

A component is a File
A file is of type resource or source
Architecture Layer (as is) – II

Package

Module = Subsystem = Bundle
Package analysis of web application
Uses Structure 101 (see also JAX 2012 innovation award for Restructure 101)
System Layer
Architecture Layer (to be) – III
Data Display
(Servlet)

Data
Aggregator 1

Aggregator

Data Source 1

Data
Aggregator 2

Data Source 2

Data Provider

Data Aggregator
Interface

Data Aggregator Interface

Data Source Interface

UI

Data Source
Interface
Architecture Layer – IV
ConQAT (to-be diagram)
• ConQAT (https://www.conqat.org)
• Compared to Structure 101: extensible because of
open source
– Used to implement modularity metrics

• Easy integration in build process (Maven) 
automatic check of to-be and as-is
Demo ConQAT – I
Demo ConQAT – II
Definition of
modules

Decoupling
•SOLID
•Design Pattern

Measurement
of metrics

Select modular
runtime

Active
definition of
system

ConQAT structure check
Metrics

MEASUREMENT OF MODULAR
SOFTWARE
Demo ConQAT – III
Modularity Metrics – I
Coupling: determines the coupling of this component to other
components and is computed based on instability (Robert C.
Martin).
– I = Ce / (Ca+Ce) 1..0 (Ce (efferent) = outgoing, Ca (afferent) = ingoing)
– Consequence: the more components THIS component depends upon, the
more instable it is (0= stable, 1=instable)
Ca = usages of exported packages
Exported
Package

Exported
Package

(Internal Packages)
Imported
Package

Bundle

Imported
Package

Ce = imported classes in packages
Modularity Metrics – II
Relational Cohesion: a component should consist of cohesive
elements, otherwise, it should be splitted. Average number of
internal relationships per type.
– rc = Td / T (Td.. type relationships that are internal to this component; T..
number of types within the component)
As classes inside an assembly should be strongly related, the cohesion should
be high. On the other hand, too high values may indicate over-coupling. A
good range for RelationalCohesion is 1.5 to 4.0. Assemblies where
RelationalCohesion < 1.5 or RelationalCohesion > 4.0 might be problematic.
Therefore rcI is the normalized RC, having value 1 for 1.5 to 4, decreasing to 0
outside this range based on gaussian bell curve.
Modularity Metrics – III
Encapsulation: Components should encapsulate knowledge and
offer a slim interface.
– ep = pt / T (pt = private Types, T = all types)
pt = types in internal packages, T = types in internal packages +
types in exported packages
Exported
Package

Exported
Package

(Internal Packages)
Imported
Package

Bundle

Imported
Package

The Overall Modularity Score is now defined as:
– M = ((1-I) + rcI + ep) / 3.0
SUMMARY
Key take-aways
• Big software systems have to be structured, but more highlevel than packages
– Concrete implementation: OSGi sub systems

• Use iterative process to structure software during the whole
lifecycle of the product
• Implementation best practices support modularity
– Facade
– Factory
– Dependency Injection

• Modularity can be measured by metrics

More Related Content

What's hot

Getting started with OSGi using a 3D OSGi Robot sample application - Christia...
Getting started with OSGi using a 3D OSGi Robot sample application - Christia...Getting started with OSGi using a 3D OSGi Robot sample application - Christia...
Getting started with OSGi using a 3D OSGi Robot sample application - Christia...
mfrancis
 
Microservices
MicroservicesMicroservices
Microservices
PT.JUG
 
Salesforce Solution For Software Industry
Salesforce Solution For Software IndustrySalesforce Solution For Software Industry
Salesforce Solution For Software Industry
kdwangxi
 
µServices for the rest of us - karl pauls
µServices for the rest of us - karl paulsµServices for the rest of us - karl pauls
µServices for the rest of us - karl pauls
mfrancis
 
Liferay Portal Introduction
Liferay Portal IntroductionLiferay Portal Introduction
Liferay Portal Introduction
Nguyen Tung
 
Ibm test & development cloud + rational service delivery services platform
Ibm test & development cloud + rational service delivery services platformIbm test & development cloud + rational service delivery services platform
Ibm test & development cloud + rational service delivery services platformBabak Hosseinzadeh
 
OSGi on Android - Value Proposition
OSGi on Android - Value PropositionOSGi on Android - Value Proposition
OSGi on Android - Value Proposition
Joachim Ritter
 
Making a decision between Liferay and Drupal
Making a decision between Liferay and DrupalMaking a decision between Liferay and Drupal
Making a decision between Liferay and Drupal
InfoAxon Technologies Limited
 
Liferay on docker
Liferay on dockerLiferay on docker
Liferay on docker
Geeta Raghu Vamsi Kotipalli
 
Liferay Configuration and Customization
Liferay Configuration and CustomizationLiferay Configuration and Customization
Liferay Configuration and Customization
Thành Nguyễn
 
Introducing Java 8
Introducing Java 8Introducing Java 8
Introducing Java 8
PT.JUG
 
MySQL
MySQLMySQL
MySQL
PT.JUG
 
Liferay DevCon 2014: Lliferay Platform - A new and exciting vision
Liferay DevCon 2014: Lliferay Platform - A new and exciting visionLiferay DevCon 2014: Lliferay Platform - A new and exciting vision
Liferay DevCon 2014: Lliferay Platform - A new and exciting vision
Jorge Ferrer
 
Liferay with xebia
Liferay with xebiaLiferay with xebia
Liferay with xebia
sourabh aggarwal
 
Using Eclipse EMF/GEF to develop an offline designer for identity manager
Using Eclipse EMF/GEF to develop an offline designer for identity managerUsing Eclipse EMF/GEF to develop an offline designer for identity manager
Using Eclipse EMF/GEF to develop an offline designer for identity manager
Eclipse Day India
 
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
 
Testing OSGi the "groovy" way - Lars Pfannenschmidt, Dennis Nobel
Testing OSGi the "groovy" way - Lars Pfannenschmidt, Dennis NobelTesting OSGi the "groovy" way - Lars Pfannenschmidt, Dennis Nobel
Testing OSGi the "groovy" way - Lars Pfannenschmidt, Dennis Nobel
mfrancis
 
EclipseConEurope2012 SOA - Models As Operational Documentation
EclipseConEurope2012 SOA - Models As Operational DocumentationEclipseConEurope2012 SOA - Models As Operational Documentation
EclipseConEurope2012 SOA - Models As Operational Documentation
Marc Dutoo
 
From Eclipse to Document Management - Eclipse DemoCamp Grenoble 2012
From Eclipse to Document Management - Eclipse DemoCamp Grenoble 2012From Eclipse to Document Management - Eclipse DemoCamp Grenoble 2012
From Eclipse to Document Management - Eclipse DemoCamp Grenoble 2012
Marc Dutoo
 
IoT solutions with InduSoft Web Studio and Arduino in Coating Processes
IoT solutions with InduSoft Web Studio and Arduino in Coating ProcessesIoT solutions with InduSoft Web Studio and Arduino in Coating Processes
IoT solutions with InduSoft Web Studio and Arduino in Coating Processes
AVEVA
 

What's hot (20)

Getting started with OSGi using a 3D OSGi Robot sample application - Christia...
Getting started with OSGi using a 3D OSGi Robot sample application - Christia...Getting started with OSGi using a 3D OSGi Robot sample application - Christia...
Getting started with OSGi using a 3D OSGi Robot sample application - Christia...
 
Microservices
MicroservicesMicroservices
Microservices
 
Salesforce Solution For Software Industry
Salesforce Solution For Software IndustrySalesforce Solution For Software Industry
Salesforce Solution For Software Industry
 
µServices for the rest of us - karl pauls
µServices for the rest of us - karl paulsµServices for the rest of us - karl pauls
µServices for the rest of us - karl pauls
 
Liferay Portal Introduction
Liferay Portal IntroductionLiferay Portal Introduction
Liferay Portal Introduction
 
Ibm test & development cloud + rational service delivery services platform
Ibm test & development cloud + rational service delivery services platformIbm test & development cloud + rational service delivery services platform
Ibm test & development cloud + rational service delivery services platform
 
OSGi on Android - Value Proposition
OSGi on Android - Value PropositionOSGi on Android - Value Proposition
OSGi on Android - Value Proposition
 
Making a decision between Liferay and Drupal
Making a decision between Liferay and DrupalMaking a decision between Liferay and Drupal
Making a decision between Liferay and Drupal
 
Liferay on docker
Liferay on dockerLiferay on docker
Liferay on docker
 
Liferay Configuration and Customization
Liferay Configuration and CustomizationLiferay Configuration and Customization
Liferay Configuration and Customization
 
Introducing Java 8
Introducing Java 8Introducing Java 8
Introducing Java 8
 
MySQL
MySQLMySQL
MySQL
 
Liferay DevCon 2014: Lliferay Platform - A new and exciting vision
Liferay DevCon 2014: Lliferay Platform - A new and exciting visionLiferay DevCon 2014: Lliferay Platform - A new and exciting vision
Liferay DevCon 2014: Lliferay Platform - A new and exciting vision
 
Liferay with xebia
Liferay with xebiaLiferay with xebia
Liferay with xebia
 
Using Eclipse EMF/GEF to develop an offline designer for identity manager
Using Eclipse EMF/GEF to develop an offline designer for identity managerUsing Eclipse EMF/GEF to develop an offline designer for identity manager
Using Eclipse EMF/GEF to develop an offline designer for identity manager
 
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)
 
Testing OSGi the "groovy" way - Lars Pfannenschmidt, Dennis Nobel
Testing OSGi the "groovy" way - Lars Pfannenschmidt, Dennis NobelTesting OSGi the "groovy" way - Lars Pfannenschmidt, Dennis Nobel
Testing OSGi the "groovy" way - Lars Pfannenschmidt, Dennis Nobel
 
EclipseConEurope2012 SOA - Models As Operational Documentation
EclipseConEurope2012 SOA - Models As Operational DocumentationEclipseConEurope2012 SOA - Models As Operational Documentation
EclipseConEurope2012 SOA - Models As Operational Documentation
 
From Eclipse to Document Management - Eclipse DemoCamp Grenoble 2012
From Eclipse to Document Management - Eclipse DemoCamp Grenoble 2012From Eclipse to Document Management - Eclipse DemoCamp Grenoble 2012
From Eclipse to Document Management - Eclipse DemoCamp Grenoble 2012
 
IoT solutions with InduSoft Web Studio and Arduino in Coating Processes
IoT solutions with InduSoft Web Studio and Arduino in Coating ProcessesIoT solutions with InduSoft Web Studio and Arduino in Coating Processes
IoT solutions with InduSoft Web Studio and Arduino in Coating Processes
 

Similar to Building modular software with OSGi - Ulf Fildebrandt

Eclipse plug in development
Eclipse plug in developmentEclipse plug in development
Eclipse plug in development
Martin Toshev
 
Matteo Gazzurelli - Andorid introduction - Google Dev Fest 2013
Matteo Gazzurelli - Andorid introduction - Google Dev Fest 2013Matteo Gazzurelli - Andorid introduction - Google Dev Fest 2013
Matteo Gazzurelli - Andorid introduction - Google Dev Fest 2013
DuckMa
 
UNIT IV DESIGN PATTERNS.pptx
UNIT IV DESIGN PATTERNS.pptxUNIT IV DESIGN PATTERNS.pptx
UNIT IV DESIGN PATTERNS.pptx
anguraju1
 
Dcp'15
Dcp'15Dcp'15
L03 Software Design
L03 Software DesignL03 Software Design
L03 Software Design
Ólafur Andri Ragnarsson
 
Red Hat JBoss BRMS and BPMS Workbench and Rich Client Technology
Red Hat JBoss BRMS and BPMS Workbench and Rich Client TechnologyRed Hat JBoss BRMS and BPMS Workbench and Rich Client Technology
Red Hat JBoss BRMS and BPMS Workbench and Rich Client Technology
Mark Proctor
 
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
 
SodiusCassidianmdday2010 101129081449-phpapp02
SodiusCassidianmdday2010 101129081449-phpapp02SodiusCassidianmdday2010 101129081449-phpapp02
SodiusCassidianmdday2010 101129081449-phpapp02
SodiusWillert
 
Framework engineering JCO 2011
Framework engineering JCO 2011Framework engineering JCO 2011
Framework engineering JCO 2011
YoungSu Son
 
Introduction To Design Patterns
Introduction To Design PatternsIntroduction To Design Patterns
Introduction To Design Patterns
sukumarraju6
 
Modern development paradigms
Modern development paradigmsModern development paradigms
Modern development paradigms
Ivano Malavolta
 
SOLID & IoC Principles
SOLID & IoC PrinciplesSOLID & IoC Principles
SOLID & IoC Principles
Pavlo Hodysh
 
Make JSF more type-safe with CDI and MyFaces CODI
Make JSF more type-safe with CDI and MyFaces CODIMake JSF more type-safe with CDI and MyFaces CODI
Make JSF more type-safe with CDI and MyFaces CODI
os890
 
Put the Power of Cloud-based Modeling to Work - Spotlight Session
Put the Power of Cloud-based Modeling to Work - Spotlight SessionPut the Power of Cloud-based Modeling to Work - Spotlight Session
Put the Power of Cloud-based Modeling to Work - Spotlight Session
Obeo
 
Matteo Gazzurelli - Introduction to Android Development - Have a break edition
Matteo Gazzurelli - Introduction to Android Development - Have a break editionMatteo Gazzurelli - Introduction to Android Development - Have a break edition
Matteo Gazzurelli - Introduction to Android Development - Have a break editionDuckMa
 
An introduction to maven gradle and sbt
An introduction to maven gradle and sbtAn introduction to maven gradle and sbt
An introduction to maven gradle and sbt
Fabio Fumarola
 
Java1 in mumbai
Java1 in mumbaiJava1 in mumbai
Java1 in mumbai
vibrantuser
 
P Training Presentation
P Training PresentationP Training Presentation
P Training PresentationGaurav Tyagi
 
Architectural design
Architectural designArchitectural design
Architectural design
SHREEHARI WADAWADAGI
 

Similar to Building modular software with OSGi - Ulf Fildebrandt (20)

Eclipse plug in development
Eclipse plug in developmentEclipse plug in development
Eclipse plug in development
 
Matteo Gazzurelli - Andorid introduction - Google Dev Fest 2013
Matteo Gazzurelli - Andorid introduction - Google Dev Fest 2013Matteo Gazzurelli - Andorid introduction - Google Dev Fest 2013
Matteo Gazzurelli - Andorid introduction - Google Dev Fest 2013
 
UNIT IV DESIGN PATTERNS.pptx
UNIT IV DESIGN PATTERNS.pptxUNIT IV DESIGN PATTERNS.pptx
UNIT IV DESIGN PATTERNS.pptx
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Dcp'15
Dcp'15Dcp'15
Dcp'15
 
L03 Software Design
L03 Software DesignL03 Software Design
L03 Software Design
 
Red Hat JBoss BRMS and BPMS Workbench and Rich Client Technology
Red Hat JBoss BRMS and BPMS Workbench and Rich Client TechnologyRed Hat JBoss BRMS and BPMS Workbench and Rich Client Technology
Red Hat JBoss BRMS and BPMS Workbench and Rich Client Technology
 
Plugin-based IVI Architectures with Qt
Plugin-based IVI Architectures with Qt Plugin-based IVI Architectures with Qt
Plugin-based IVI Architectures with Qt
 
SodiusCassidianmdday2010 101129081449-phpapp02
SodiusCassidianmdday2010 101129081449-phpapp02SodiusCassidianmdday2010 101129081449-phpapp02
SodiusCassidianmdday2010 101129081449-phpapp02
 
Framework engineering JCO 2011
Framework engineering JCO 2011Framework engineering JCO 2011
Framework engineering JCO 2011
 
Introduction To Design Patterns
Introduction To Design PatternsIntroduction To Design Patterns
Introduction To Design Patterns
 
Modern development paradigms
Modern development paradigmsModern development paradigms
Modern development paradigms
 
SOLID & IoC Principles
SOLID & IoC PrinciplesSOLID & IoC Principles
SOLID & IoC Principles
 
Make JSF more type-safe with CDI and MyFaces CODI
Make JSF more type-safe with CDI and MyFaces CODIMake JSF more type-safe with CDI and MyFaces CODI
Make JSF more type-safe with CDI and MyFaces CODI
 
Put the Power of Cloud-based Modeling to Work - Spotlight Session
Put the Power of Cloud-based Modeling to Work - Spotlight SessionPut the Power of Cloud-based Modeling to Work - Spotlight Session
Put the Power of Cloud-based Modeling to Work - Spotlight Session
 
Matteo Gazzurelli - Introduction to Android Development - Have a break edition
Matteo Gazzurelli - Introduction to Android Development - Have a break editionMatteo Gazzurelli - Introduction to Android Development - Have a break edition
Matteo Gazzurelli - Introduction to Android Development - Have a break edition
 
An introduction to maven gradle and sbt
An introduction to maven gradle and sbtAn introduction to maven gradle and sbt
An introduction to maven gradle and sbt
 
Java1 in mumbai
Java1 in mumbaiJava1 in mumbai
Java1 in mumbai
 
P Training Presentation
P Training PresentationP Training Presentation
P Training Presentation
 
Architectural design
Architectural designArchitectural design
Architectural design
 

More from mfrancis

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

More from mfrancis (20)

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

Recently uploaded

UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
DianaGray10
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
91mobiles
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
Product School
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
DianaGray10
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Product School
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
Prayukth K V
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Ramesh Iyer
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
Thijs Feryn
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Albert Hoitingh
 
Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*
Frank van Harmelen
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
Alan Dix
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
Jemma Hussein Allen
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
Alison B. Lowndes
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
RTTS
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
Product School
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
OnBoard
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Product School
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
Dorra BARTAGUIZ
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
DanBrown980551
 

Recently uploaded (20)

UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
 
Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
 

Building modular software with OSGi - Ulf Fildebrandt

  • 1. Building Modular Software with OSGi Ulf Fildebrandt
  • 2. Some words before This presentation should… • …give some insights in big software products • …and how the structure of these products is managed
  • 3. About the presenter • • • • • Ulf Fildebrandt Studied computer science Works for SAP since 1998 Starting with C++ and COM Development in Java for Java EE server and Eclipse (even Eclipse 2.x) • Product architect of SAP Netweaver Composition Environment (Java stack) • Program architect of SAP Netweaver 7.30 • Program architect of Integration on Java on demand stack
  • 5. „In every phenomenon the beginning remains always the most notable moment.“ Thomas Carlyle Findbugs Analysis by Structure 101 SAP Netweaver Structure PROBLEM STATEMENT
  • 6. Findbugs Analysis • Famous analysis done by Ian Sutton • Can be found at http://structure101.com/blog/2008/11/softw are-erosion-findbugs/ • Used Structure 101 (see also JAX 2012 innovation award for Restructure 101)
  • 13. Server Analysis • SAP Java server’s own analysis tool • It shows the structure of the current Netweaver server • In contrast to Structure 101 it does not only show Java dependencies (packages) but also: – Usage Types – Software Components – Packages
  • 14. Structure of Complex System – I Overview of product http://pwdfm295.wdf.sap.corp:9090/makeresults/ce.lc.reporting/NW730EXT_SP_COR/gen/dbg /java/packaged/full/_doc_pkg/content/index.html
  • 15. Structure of a Complex System – II Basic Scenario
  • 16. Structure of a Complex System – III Detailed dependencies
  • 17. „...it is almost always incorrect to begin the decomposition of a system into modules on the basis of a flowchart. We propose instead that one begins with a list of difficult design decisions or design decisions which are likely to change. Each module is then designed to hide such a decision from the others.“ David Parnas Substitutability Extensibility GOALS
  • 18. Software Development Goals Modules Manage complexity of software systems by „divide and conquer“ (see http://firstround.com/article/Th e-one-cost-engineers-andproduct-managers-dontconsider#) A module is a self-contained component of a system, often interchangeable, which has a well-defined interface to the other components. http://en.wiktionary.org/wiki/module
  • 19. Software Development Goals Principles Extensibility Substitutability A module is a self-contained component of a system, often interchangeable, which has a well-defined interface to the other components. http://en.wiktionary.org/wiki/module
  • 20. Software Development Goals One Product One system can evolve over time and modules can be replaced without impacting the other modules.
  • 21. Software Development Goals Multiple Products Product 1 Product 2 Common modules Multiple systems can be assembled in different products and do not have to be implemented again and again.
  • 22. Demo
  • 23. „Programming without an overall architecture or design in mind is like exploring a cave with only a flashlight: You don't know where you've been, you don't know where you're going, and you don't know quite where you are.“ Danny Thorpe Process in development MODULARITY BY INTENTION
  • 24. Process to define modular software Select modular runtime Definition of modules Measurement of metrics Decoupling •SOLID •Design Pattern Active definition of system
  • 25. Definition of modules Decoupling •SOLID •Design Pattern Measurement of metrics Select modular runtime Active definition of system Packages Services Lifecycle BASIC MODULARITY WITH OSGI
  • 26. Package Dependencies of a Bundle Bundle (internal packages) Imported Package Imported Package Exported Package Exported Package (internal packages) Bundle • Bundle exports only defined packages • Packages can be imported from other archives (bundles) • All other packages are only visible inside the bundle
  • 27. Lifecycle of a Bundle install installed start starting resolve uninstall resolved uninstall uninstalled active stop stopping
  • 28. How to achieve modularity... • OSGi is a framework on top of Java • Complements Java very good • ...but not suffient, because complex system require higher-level structure  OSGi subsystem specification
  • 29. Subsystems • Subsystems bundle many OSGi bundles • Defined in OSGi R5 Enterprise Specification • Reference implementation in Apache Aries (http://apache.aries.org) http://coderthoughts.blogspot.de/2013/04/osgi-subsystems.html
  • 30. Definition of modules Decoupling •SOLID •Design Pattern Measurement of metrics Select modular runtime Active definition of system Facade Factory PRINCIPLES AND PATTERNS - DESIGN PATTERN (GOF)
  • 31. Factory – I A factory is an object for creating other objects. It is an abstraction of a constructor. http://en.wikipedia.org/wiki/Factory_(software_concept) • A factory externalizes the creation of objects • Creation and usage of objects is decoupled • Pattern definition works for coding Without factory: DataAggregator da = new DataAggregator(); With factory: IDataAggregator aggregator = DataAggregatorFactory.getInstance();
  • 32. Factory – II Apply on component level • Externalization of creation of objects is a general pattern How can OSGi help: • Service registry provides an abstraction between provider and consumer of a service (object instance) • Creation of instances of a service can be handled by frameworks: – Declarative services – Blueprint
  • 33. Facade – I A facade is an object that provides a simplified interface to a larger body of code, such as a class library. http://en.wikipedia.org/wiki/Facade_pattern Facade: public interface IDataAggregator { public List<IDataItem> get(); } Implementation of facade: final class IdentityDataAggregator extends DataAggregator { @Override public ArrayList<IDataItem> get() { List<IDataItem> itemList = new ArrayList<IDataItem>(); ... return itemList; } }
  • 34. Facade – II Apply on component level • Access to a component as a general pattern How can OSGi help: 1. Services are Java interfaces 1. Service implementations are accessed via interface = facade 2. Exported packages are the only external visible entities of a bundle 1. 2. Not exported packages are not accessible Clear definition of a facade of the bundle
  • 35. Definition of modules Decoupling •SOLID •Design Pattern Measurement of metrics Select modular runtime Active definition of system Dependency Injection (SOLID) Liskov (SOLID) PRINCIPLES AND PATTERNS - SOLID
  • 36. Dependency Injection – I Dependency injection involves at least three elements: • a dependent consumer, • a declaration of a component's dependencies, defined as interface contracts, • an injector (sometimes referred to as a provider or container) that creates instances of classes that implement a given dependency interface on request. The dependent object describes what software component it depends on to do its work. The injector decides what concrete classes satisfy the requirements of the dependent object, and provides them to the dependent. http://en.wikipedia.org/wiki/Dependency_injection
  • 38. Dependency Injection – III Apply on component level • Reverse the dependency is a general pattern How can OSGi help: • Service registry provides an abstraction between provider and consumer of a service (object instance) • Injecting dependencies can be handled by additional frameworks – Declarative services – Blueprint
  • 39. Liskov Let q(x) be a property provable about objects x of type T. Then q(y) should be provable for objects y of type S where S is a subtype of T. http://en.wikipedia.org/wiki/Liskov_substitution_principle Facade = T: public interface IDataAggregator { public List<IDataItem> get(); } Implementation of facade = S: final class IdentityDataAggregator extends DataAggregator { @Override public ArrayList<IDataItem> get() { List<IDataItem> itemList = new ArrayList<IDataItem>(); ... return itemList; } }
  • 40. Definition of modules Decoupling •SOLID •Design Pattern Measurement of metrics Select modular runtime Active definition of system Architecture Layer SYSTEM ARCHITECTURE
  • 41. Architecture Layer – I • • • … Package … Module Sub system System Layer System Platform • … … • • • A platform (in terms of runtime framework) hosts a system and is a versioned artifact A system consists of a set of sub-systems and is a versioned artifact running on a platform A system layer groups sub-systems providing structure and direction in terms of dependencies and is a layer which has no associated versioned artifact A system layer incarnation is the bill of materials or assembled sub-systems of a system layer relevant for a specific use case A sub-system consists of a set of modules and is a versioned artifact A module contains packages and is a versioned artifact A package contains components – – A component is a File A file is of type resource or source
  • 42. Architecture Layer (as is) – II Package Module = Subsystem = Bundle Package analysis of web application Uses Structure 101 (see also JAX 2012 innovation award for Restructure 101) System Layer
  • 43. Architecture Layer (to be) – III Data Display (Servlet) Data Aggregator 1 Aggregator Data Source 1 Data Aggregator 2 Data Source 2 Data Provider Data Aggregator Interface Data Aggregator Interface Data Source Interface UI Data Source Interface
  • 44. Architecture Layer – IV ConQAT (to-be diagram) • ConQAT (https://www.conqat.org) • Compared to Structure 101: extensible because of open source – Used to implement modularity metrics • Easy integration in build process (Maven)  automatic check of to-be and as-is
  • 47. Definition of modules Decoupling •SOLID •Design Pattern Measurement of metrics Select modular runtime Active definition of system ConQAT structure check Metrics MEASUREMENT OF MODULAR SOFTWARE
  • 49. Modularity Metrics – I Coupling: determines the coupling of this component to other components and is computed based on instability (Robert C. Martin). – I = Ce / (Ca+Ce) 1..0 (Ce (efferent) = outgoing, Ca (afferent) = ingoing) – Consequence: the more components THIS component depends upon, the more instable it is (0= stable, 1=instable) Ca = usages of exported packages Exported Package Exported Package (Internal Packages) Imported Package Bundle Imported Package Ce = imported classes in packages
  • 50. Modularity Metrics – II Relational Cohesion: a component should consist of cohesive elements, otherwise, it should be splitted. Average number of internal relationships per type. – rc = Td / T (Td.. type relationships that are internal to this component; T.. number of types within the component) As classes inside an assembly should be strongly related, the cohesion should be high. On the other hand, too high values may indicate over-coupling. A good range for RelationalCohesion is 1.5 to 4.0. Assemblies where RelationalCohesion < 1.5 or RelationalCohesion > 4.0 might be problematic. Therefore rcI is the normalized RC, having value 1 for 1.5 to 4, decreasing to 0 outside this range based on gaussian bell curve.
  • 51. Modularity Metrics – III Encapsulation: Components should encapsulate knowledge and offer a slim interface. – ep = pt / T (pt = private Types, T = all types) pt = types in internal packages, T = types in internal packages + types in exported packages Exported Package Exported Package (Internal Packages) Imported Package Bundle Imported Package The Overall Modularity Score is now defined as: – M = ((1-I) + rcI + ep) / 3.0
  • 53. Key take-aways • Big software systems have to be structured, but more highlevel than packages – Concrete implementation: OSGi sub systems • Use iterative process to structure software during the whole lifecycle of the product • Implementation best practices support modularity – Facade – Factory – Dependency Injection • Modularity can be measured by metrics