@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)

PPTX
"Secure File Sharing Solutions on AWS".pptx
PDF
Top 10 Software Development Trends to Watch in 2025 🚀.pdf
PDF
iTop VPN Crack Latest Version Full Key 2025
PDF
Time Tracking Features That Teams and Organizations Actually Need
PPTX
Computer Software - Technology and Livelihood Education
PPTX
WiFi Honeypot Detecscfddssdffsedfseztor.pptx
PPTX
Patient Appointment Booking in Odoo with online payment
PDF
Designing Intelligence for the Shop Floor.pdf
PPTX
assetexplorer- product-overview - presentation
PDF
AI Guide for Business Growth - Arna Softech
PDF
The Dynamic Duo Transforming Financial Accounting Systems Through Modern Expe...
PDF
Topaz Photo AI Crack New Download (Latest 2025)
PDF
Microsoft Office 365 Crack Download Free
PDF
DuckDuckGo Private Browser Premium APK for Android Crack Latest 2025
PDF
How Tridens DevSecOps Ensures Compliance, Security, and Agility
PDF
EaseUS PDF Editor Pro 6.2.0.2 Crack with License Key 2025
PDF
Salesforce Agentforce AI Implementation.pdf
PDF
Autodesk AutoCAD Crack Free Download 2025
PDF
AI/ML Infra Meetup | Beyond S3's Basics: Architecting for AI-Native Data Access
PPTX
Computer Software and OS of computer science of grade 11.pptx
"Secure File Sharing Solutions on AWS".pptx
Top 10 Software Development Trends to Watch in 2025 🚀.pdf
iTop VPN Crack Latest Version Full Key 2025
Time Tracking Features That Teams and Organizations Actually Need
Computer Software - Technology and Livelihood Education
WiFi Honeypot Detecscfddssdffsedfseztor.pptx
Patient Appointment Booking in Odoo with online payment
Designing Intelligence for the Shop Floor.pdf
assetexplorer- product-overview - presentation
AI Guide for Business Growth - Arna Softech
The Dynamic Duo Transforming Financial Accounting Systems Through Modern Expe...
Topaz Photo AI Crack New Download (Latest 2025)
Microsoft Office 365 Crack Download Free
DuckDuckGo Private Browser Premium APK for Android Crack Latest 2025
How Tridens DevSecOps Ensures Compliance, Security, and Agility
EaseUS PDF Editor Pro 6.2.0.2 Crack with License Key 2025
Salesforce Agentforce AI Implementation.pdf
Autodesk AutoCAD Crack Free Download 2025
AI/ML Infra Meetup | Beyond S3's Basics: Architecting for AI-Native Data Access
Computer Software and OS of computer science of grade 11.pptx

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