際際滷

際際滷Share a Scribd company logo
OSGi
deklaratywnie




   OSGi, Spring DM oraz Blueprint w
                 akcji
Cel
Przedstawid OSGi oraz deklaratywny model
             komponentowy
Agenda
   Wprowadzenie do OSGi
   Dynamika w OSGi
   Spring DM
   Blueprint
OSGi to inicjatywa modularyzacji oprogramowania

WPROWADZENIE DO OSGI
JAR/WAR/EAR nie jest moduem, jest to

DEPLOYMENT UNIT
JAR
          Nie zawiera       Jak wyglda
   Nazwy moduu
   Wersji
   Dostawcy
   Eksport坦w
   Import坦w (zale甜noci)
舘温鉛艶甜稼看界庄
 JAR ma zale甜noci
 S one domniemane
 S one podstaw do zao甜eo:
  "Zakadam, 甜e JAR X (wersja Y) jest dostpny,
  inaczej nie zadziaam"
OSGi oferuje

ROZWIZANIE
Bundle
              Zawiera   Jak wyglda
   Nazw moduu
   Wersj
   Dostawc
   Eksporty
   Jawne zale甜noci

    Wicej*
Manifest
Manifest-Version: 1.0
Export-Package: org.code_house.samples.osgi.api
Built-By: Code-House
Tool: Bnd-0.0.357
Bundle-Name: OSGi Sample :: API
Created-By: Apache Maven Bundle Plugin
Bundle-Vendor: Code-House
Bundle-Version: 1.0.0.SNAPSHOT
Build-Jdk: 1.6.0_20
Bnd-LastModified: 1276540580737
Bundle-ManifestVersion: 2
Bundle-SymbolicName: org.code-house.samples.api
Bundle


JEST PRZENONY
舘温鉛艶甜稼看界庄
Jak powstaje graf
  Importy                Eksporty
 org.code.bar        org.code.foo
 org.code.baz        org.code.faz
Wizanie

 org.code.bar
Wizanie

 org.code.bar   org.code.bar
Manifesty
Bundle A                       Bundle B
Import-Package: org.code.bar   Export-Package: org.code.bar
Wizanie

 org.code.bar   org.code.bar
Wersje

org.code.bar
[2.0.0,3.1.0)
Wersje

org.code.bar    org.code.bar
[2.0.0,3.1.0)   4.0
Manifesty
Bundle A                          Bundle B
Import-Package:                   Export-Package:
org.code.bar;version=[2.0.0,3.1   org.code.bar;version=4.0
.0)
Wersje

org.code.bar    org.code.bar
[2.0.0,3.1.0)   4.0
Wersje
org.code.bar    org.code.bar
[2.0.0,3.1.0)   2.5.1




org.code.bar    org.code.bar
[3.2.0,5.0.0)   3.2
Wersje
org.code.bar    org.code.bar
[2.0.0,3.1.0)   2.5.1




org.code.bar    org.code.bar
[3.2.0,5.0.0)   3.2
Bundle


MO纏E CO UKRYD
Widocznod
 W OSGi funkcjonuje pojcie Private-Package.
 Wszystkie paczki, kt坦re nie s eksportowane s prywatne.
Standaryzacja idzie dalej


NUMEROWANIE WERSJI
Numerowanie
        wersji
   Major . Minor . Micro . Qualifier
   Pierwsze trzy to zawsze numery
   Qualifier to String
   Przykad 1.4.2.alpha2
   Brak numeru oznacza 0.0.0
Zakresy wersji
 Otwarte, zamknite, domniemane
 [1.0.0, 2.0.0]
    1.0.0 <= version <= 2.0.0
    Wersje 1.0.0 oraz 2.0.0 s w zakresie
 (1.0.0, 2.0.0)
    1.0.0 < version < 2.0.0
    Wartoci graniczne nie s w zakresie
 1
    *1.0.0 , )
 Brak wersji
    *0.0.0, )
Interakcje pomidzy komponentami, czyli

DYNAMIKA W OSGI
Stany Bundlea w OSGi i przejcia
Usugi
   Oparte na interfejsach.
   OSGi dostarcza ServiceRegistry.
   Producent implementuje Interfejs.
   Konsument korzysta z okrelonego interfejsu.
     Konsumenta z producentem wi甜e interfejs.
