際際滷

際際滷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

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