SlideShare una empresa de Scribd logo
1 de 49
Descargar para leer sin conexión
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 modułem, jest to

DEPLOYMENT UNIT
JAR
          Nie zawiera       Jak wygląda
•   Nazwy modułu
•   Wersji
•   Dostawcy
•   Eksportów
•   Importów (zależności)
Zależności
• JAR ma zależności
• Są one domniemane
• Są one podstawą do założeo:
  "Zakładam, że JAR X (wersja Y) jest dostępny,
  inaczej nie zadziałam"
OSGi oferuje

ROZWIĄZANIE
Bundle
              Zawiera   Jak wygląda
•   Nazwę modułu
•   Wersję
•   Dostawcę
•   Eksporty
•   Jawne zależności

    Więcej*
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 PRZENOŚNY
Zależności
Jak powstaje graf
  Importy                Eksporty
• org.code.bar       • org.code.foo
• org.code.baz       • org.code.faz
Wiązanie

 org.code.bar
Wiązanie

 org.code.bar   org.code.bar
Manifesty
Bundle A                       Bundle B
Import-Package: org.code.bar   Export-Package: org.code.bar
Wiązanie

 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
Widocznośd
• W OSGi funkcjonuje pojęcie 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
•   Przykład 1.4.2.alpha2
•   Brak numeru oznacza 0.0.0
Zakresy wersji
• Otwarte, zamknięte, 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
   – Wartości graniczne nie są w zakresie
• 1
   – *1.0.0 , ∞)
• Brak wersji
   – *0.0.0, ∞)
Interakcje pomiędzy komponentami, czyli

DYNAMIKA W OSGI
Stany Bundle’a w OSGi i przejścia
Usługi
•   Oparte na interfejsach.
•   OSGi dostarcza ServiceRegistry.
•   Producent implementuje Interfejs.
•   Konsument korzysta z określonego interfejsu.
    – Konsumenta z producentem wiąże interfejs.
Usługi cd
• Brak jakichkolwiek zalezności do OSGi.
• Może to byd zwykłe POJO*.
• Obsługa dynamicznych usług wymaga nieco
  kodu.