Usugi cd
 Brak jakichkolwiek zaleznoci do OSGi.
 Mo甜e to byd zwyke POJO*.
 Obsuga dynamicznych usug wymaga nieco
  kodu.
Uatwienia
   OSGi Declarative Services (czd OSGi)
   Spring Dynamic Modules
   Blueprint (czd OSGi R4 enterprise)
   Apache Felix iPOJO
   Peaberry (Guice)
Uatwienia
   OSGi Declarative Services (czd OSGi)
   Spring Dynamic Modules
   Blueprint (czd OSGi R4 enterprise)
   Apache Felix iPOJO
   Peaberry (Guice)
Ka甜dy z wymienionych framework坦w mo甜e byd u甜yty z innym, poniewa甜

BAZUJE NA SERVICE REGISTRY OSGI
Dynamika
Zarzdzanie usugami    ledzenie usug
BundleContext           ServiceTrackerCustomizer
- registerService       - addingService
- getServiceReference   - modifiedService
- ungetService          - removedService
ServiceRegistration
- unregister
Dynamika cd
BundleTracker
- addingBundle
- modifiedBundle
- removedBundle
Dla pragmatyk坦w i tradycjonalist坦w

SPRING DYNAMIC MODULES
Spring DM
        podstawy
 Standardowy XML + przestrzenie nazw
 Lokalizacja:
    Domylna: META-INF/spring/*.xml
    Nadpisanie poprzez nag坦wek Spring-Context
 Atrybuty Spring-Context
      create-asynchronously
      wait-for-dependencies
      timeout
      publish-context
Spring DM
       przykad
...
xmlns:osgi=http://www.springframework.org/schema/osgi
...
<osgi:service ref="fileMbox"
    interface="org.code_house.samples.osgi.api.Mailbox">
    <osgi:service-properties>
        <entry key="MB-Name"
               value="directory: d:/data" />
    </osgi:service-properties>
</osgi:service>
Kod Java
private ServiceRegistration mailbox;

public void start(BundleContext context) throws Exception {
    Hashtable properties = new Hashtable();
    properties.put("MB-Name", "directory: data");
    TextFilesMailbox service = new TextFilesMailbox();
    // set properties
    mailbox = context.registerService(
        Mailbox.class.getCanonicalName(),
        service, properties);
}
public void stop(BundleContext context) throws Exception {
    if (mailbox != null) {
        mailbox.unregister();
    }
}
Dla futuryst坦w

BLUEPRINT
Blueprint
        przykad
...
xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
...
<service ref="fixedMbox
    interface="org.code_house.samples.osgi.api.Mailbox">
    <service-properties>
        <entry key="MB-Name" value="fixed" />
    </service-properties>
</service>
Por坦wnanie

SPRING DM - BLUEPRINT
Por坦wnanie
Feature                 Spring DM   Blueprint
Constructor injection   Tak         Tak
Setter injection        Tak         Tak
Field injection         Tak         Nie
Autowiring              Tak         Nie
Lazy-init               Tak         Tak
Bean scopes             Tak         Tak
Custom initialization   Tak         Tak
Showtime

DEMO SPRING, BLUEPRINT, OSGI
Co warto przeczytad

LITERATURA
Literatura
 Dokumentacja Spring DM
  http://static.springsource.org/osgi/docs/
 Specyfikacja OSGi Blueprint
 Developer works
  http://www.ibm.com/developerworks/opensource/library/os-
  osgiblueprint/index.html
 OSGi in Action (Manning)
  http://www.manning.com/hall/
 Spring Dynamic Modules in Action
  http://www.manning.com/cogoluegnes/
 Modular Java
  http://pragprog.com/titles/cwosg/modular-java
PYTANIA?

More Related Content

Viewers also liked (8)

Most Common JavaScript Mistakes
Most Common JavaScript MistakesMost Common JavaScript Mistakes
Most Common JavaScript Mistakes
Yoann Gotthilf
Open Source integration tools
Open Source integration toolsOpen Source integration tools
Open Source integration tools
Code-House
Introduction to AngularJS
Introduction to AngularJSIntroduction to AngularJS
Introduction to AngularJS
Yoann Gotthilf
When Camel meets CDI
When Camel meets CDIWhen Camel meets CDI
When Camel meets CDI
Code-House
Web development - technologies and tools
Web development - technologies and toolsWeb development - technologies and tools
Web development - technologies and tools
Yoann Gotthilf
Introduction to REST API with Node.js
Introduction to REST API with Node.jsIntroduction to REST API with Node.js
Introduction to REST API with Node.js
Yoann Gotthilf
Introduction to the MEAN stack
Introduction to the MEAN stackIntroduction to the MEAN stack
Introduction to the MEAN stack
Yoann Gotthilf
D辿veloppement Web - HTML5, CSS3, APIs WebD辿veloppement Web - HTML5, CSS3, APIs Web
D辿veloppement Web - HTML5, CSS3, APIs Web
Yoann Gotthilf
Most Common JavaScript Mistakes
Most Common JavaScript MistakesMost Common JavaScript Mistakes
Most Common JavaScript Mistakes
Yoann Gotthilf
Open Source integration tools
Open Source integration toolsOpen Source integration tools
Open Source integration tools
Code-House
Introduction to AngularJS
Introduction to AngularJSIntroduction to AngularJS
Introduction to AngularJS
Yoann Gotthilf
When Camel meets CDI
When Camel meets CDIWhen Camel meets CDI
When Camel meets CDI
Code-House
Web development - technologies and tools
Web development - technologies and toolsWeb development - technologies and tools
Web development - technologies and tools
Yoann Gotthilf
Introduction to REST API with Node.js
Introduction to REST API with Node.jsIntroduction to REST API with Node.js
Introduction to REST API with Node.js
Yoann Gotthilf
Introduction to the MEAN stack
Introduction to the MEAN stackIntroduction to the MEAN stack
Introduction to the MEAN stack
Yoann Gotthilf
D辿veloppement Web - HTML5, CSS3, APIs WebD辿veloppement Web - HTML5, CSS3, APIs Web
D辿veloppement Web - HTML5, CSS3, APIs Web
Yoann Gotthilf

Similar to OSGi, deklaratywnie (20)

HYC - Angular sta si kanciastym
HYC - Angular sta si kanciastymHYC - Angular sta si kanciastym
HYC - Angular sta si kanciastym
Dariusz Jagieo
Angular 4 pragmatycznie
Angular 4 pragmatycznieAngular 4 pragmatycznie
Angular 4 pragmatycznie
Sages
Programowanie Komponentowe: #C Wprowadzenie do OSGi
Programowanie Komponentowe: #C Wprowadzenie do OSGiProgramowanie Komponentowe: #C Wprowadzenie do OSGi
Programowanie Komponentowe: #C Wprowadzenie do OSGi
Mikoaj Olszewski
Micha Dec - Quality in Clouds
Micha Dec - Quality in CloudsMicha Dec - Quality in Clouds
Micha Dec - Quality in Clouds
kraqa
Code driven development w Drupalu 7 | DrupalCamp Wrocaw 2014
Code driven development w Drupalu 7 | DrupalCamp Wrocaw 2014Code driven development w Drupalu 7 | DrupalCamp Wrocaw 2014
Code driven development w Drupalu 7 | DrupalCamp Wrocaw 2014
Grzegorz Bartman
Zbyszek Rzepka: GameDev od zaplecza
Zbyszek Rzepka: GameDev od zapleczaZbyszek Rzepka: GameDev od zaplecza
Zbyszek Rzepka: GameDev od zaplecza
GameDesire Academy
Testowanie rozwiza serverless z LocalStack
Testowanie rozwiza serverless z LocalStackTestowanie rozwiza serverless z LocalStack
Testowanie rozwiza serverless z LocalStack
The Software House
Migracja I Integracja Bazy
Migracja I Integracja BazyMigracja I Integracja Bazy
Migracja I Integracja Bazy
Przemysaw ...
Zastosowanie buildout przy wdra甜aniu projekt坦w opartych o framework Django
Zastosowanie buildout przy wdra甜aniu projekt坦w opartych o framework DjangoZastosowanie buildout przy wdra甜aniu projekt坦w opartych o framework Django
Zastosowanie buildout przy wdra甜aniu projekt坦w opartych o framework Django
Dominik Szopa
university day 1
university day 1university day 1
university day 1
Sawomir Borowiec
Jaki framework wybra
Jaki framework wybraJaki framework wybra
Jaki framework wybra
Pawe Tekliski
Feo w-joomla
Feo w-joomlaFeo w-joomla
Feo w-joomla
Dominik Kucharski
Automatyzacja utrzymania jakoci w rodowisku PHP
Automatyzacja utrzymania jakoci w rodowisku PHPAutomatyzacja utrzymania jakoci w rodowisku PHP
Automatyzacja utrzymania jakoci w rodowisku PHP
Laravel Poland MeetUp
Tech cafe Microservices
Tech cafe MicroservicesTech cafe Microservices
Tech cafe Microservices
Konrad Kr坦l
Xdebug debugowanie i profilowanie aplikacji PHP
Xdebug  debugowanie i profilowanie aplikacji PHPXdebug  debugowanie i profilowanie aplikacji PHP
Xdebug debugowanie i profilowanie aplikacji PHP
3camp
agodne wprowadzenie do Angular2
agodne wprowadzenie do Angular2agodne wprowadzenie do Angular2
agodne wprowadzenie do Angular2
Jakub Nietrzeba
rodowisko PWA
rodowisko PWArodowisko PWA
rodowisko PWA
University of Economics in Katowice
Mongodb with Rails
Mongodb with RailsMongodb with Rails
Mongodb with Rails
Sebastian Nowak
Testowanie na 101 sposob坦w
Testowanie na 101 sposob坦wTestowanie na 101 sposob坦w
Testowanie na 101 sposob坦w
Katarzyna Javaheri-Szpak
C++Builder. Kompendium programisty
C++Builder. Kompendium programistyC++Builder. Kompendium programisty
C++Builder. Kompendium programisty
Wydawnictwo Helion
HYC - Angular sta si kanciastym
HYC - Angular sta si kanciastymHYC - Angular sta si kanciastym
HYC - Angular sta si kanciastym
Dariusz Jagieo
Angular 4 pragmatycznie
Angular 4 pragmatycznieAngular 4 pragmatycznie
Angular 4 pragmatycznie
Sages
Programowanie Komponentowe: #C Wprowadzenie do OSGi
Programowanie Komponentowe: #C Wprowadzenie do OSGiProgramowanie Komponentowe: #C Wprowadzenie do OSGi
Programowanie Komponentowe: #C Wprowadzenie do OSGi
Mikoaj Olszewski
Micha Dec - Quality in Clouds
Micha Dec - Quality in CloudsMicha Dec - Quality in Clouds
Micha Dec - Quality in Clouds
kraqa
Code driven development w Drupalu 7 | DrupalCamp Wrocaw 2014
Code driven development w Drupalu 7 | DrupalCamp Wrocaw 2014Code driven development w Drupalu 7 | DrupalCamp Wrocaw 2014
Code driven development w Drupalu 7 | DrupalCamp Wrocaw 2014
Grzegorz Bartman
Zbyszek Rzepka: GameDev od zaplecza
Zbyszek Rzepka: GameDev od zapleczaZbyszek Rzepka: GameDev od zaplecza
Zbyszek Rzepka: GameDev od zaplecza
GameDesire Academy
Testowanie rozwiza serverless z LocalStack
Testowanie rozwiza serverless z LocalStackTestowanie rozwiza serverless z LocalStack
Testowanie rozwiza serverless z LocalStack
The Software House
Migracja I Integracja Bazy
Migracja I Integracja BazyMigracja I Integracja Bazy
Migracja I Integracja Bazy
Przemysaw ...
Zastosowanie buildout przy wdra甜aniu projekt坦w opartych o framework Django
Zastosowanie buildout przy wdra甜aniu projekt坦w opartych o framework DjangoZastosowanie buildout przy wdra甜aniu projekt坦w opartych o framework Django
Zastosowanie buildout przy wdra甜aniu projekt坦w opartych o framework Django
Dominik Szopa
Jaki framework wybra
Jaki framework wybraJaki framework wybra
Jaki framework wybra
Pawe Tekliski
Automatyzacja utrzymania jakoci w rodowisku PHP
Automatyzacja utrzymania jakoci w rodowisku PHPAutomatyzacja utrzymania jakoci w rodowisku PHP
Automatyzacja utrzymania jakoci w rodowisku PHP
Laravel Poland MeetUp
Tech cafe Microservices
Tech cafe MicroservicesTech cafe Microservices
Tech cafe Microservices
Konrad Kr坦l
Xdebug debugowanie i profilowanie aplikacji PHP
Xdebug  debugowanie i profilowanie aplikacji PHPXdebug  debugowanie i profilowanie aplikacji PHP
Xdebug debugowanie i profilowanie aplikacji PHP
3camp
agodne wprowadzenie do Angular2
agodne wprowadzenie do Angular2agodne wprowadzenie do Angular2
agodne wprowadzenie do Angular2
Jakub Nietrzeba
C++Builder. Kompendium programisty
C++Builder. Kompendium programistyC++Builder. Kompendium programisty
C++Builder. Kompendium programisty
Wydawnictwo Helion

OSGi, deklaratywnie

  • 1. OSGi deklaratywnie OSGi, Spring DM oraz Blueprint w akcji
  • 2. Cel Przedstawid OSGi oraz deklaratywny model komponentowy
  • 3. Agenda Wprowadzenie do OSGi Dynamika w OSGi Spring DM Blueprint
  • 4. OSGi to inicjatywa modularyzacji oprogramowania WPROWADZENIE DO OSGI
  • 5. JAR/WAR/EAR nie jest moduem, jest to DEPLOYMENT UNIT
  • 6. JAR Nie zawiera Jak wyglda Nazwy moduu Wersji Dostawcy Eksport坦w Import坦w (zale甜noci)
  • 7. 舘温鉛艶甜稼看界庄 JAR ma zale甜noci S one domniemane S one podstaw do zao甜eo: "Zakadam, 甜e JAR X (wersja Y) jest dostpny, inaczej nie zadziaam"
  • 9. Bundle Zawiera Jak wyglda Nazw moduu Wersj Dostawc Eksporty Jawne zale甜noci Wicej*
  • 10. Manifest Manifest-Version: 1.0 Export-Package: org.code_house.samples.osgi.api Built-By: Code-House Tool: Bnd-0.0.357 Bundle-Name: OSGi Sample :: API Created-By: Apache Maven Bundle Plugin Bundle-Vendor: Code-House Bundle-Version: 1.0.0.SNAPSHOT Build-Jdk: 1.6.0_20 Bnd-LastModified: 1276540580737 Bundle-ManifestVersion: 2 Bundle-SymbolicName: org.code-house.samples.api
  • 13. Jak powstaje graf Importy Eksporty org.code.bar org.code.foo org.code.baz org.code.faz
  • 15. Wizanie org.code.bar org.code.bar
  • 16. Manifesty Bundle A Bundle B Import-Package: org.code.bar Export-Package: org.code.bar
  • 17. Wizanie org.code.bar org.code.bar
  • 19. Wersje org.code.bar org.code.bar [2.0.0,3.1.0) 4.0
  • 20. Manifesty Bundle A Bundle B Import-Package: Export-Package: org.code.bar;version=[2.0.0,3.1 org.code.bar;version=4.0 .0)
  • 21. Wersje org.code.bar org.code.bar [2.0.0,3.1.0) 4.0
  • 22. Wersje org.code.bar org.code.bar [2.0.0,3.1.0) 2.5.1 org.code.bar org.code.bar [3.2.0,5.0.0) 3.2
  • 23. Wersje org.code.bar org.code.bar [2.0.0,3.1.0) 2.5.1 org.code.bar org.code.bar [3.2.0,5.0.0) 3.2
  • 25. Widocznod W OSGi funkcjonuje pojcie Private-Package. Wszystkie paczki, kt坦re nie s eksportowane s prywatne.
  • 27. Numerowanie wersji Major . Minor . Micro . Qualifier Pierwsze trzy to zawsze numery Qualifier to String Przykad 1.4.2.alpha2 Brak numeru oznacza 0.0.0
  • 28. Zakresy wersji Otwarte, zamknite, domniemane [1.0.0, 2.0.0] 1.0.0 <= version <= 2.0.0 Wersje 1.0.0 oraz 2.0.0 s w zakresie (1.0.0, 2.0.0) 1.0.0 < version < 2.0.0 Wartoci graniczne nie s w zakresie 1 *1.0.0 , ) Brak wersji *0.0.0, )
  • 29. Interakcje pomidzy komponentami, czyli DYNAMIKA W OSGI
  • 30. Stany Bundlea w OSGi i przejcia
  • 31. Usugi Oparte na interfejsach. OSGi dostarcza ServiceRegistry. Producent implementuje Interfejs. Konsument korzysta z okrelonego interfejsu. Konsumenta z producentem wi甜e interfejs.
  • 32. Usugi cd Brak jakichkolwiek zaleznoci do OSGi. Mo甜e to byd zwyke POJO*. Obsuga dynamicznych usug wymaga nieco kodu.
  • 33. Uatwienia OSGi Declarative Services (czd OSGi) Spring Dynamic Modules Blueprint (czd OSGi R4 enterprise) Apache Felix iPOJO Peaberry (Guice)
  • 34. Uatwienia OSGi Declarative Services (czd OSGi) Spring Dynamic Modules Blueprint (czd OSGi R4 enterprise) Apache Felix iPOJO Peaberry (Guice)
  • 35. Ka甜dy z wymienionych framework坦w mo甜e byd u甜yty z innym, poniewa甜 BAZUJE NA SERVICE REGISTRY OSGI
  • 36. Dynamika Zarzdzanie usugami ledzenie usug BundleContext ServiceTrackerCustomizer - registerService - addingService - getServiceReference - modifiedService - ungetService - removedService ServiceRegistration - unregister
  • 37. Dynamika cd BundleTracker - addingBundle - modifiedBundle - removedBundle
  • 38. Dla pragmatyk坦w i tradycjonalist坦w SPRING DYNAMIC MODULES
  • 39. Spring DM podstawy Standardowy XML + przestrzenie nazw Lokalizacja: Domylna: META-INF/spring/*.xml Nadpisanie poprzez nag坦wek Spring-Context Atrybuty Spring-Context create-asynchronously wait-for-dependencies timeout publish-context
  • 40. Spring DM przykad ... xmlns:osgi=http://www.springframework.org/schema/osgi ... <osgi:service ref="fileMbox" interface="org.code_house.samples.osgi.api.Mailbox"> <osgi:service-properties> <entry key="MB-Name" value="directory: d:/data" /> </osgi:service-properties> </osgi:service>
  • 41. Kod Java private ServiceRegistration mailbox; public void start(BundleContext context) throws Exception { Hashtable properties = new Hashtable(); properties.put("MB-Name", "directory: data"); TextFilesMailbox service = new TextFilesMailbox(); // set properties mailbox = context.registerService( Mailbox.class.getCanonicalName(), service, properties); } public void stop(BundleContext context) throws Exception { if (mailbox != null) { mailbox.unregister(); } }
  • 43. Blueprint przykad ... xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" ... <service ref="fixedMbox interface="org.code_house.samples.osgi.api.Mailbox"> <service-properties> <entry key="MB-Name" value="fixed" /> </service-properties> </service>
  • 45. Por坦wnanie Feature Spring DM Blueprint Constructor injection Tak Tak Setter injection Tak Tak Field injection Tak Nie Autowiring Tak Nie Lazy-init Tak Tak Bean scopes Tak Tak Custom initialization Tak Tak
  • 48. Literatura Dokumentacja Spring DM http://static.springsource.org/osgi/docs/ Specyfikacja OSGi Blueprint Developer works http://www.ibm.com/developerworks/opensource/library/os- osgiblueprint/index.html OSGi in Action (Manning) http://www.manning.com/hall/ Spring Dynamic Modules in Action http://www.manning.com/cogoluegnes/ Modular Java http://pragprog.com/titles/cwosg/modular-java