SlideShare a Scribd company logo
@MilenDyankov
OSGi Fundamentals
OSGi = Modularity
"When I use a word,"
Humpty Dumpty said,
in rather a scornful tone,
"it means
just what I choose
it to mean - neither
more nor less."
Modularity Maturity Model
proposed by Dr Graham Charters
at the OSGi Community Event 2011
Level 1 Ad Hoc nothing
Level 2 Modules decoupled from artifact
Level 3 Modularity decoupled from identity
Level 4 Loose-Coupling decoupled from implementation
Level 5 Devolution decoupled from ownership
Level 6 Dynamism decoupled from time
Level 1 Ad Hoc nothing
Level 2 Modules decoupled from artifact
Level 3 Modularity decoupled from identity
Level 4 Loose-Coupling decoupled from implementation
Level 5 Devolution decoupled from ownership
Level 6 Dynamism decoupled from time
Level 7 Peter Kriens only available to people who are Peter Kriens
Modularity Maturity Model
proposed by Dr Graham Charters
at the OSGi Community Event 2011
Modularity Maturity Model
proposed by Peter Kriens
in foreword to “Java Application Architecture”
Level 1 Ad Hoc
Level 2 Modules
Level 3 Modularity
Level 4 Loose-Coupling
Level 5 Devolution
Level 6 Dynamism
Unmanaged / chaos
Managing dependencies
Proper isolation
Minimize coupling
Service-oriented architecture
Level 1 Monolith
Level 2 Composite
Level 3 Containers
Level 4 Discovery
Level 5 JuServices
Buzzword compliant
Modularity Maturity Model
Level 1 Monolith Unaware of own dependencies
Level 2 Composite Aware of infrastructural dependencies
Level 3 Containers Aware of functional dependencies
Level 4 Discovery Aware of functional requirements
Level 5 Adapts to changing requirementsJuServices
Buzzword compliant
Modularity Maturity Model
Level 1 Monolith
Level 2 Composite
Level 3 Containers
Level 4 Discovery
Level 5 JuServices
Buzzword compliant
Modularity Maturity Model
Level 1 Monolith
Level 2 Composite
Level 3 Containers
Level 4 Discovery
Level 5 JuServices
Buzzword compliant
Modularity Maturity Model
Buzzword compliant
Modularity Maturity Model
JuServices
Level 1 Monolith
Level 2 Composite
Level 3 Containers
Level 4 Discovery
Level 5
Buzzword compliant
Modularity Maturity Model
JuServices
Level 1 Monolith
Level 2 Composite
Level 3 Containers
Level 4 Discovery
Level 5 OSGi
product
intermediate
intermediate
material
Moved to https://slidr.io/azzazzel/osgi-fundamentals
Moved to https://slidr.io/azzazzel/osgi-fundamentals
Moved to https://slidr.io/azzazzel/osgi-fundamentals
Product
Entity
Entity
Entity
Entity
Entity Entity
Offer
Offer
Offer
Offer
Offer
Offer
Offer
Offer
Offer
Offer
Offer
Application
Artifact
Artifact
Artifact
Artifact
Artifact Artifact
Export
Export
Export
Export
Export
Export
Export
Export
Export
Export
Export
Artifact
Level 2
decoupled from
artifact
Foo
Level 2
decoupled from
artifact
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Foo
Bundle-SymbolicName: com.foo
Bundle-Vendor: Foo, Inc.
Bundle-Version: 1.0.0
. . .
Buzzword compliant
Modularity Maturity Model
JuServices OSGi
Level 1 Monolith
Level 2 Composite
Level 3 Containers
Level 4 Discovery
Level 5
OK!
Level 3
decoupled from
identity
Artifact
Export
Artifact
Level 3
decoupled from
identity
Require-Bundle: com.foo
Foo
Me
Level 3
decoupled from
identity
Export-Package ::= export ( ',' export)*
List of packages (Java package + version) within this jar
file that external code is allowed to access!
Foo
Me
Level 3
decoupled from
identity
Export-Package:
com.standard.power.plugs;
version=”1.0.0”,
com.foo.power.plugs.shop;
version=”2.3.0”;
uses:=”com.standard.power.plugs”,
...
Export-Package ::= export ( ',' export)*
List of packages (Java package + version) within this jar
file that external code is allowed to access!
Foo
Me
Level 3
decoupled from
identity
Import-Package ::= import ( ',' import )*
List of packages (Java package + version-range) that
classes in this jar file expect other bundles to provide!
Foo
Me
Level 3
decoupled from
identity
Import-Package:
com.standard.power.plugs;
version=”[1,2)”,
com.foo.power.plugs.shop;
version=”2.3.0”,
com.other.power.plugs.shop;
version=”1.5.0”,
...
Foo
Me
Import-Package ::= import ( ',' import )*
List of packages (Java package + version-range) that
classes in this jar file expect other bundles to provide!
Buzzword compliant
Modularity Maturity Model
JuServices OSGi
Level 1 Monolith
Level 2 Composite
Level 3 Containers
Level 4 Discovery
Level 5
OK!
OK!
Level 4
decoupled from
implementation
Artifact
Artifact
Requirement
Need to
connect
device to
power outlet!
Capability
Can
connect
device to
power outlet!
RESOLVER
Level 4
decoupled from
implementation
Artifact
Artifact
Requirement
Need to
connect
device to
power outlet!
Capability
Can
connect
device to
power outlet!
RESOLVER
Require-Capability:
power.supply;
filter:=”(& (voltage>110)
(voltage<230))”,
electrician;
filter:=”(& (price<50)
(certified=yes))”
Level 4
decoupled from
implementation
Artifact
Artifact
Requirement
Need to
connect
device to
power outlet!
Capability
Can
connect
device to
power outlet!
RESOLVER
Require-Capability:
power.supply;
filter:=”(& (voltage>110)
(voltage<230))”,
electrician;
filter:=”(& (price<50)
(certified=yes))”
org.osgi.framework.system.capabilities.extra=
power.supply;voltage:Long=220
Level 4
decoupled from
implementation
Artifact
Artifact
Requirement
Need to
connect
device to
power outlet!
Capability
Can
connect
device to
power outlet!
RESOLVER
Require-Capability:
power.supply;
filter:=”(& (voltage>110)
(voltage<230))”,
electrician;
filter:=”(& (price<50)
(certified=yes))”
org.osgi.framework.system.capabilities.extra=
power.supply;voltage:Long=220
Provide-Capability:
electrician;price:Long=10;certified=yes
Buzzword compliant
Modularity Maturity Model
JuServices OSGi
Level 1 Monolith
Level 2 Composite
Level 3 Containers
Level 4 Discovery
Level 5
OK!
OK!
OK!
Level 5
decoupled from
ownership & time
JuServices
Artifact
Artifact
REGISTRY
Service
Service
Service
Service
Level 5
decoupled from
ownership & time
JuServices
Artifact
Artifact
REGISTRY
Service
Service
Service
Service
manifestmanifest
OSGi service registry
REGISTER
REGISTER
manifest
Interface
Service 1
. . .
Service N
Level 5
decoupled from
ownership & time
JuServices
Artifact
Artifact
REGISTRY
Service
Service
Service
Service
manifestmanifest
OSGi service registry
REGISTER USE
manifest
Interface
Service 1
. . .
Service N
REGISTER
Level 5
decoupled from
ownership & time
JuServices
Artifact
Artifact
REGISTRY
Service
Service
Service
Service
OSGi service registry
SERVLET
SERVLET
GET GET
REGISTER
REGISTER
HTTPServiceImpl
HTTP
Service
HTTPServiceImpl
REGISTER
manifest
Level 5
decoupled from
ownership & time
JuServices
Artifact
Artifact
REGISTRY
Service
Service
Service
Service
manifest
OSGi service registry
HTTP
Servlet
REGISTER
SERVLET
SERVLETGET
(when needed)
HTTPServiceImpl
Servlet1
(path=”/1”)
Servlet2
(path=”/2”)
REGISTER
Level 5
decoupled from
ownership & time
JuServices
Artifact
Artifact
REGISTRY
Service
Service
Service
Service
Register OSGI service
(manually) SINGLETON
PROPERTIES CONTRACT
Level 5
decoupled from
ownership & time
JuServices
Artifact
Artifact
REGISTRY
Service
Service
Service
Service
Use an OSGI service
(manually)
DONE WITH
THE SERVICE
START USING
THE SERVCE
FIND
A SERVCE
Level 5
decoupled from
ownership & time
JuServices
Artifact
Artifact
REGISTRY
Service
Service
Service
Service
Declarative services
and
Service Component Runtime
(SCR)
Level 5
decoupled from
ownership & time
JuServices
Artifact
Artifact
REGISTRY
Service
Service
Service
Service
/OSGI-INF/MyComponent.xml file:
<?xml version="1.0" encoding="UTF-8"?>
<scr:component
name=”MyComponent”
xmlns:scr=”http://www.osgi.org/xmlns/scr/v1.2.0”>
<implementation class=”com.liferay.MyComponent”/>
</scr:component>
Manifest header:
Service-Component: OSGI-INF/MyComponent.xml
Level 5
decoupled from
ownership & time
JuServices
Artifact
Artifact
REGISTRY
Service
Service
Service
Service
@Component(
configurationPid=”hello.component.pid”,
configurationPolicy=ConfigurationPolicy.OPTIONAL,
enabled=true,
immediate=true,
name=”HelloComponent”,
property={
”vendor.name=Liferay”,
”other.property=value”
},
service={HelloService.class, OtherService.class}
)
public class HelloComponent implements MultiService {
. . .
Level 5
decoupled from
ownership & time
JuServices
Artifact
Artifact
REGISTRY
Service
Service
Service
Service
@Activate
void open(Map<String,?> properties) {
}
@Deactivate
void close() {
}
@Modified
void modified(Map<String,?> properties) {
}
Level 5
decoupled from
ownership & time
JuServices
Artifact
Artifact
REGISTRY
Service
Service
Service
Service
@Reference(
cardinality=ReferenceCardinality.MANDATORY,
name = “LogService”,
policy = ReferencePolicy.STATIC,
policyOption=ReferencePolicyOption.RELUCTANT,
service = LogService.class,
target = “(vendor.name=Liferay)”,
unbind = “unsetLog”,
updated = “updatedLog”
)
void setLog( LogService log) {
}
void unsetLog( LogService log) {
}
void updatedLog( Map<String,?> ref ) {
}
Buzzword compliant
Modularity Maturity Model
JuServices OSGi
Level 1 Monolith
Level 2 Composite
Level 3 Containers
Level 4 Discovery
Level 5
OK!
OK!
OK!
OK!
The essence of
modularity is
Not knowing
The essence of
modularity is
Not knowing
Which enforces
optimization for
Predictability
Which results in
application
Agility
The essence of
modularity is
Not knowing
Which enforces
optimization for
Predictability
milen.dyankov@liferay.com
@MilenDyankov
http://www.liferay.com
@Liferay

More Related Content

PDF
Moved to https://slidr.io/azzazzel/what-s-not-new-in-modular-java
PDF
OSGi for outsiders - Milen Dyankov
PDF
OSGi: Don't let me be Misunderstood
PPTX
Dependency Injections in Kotlin
PDF
Introduction to Kotlin - Android KTX
PDF
Moved to https://slidr.io/azzazzel/business-wins-in-modularity-microservices-...
PDF
CDI 1.1 university
PDF
An argument for moving the requirements out of user hands - The CMS Experience
Moved to https://slidr.io/azzazzel/what-s-not-new-in-modular-java
OSGi for outsiders - Milen Dyankov
OSGi: Don't let me be Misunderstood
Dependency Injections in Kotlin
Introduction to Kotlin - Android KTX
Moved to https://slidr.io/azzazzel/business-wins-in-modularity-microservices-...
CDI 1.1 university
An argument for moving the requirements out of user hands - The CMS Experience

What's hot (20)

PPSX
Core Java Basics
DOCX
PPTX
Clean Code - Design Patterns and Best Practices at Silicon Valley Code Camp
PPTX
Clean Code III - Software Craftsmanship
PDF
Contract First Development with Microsoft Code Contracts and Microsoft Pex at...
PPTX
Clean Code II - Dependency Injection
PDF
Clean Code 2
PDF
Messages, Instances and Initialization
PPTX
Framework engineering JCO 2011
PPT
Working Effectively With Legacy Code
PDF
Clean Code at Silicon Valley Code Camp 2011 (02/17/2012)
PPTX
Tdd is not about testing (C++ version)
PPTX
Tdd is not about testing (OOP)
PDF
Top 50 .NET Interview Questions and Answers 2019 | Edureka
PPTX
Functional Dependency Injection in C#
PDF
C# Interview Questions | Edureka
PPTX
Top 20 software testing interview questions for sdet
PPSX
CR Bridge Solutions Pvt Ltd. Java slides
PPTX
Clean Code I - Best Practices
PPTX
Clean Code Part III - Craftsmanship at SoCal Code Camp
Core Java Basics
Clean Code - Design Patterns and Best Practices at Silicon Valley Code Camp
Clean Code III - Software Craftsmanship
Contract First Development with Microsoft Code Contracts and Microsoft Pex at...
Clean Code II - Dependency Injection
Clean Code 2
Messages, Instances and Initialization
Framework engineering JCO 2011
Working Effectively With Legacy Code
Clean Code at Silicon Valley Code Camp 2011 (02/17/2012)
Tdd is not about testing (C++ version)
Tdd is not about testing (OOP)
Top 50 .NET Interview Questions and Answers 2019 | Edureka
Functional Dependency Injection in C#
C# Interview Questions | Edureka
Top 20 software testing interview questions for sdet
CR Bridge Solutions Pvt Ltd. Java slides
Clean Code I - Best Practices
Clean Code Part III - Craftsmanship at SoCal Code Camp
Ad

Viewers also liked (20)

PDF
Moved to https://slidr.io/azzazzel/osgi-for-outsiders
PDF
Moved to https://slidr.io/azzazzel/software-craftsmanship-in-the-era-of-softw...
PDF
Moved to https://slidr.io/azzazzel/your-role-in-the-next-release-of-world-pro...
PDF
Moved to https://slidr.io/azzazzel/things-you-cannot-do-before-7
PDF
Moved to https://slidr.io/azzazzel/web-application-performance-tuning-beyond-xmx
PDF
Moved to https://slidr.io/azzazzel/leveraging-osgi-to-create-extensible-plugi...
PDF
Moved to https://slidr.io/azzazzel/liferay-7-microservices-for-the-enterprise
PDF
Moved to https://slidr.io/azzazzel/liferay-multi-channel-mobile-delivery-plat...
PPTX
New and cool in OSGi R7 - David Bosschaert & Carsten Ziegeler
PPTX
Microservices and OSGi: Better together?
PDF
Reactive Architectures
PDF
Protobuf & Code Generation + Go-Kit
PDF
OSGi Blueprint Services
PDF
Reactive Programming in Spring 5
PDF
Microservices OSGi-running-with-apache-karaf
PDF
"PostgreSQL для разработчиков приложений", Павел Лузанов, (Постгрес Профессио...
PDF
"Производительность MySQL: что нового?"
PPTX
"Великолепный API без Rest", Констатин Якушев (Badoo)
PDF
Moved to https://slidr.io/azzazzel/what-is-a-portal
PPTX
Thrift vs Protocol Buffers vs Avro - Biased Comparison
Moved to https://slidr.io/azzazzel/osgi-for-outsiders
Moved to https://slidr.io/azzazzel/software-craftsmanship-in-the-era-of-softw...
Moved to https://slidr.io/azzazzel/your-role-in-the-next-release-of-world-pro...
Moved to https://slidr.io/azzazzel/things-you-cannot-do-before-7
Moved to https://slidr.io/azzazzel/web-application-performance-tuning-beyond-xmx
Moved to https://slidr.io/azzazzel/leveraging-osgi-to-create-extensible-plugi...
Moved to https://slidr.io/azzazzel/liferay-7-microservices-for-the-enterprise
Moved to https://slidr.io/azzazzel/liferay-multi-channel-mobile-delivery-plat...
New and cool in OSGi R7 - David Bosschaert & Carsten Ziegeler
Microservices and OSGi: Better together?
Reactive Architectures
Protobuf & Code Generation + Go-Kit
OSGi Blueprint Services
Reactive Programming in Spring 5
Microservices OSGi-running-with-apache-karaf
"PostgreSQL для разработчиков приложений", Павел Лузанов, (Постгрес Профессио...
"Производительность MySQL: что нового?"
"Великолепный API без Rest", Констатин Якушев (Badoo)
Moved to https://slidr.io/azzazzel/what-is-a-portal
Thrift vs Protocol Buffers vs Avro - Biased Comparison
Ad

Similar to Moved to https://slidr.io/azzazzel/osgi-fundamentals (20)

PDF
Javantura v4 - What’s NOT new in modular Java - Milen Dyankov
PDF
Professional Code Reviews - Bogdan Gusiev
PDF
Go Reactive: Event-Driven, Scalable, Resilient & Responsive Systems
PDF
Kotlin what_you_need_to_know-converted event 4 with nigerians
PPT
JavaHTP6e_10.ppt
PDF
Modular JavaScript in an OSGi World - S Mak
PDF
JavaOne 2017 - TestContainers: integration testing without the hassle
PPT
C463_02_python.ppt,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
PPT
C463_02intoduction_to_python_to learnGAI.ppt
PPTX
OOP-Advanced Programming with c++
PDF
Chapter- 3 Inheritance and Polymorphism-1x4.pdf
PPT
14_inheritance.ppt
PDF
Phosphor: Illuminating Dynamic Data Flow in Commodity JVMs
PDF
End-2-End test environments, a dead End road
PDF
intellimeet
PDF
Test Driven Development - Workshop
ODP
New Ideas for Old Code - Greach
PDF
Beyond design patterns phpnw14
PDF
[Ultracode Munich #4] Short introduction to the new Android build system incl...
Javantura v4 - What’s NOT new in modular Java - Milen Dyankov
Professional Code Reviews - Bogdan Gusiev
Go Reactive: Event-Driven, Scalable, Resilient & Responsive Systems
Kotlin what_you_need_to_know-converted event 4 with nigerians
JavaHTP6e_10.ppt
Modular JavaScript in an OSGi World - S Mak
JavaOne 2017 - TestContainers: integration testing without the hassle
C463_02_python.ppt,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
C463_02intoduction_to_python_to learnGAI.ppt
OOP-Advanced Programming with c++
Chapter- 3 Inheritance and Polymorphism-1x4.pdf
14_inheritance.ppt
Phosphor: Illuminating Dynamic Data Flow in Commodity JVMs
End-2-End test environments, a dead End road
intellimeet
Test Driven Development - Workshop
New Ideas for Old Code - Greach
Beyond design patterns phpnw14
[Ultracode Munich #4] Short introduction to the new Android build system incl...

Recently uploaded (20)

PDF
2025 Textile ERP Trends: SAP, Odoo & Oracle
PDF
Design an Analysis of Algorithms II-SECS-1021-03
PDF
System and Network Administration Chapter 2
PDF
Odoo Companies in India – Driving Business Transformation.pdf
PDF
System and Network Administraation Chapter 3
PDF
Understanding Forklifts - TECH EHS Solution
PDF
wealthsignaloriginal-com-DS-text-... (1).pdf
PDF
AI in Product Development-omnex systems
PDF
T3DD25 TYPO3 Content Blocks - Deep Dive by André Kraus
PDF
Adobe Illustrator 28.6 Crack My Vision of Vector Design
PPTX
history of c programming in notes for students .pptx
PDF
How Creative Agencies Leverage Project Management Software.pdf
PDF
Design an Analysis of Algorithms I-SECS-1021-03
PPTX
Lecture 3: Operating Systems Introduction to Computer Hardware Systems
PDF
Flood Susceptibility Mapping Using Image-Based 2D-CNN Deep Learnin. Overview ...
PPTX
Reimagine Home Health with the Power of Agentic AI​
PDF
Digital Strategies for Manufacturing Companies
PDF
How to Choose the Right IT Partner for Your Business in Malaysia
PDF
EN-Survey-Report-SAP-LeanIX-EA-Insights-2025.pdf
PDF
Wondershare Filmora 15 Crack With Activation Key [2025
2025 Textile ERP Trends: SAP, Odoo & Oracle
Design an Analysis of Algorithms II-SECS-1021-03
System and Network Administration Chapter 2
Odoo Companies in India – Driving Business Transformation.pdf
System and Network Administraation Chapter 3
Understanding Forklifts - TECH EHS Solution
wealthsignaloriginal-com-DS-text-... (1).pdf
AI in Product Development-omnex systems
T3DD25 TYPO3 Content Blocks - Deep Dive by André Kraus
Adobe Illustrator 28.6 Crack My Vision of Vector Design
history of c programming in notes for students .pptx
How Creative Agencies Leverage Project Management Software.pdf
Design an Analysis of Algorithms I-SECS-1021-03
Lecture 3: Operating Systems Introduction to Computer Hardware Systems
Flood Susceptibility Mapping Using Image-Based 2D-CNN Deep Learnin. Overview ...
Reimagine Home Health with the Power of Agentic AI​
Digital Strategies for Manufacturing Companies
How to Choose the Right IT Partner for Your Business in Malaysia
EN-Survey-Report-SAP-LeanIX-EA-Insights-2025.pdf
Wondershare Filmora 15 Crack With Activation Key [2025

Moved to https://slidr.io/azzazzel/osgi-fundamentals