Ułatwienia
•   OSGi Declarative Services (częśd OSGi)
•   Spring Dynamic Modules
•   Blueprint (częśd OSGi R4 enterprise)
•   Apache Felix iPOJO
•   Peaberry (Guice)
Ułatwienia
•   OSGi Declarative Services (częśd OSGi)
•   Spring Dynamic Modules
•   Blueprint (częśd 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
Zarządzanie usługami    Śledzenie usług
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:
   – Domyślna: META-INF/spring/*.xml
   – Nadpisanie poprzez nagłówek Spring-Context
• Atrybuty Spring-Context
   –   create-asynchronously
   –   wait-for-dependencies
   –   timeout
   –   publish-context
Spring DM
       przykład
...
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
        przykład
...
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?

Más contenido relacionado

Destacado

Most Common JavaScript Mistakes
Most Common JavaScript MistakesMost Common JavaScript Mistakes
Most Common JavaScript MistakesYoann Gotthilf
 
Open Source integration tools
Open Source integration toolsOpen Source integration tools
Open Source integration toolsCode-House
 
Introduction to AngularJS
Introduction to AngularJSIntroduction to AngularJS
Introduction to AngularJSYoann Gotthilf
 
When Camel meets CDI
When Camel meets CDIWhen Camel meets CDI
When Camel meets CDICode-House
 
Web development - technologies and tools
Web development - technologies and toolsWeb development - technologies and tools
Web development - technologies and toolsYoann 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.jsYoann Gotthilf
 
Introduction to the MEAN stack
Introduction to the MEAN stackIntroduction to the MEAN stack
Introduction to the MEAN stackYoann Gotthilf
 
Développement Web - HTML5, CSS3, APIs Web
Développement Web - HTML5, CSS3, APIs WebDéveloppement Web - HTML5, CSS3, APIs Web
Développement Web - HTML5, CSS3, APIs WebYoann Gotthilf
 

Destacado (8)

Most Common JavaScript Mistakes
Most Common JavaScript MistakesMost Common JavaScript Mistakes
Most Common JavaScript Mistakes
 
Open Source integration tools
Open Source integration toolsOpen Source integration tools
Open Source integration tools
 
Introduction to AngularJS
Introduction to AngularJSIntroduction to AngularJS
Introduction to AngularJS
 
When Camel meets CDI
When Camel meets CDIWhen Camel meets CDI
When Camel meets CDI
 
Web development - technologies and tools
Web development - technologies and toolsWeb development - technologies and tools
Web development - technologies and tools
 
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
 
Introduction to the MEAN stack
Introduction to the MEAN stackIntroduction to the MEAN stack
Introduction to the MEAN stack
 
Développement Web - HTML5, CSS3, APIs Web
Développement Web - HTML5, CSS3, APIs WebDéveloppement Web - HTML5, CSS3, APIs Web
Développement Web - HTML5, CSS3, APIs Web
 

Similar a OSGi, deklaratywnie

HYC - Angular stań się kanciastym
HYC - Angular stań się kanciastymHYC - Angular stań się kanciastym
HYC - Angular stań się kanciastymDariusz Jagieło
 
Angular 4 pragmatycznie
Angular 4 pragmatycznieAngular 4 pragmatycznie
Angular 4 pragmatycznieSages
 
Programowanie Komponentowe: #C Wprowadzenie do OSGi
Programowanie Komponentowe: #C Wprowadzenie do OSGiProgramowanie Komponentowe: #C Wprowadzenie do OSGi
Programowanie Komponentowe: #C Wprowadzenie do OSGiMikołaj Olszewski
 
Michał Dec - Quality in Clouds
Michał Dec - Quality in CloudsMichał Dec - Quality in Clouds
Michał Dec - Quality in Cloudskraqa
 
Code driven development w Drupalu 7 | DrupalCamp Wrocław 2014
Code driven development w Drupalu 7 | DrupalCamp Wrocław 2014Code driven development w Drupalu 7 | DrupalCamp Wrocław 2014
Code driven development w Drupalu 7 | DrupalCamp Wrocław 2014Grzegorz Bartman
 
Zbyszek Rzepka: GameDev od zaplecza
Zbyszek Rzepka: GameDev od zapleczaZbyszek Rzepka: GameDev od zaplecza
Zbyszek Rzepka: GameDev od zapleczaGameDesire Academy
 
Testowanie rozwiązań serverless z LocalStack
Testowanie rozwiązań serverless z LocalStackTestowanie rozwiązań serverless z LocalStack
Testowanie rozwiązań serverless z LocalStackThe Software House
 
Migracja I Integracja Bazy
Migracja I Integracja BazyMigracja I Integracja Bazy
Migracja I Integracja BazyPrzemysław ...
 
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 DjangoDominik Szopa
 
Automatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPAutomatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPLaravel Poland MeetUp
 
Tech cafe Microservices
Tech cafe MicroservicesTech cafe Microservices
Tech cafe MicroservicesKonrad Król
 
Xdebug – debugowanie i profilowanie aplikacji PHP
Xdebug – debugowanie i profilowanie aplikacji PHPXdebug – debugowanie i profilowanie aplikacji PHP
Xdebug – debugowanie i profilowanie aplikacji PHP3camp
 
Łagodne wprowadzenie do Angular2
Łagodne wprowadzenie do Angular2Łagodne wprowadzenie do Angular2
Łagodne wprowadzenie do Angular2Jakub Nietrzeba
 
C++Builder. Kompendium programisty
C++Builder. Kompendium programistyC++Builder. Kompendium programisty
C++Builder. Kompendium programistyWydawnictwo Helion
 

Similar a OSGi, deklaratywnie (20)

HYC - Angular stań się kanciastym
HYC - Angular stań się kanciastymHYC - Angular stań się kanciastym
HYC - Angular stań się kanciastym
 
Angular 4 pragmatycznie
Angular 4 pragmatycznieAngular 4 pragmatycznie
Angular 4 pragmatycznie
 
Programowanie Komponentowe: #C Wprowadzenie do OSGi
Programowanie Komponentowe: #C Wprowadzenie do OSGiProgramowanie Komponentowe: #C Wprowadzenie do OSGi
Programowanie Komponentowe: #C Wprowadzenie do OSGi
 
Michał Dec - Quality in Clouds
Michał Dec - Quality in CloudsMichał Dec - Quality in Clouds
Michał Dec - Quality in Clouds
 
Code driven development w Drupalu 7 | DrupalCamp Wrocław 2014
Code driven development w Drupalu 7 | DrupalCamp Wrocław 2014Code driven development w Drupalu 7 | DrupalCamp Wrocław 2014
Code driven development w Drupalu 7 | DrupalCamp Wrocław 2014
 
Zbyszek Rzepka: GameDev od zaplecza
Zbyszek Rzepka: GameDev od zapleczaZbyszek Rzepka: GameDev od zaplecza
Zbyszek Rzepka: GameDev od zaplecza
 
Testowanie rozwiązań serverless z LocalStack
Testowanie rozwiązań serverless z LocalStackTestowanie rozwiązań serverless z LocalStack
Testowanie rozwiązań serverless z LocalStack
 
Migracja I Integracja Bazy
Migracja I Integracja BazyMigracja I Integracja Bazy
Migracja I Integracja Bazy
 
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
 
university day 1
university day 1university day 1
university day 1
 
Jaki framework wybrać
Jaki framework wybraćJaki framework wybrać
Jaki framework wybrać
 
Feo w-joomla
Feo w-joomlaFeo w-joomla
Feo w-joomla
 
Automatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPAutomatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHP
 
Tech cafe Microservices
Tech cafe MicroservicesTech cafe Microservices
Tech cafe Microservices
 
Xdebug – debugowanie i profilowanie aplikacji PHP
Xdebug – debugowanie i profilowanie aplikacji PHPXdebug – debugowanie i profilowanie aplikacji PHP
Xdebug – debugowanie i profilowanie aplikacji PHP
 
Łagodne wprowadzenie do Angular2
Łagodne wprowadzenie do Angular2Łagodne wprowadzenie do Angular2
Łagodne wprowadzenie do Angular2
 
Środowisko PWA
Środowisko PWAŚrodowisko PWA
Środowisko PWA
 
Mongodb with Rails
Mongodb with RailsMongodb with Rails
Mongodb with Rails
 
Testowanie na 101 sposobów
Testowanie na 101 sposobówTestowanie na 101 sposobów
Testowanie na 101 sposobów
 
C++Builder. Kompendium programisty
C++Builder. Kompendium programistyC++Builder. Kompendium programisty
C++Builder. Kompendium programisty
 

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 modułem, jest to DEPLOYMENT UNIT
  • 6. JAR Nie zawiera Jak wygląda • Nazwy modułu • Wersji • Dostawcy • Eksportów • Importów (zależności)
  • 7. Zależności • JAR ma zależności • Są one domniemane • Są one podstawą do założeo: "Zakładam, że JAR X (wersja Y) jest dostępny, inaczej nie zadziałam"
  • 9. Bundle Zawiera Jak wygląda • Nazwę modułu • Wersję • Dostawcę • Eksporty • Jawne zależności Więcej*
  • 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. Wiązanie org.code.bar org.code.bar
  • 16. Manifesty Bundle A Bundle B Import-Package: org.code.bar Export-Package: org.code.bar
  • 17. Wiązanie 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. Widocznośd • W OSGi funkcjonuje pojęcie 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 • Przykład 1.4.2.alpha2 • Brak numeru oznacza 0.0.0
  • 28. Zakresy wersji • Otwarte, zamknięte, 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 – Wartości graniczne nie są w zakresie • 1 – *1.0.0 , ∞) • Brak wersji – *0.0.0, ∞)
  • 29. Interakcje pomiędzy komponentami, czyli DYNAMIKA W OSGI
  • 30. Stany Bundle’a w OSGi i przejścia
  • 31. Usługi • Oparte na interfejsach. • OSGi dostarcza ServiceRegistry. • Producent implementuje Interfejs. • Konsument korzysta z określonego interfejsu. – Konsumenta z producentem wiąże interfejs.
  • 32. Usługi cd • Brak jakichkolwiek zalezności do OSGi. • Może to byd zwykłe POJO*. • Obsługa dynamicznych usług wymaga nieco kodu.
  • 33. Ułatwienia • OSGi Declarative Services (częśd OSGi) • Spring Dynamic Modules • Blueprint (częśd OSGi R4 enterprise) • Apache Felix iPOJO • Peaberry (Guice)
  • 34. Ułatwienia • OSGi Declarative Services (częśd OSGi) • Spring Dynamic Modules • Blueprint (częśd 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 Zarządzanie usługami Śledzenie usług 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: – Domyślna: META-INF/spring/*.xml – Nadpisanie poprzez nagłówek Spring-Context • Atrybuty Spring-Context – create-asynchronously – wait-for-dependencies – timeout – publish-context
  • 40. Spring DM przykład ... 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 przykład ... 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