SlideShare uma empresa Scribd logo
1 de 53
Baixar para ler offline
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

Mais conteúdo relacionado

Mais procurados

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
MicroservicesPT.JUG
 
Salesforce Solution For Software Industry
Salesforce Solution For Software IndustrySalesforce Solution For Software Industry
Salesforce Solution For Software Industrykdwangxi
 
µ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 paulsmfrancis
 
Liferay Portal Introduction
Liferay Portal IntroductionLiferay Portal Introduction
Liferay Portal IntroductionNguyen 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 PropositionJoachim Ritter
 
Liferay Configuration and Customization
Liferay Configuration and CustomizationLiferay Configuration and Customization
Liferay Configuration and CustomizationThành Nguyễn
 
Introducing Java 8
Introducing Java 8Introducing Java 8
Introducing Java 8PT.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 visionJorge Ferrer
 
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 managerEclipse 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 Nobelmfrancis
 
EclipseConEurope2012 SOA - Models As Operational Documentation
EclipseConEurope2012 SOA - Models As Operational DocumentationEclipseConEurope2012 SOA - Models As Operational Documentation
EclipseConEurope2012 SOA - Models As Operational DocumentationMarc 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 2012Marc 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 ProcessesAVEVA
 

Mais procurados (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
 

Semelhante a Building modular software with OSGi - Ulf Fildebrandt

Eclipse plug in development
Eclipse plug in developmentEclipse plug in development
Eclipse plug in developmentMartin 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 2013DuckMa
 
UNIT IV DESIGN PATTERNS.pptx
UNIT IV DESIGN PATTERNS.pptxUNIT IV DESIGN PATTERNS.pptx
UNIT IV DESIGN PATTERNS.pptxanguraju1
 
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 TechnologyMark 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-phpapp02SodiusWillert
 
Framework engineering JCO 2011
Framework engineering JCO 2011Framework engineering JCO 2011
Framework engineering JCO 2011YoungSu Son
 
Introduction To Design Patterns
Introduction To Design PatternsIntroduction To Design Patterns
Introduction To Design Patternssukumarraju6
 
Modern development paradigms
Modern development paradigmsModern development paradigms
Modern development paradigmsIvano Malavolta
 
SOLID & IoC Principles
SOLID & IoC PrinciplesSOLID & IoC Principles
SOLID & IoC PrinciplesPavlo 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 CODIos890
 
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 SessionObeo
 
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 sbtFabio Fumarola
 
P Training Presentation
P Training PresentationP Training Presentation
P Training PresentationGaurav Tyagi
 

Semelhante a 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
 

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

How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 

Último (20)

How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 

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