osgi, deklaratywnie
Post on 26-Jun-2015
1.565 Views
Preview:
DESCRIPTION
TRANSCRIPT
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
WPROWADZENIE DO OSGI OSGi to inicjatywa modularyzacji oprogramowania
DEPLOYMENT UNIT
JAR/WAR/EAR nie jest modułem, jest to
JAR
Nie zawiera
• Nazwy modułu
• Wersji
• Dostawcy
• Eksportów
• Importów (zależności)
Jak wygląda
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"
ROZWIĄZANIE OSGi oferuje
Bundle
Zawiera
• Nazwę modułu
• Wersję
• Dostawcę
• Eksporty
• Jawne zależności Więcej*
Jak wygląda
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
JEST PRZENOŚNY
Bundle
Zależności
Jak powstaje graf
Importy
• org.code.bar
• org.code.baz
Eksporty
• org.code.foo
• org.code.faz
Wiązanie
org.code.bar
Wiązanie
org.code.bar org.code.bar
Manifesty
Bundle A Import-Package: org.code.bar
Bundle B 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 [2.0.0,3.1.0)
org.code.bar 4.0
Manifesty
Bundle A Import-Package:
org.code.bar;version=[2.0.0,3.1
.0)
Bundle B Export-Package:
org.code.bar;version=4.0
Wersje
org.code.bar [2.0.0,3.1.0)
org.code.bar 4.0
Wersje
org.code.bar [2.0.0,3.1.0)
org.code.bar 2.5.1
org.code.bar [3.2.0,5.0.0)
org.code.bar 3.2
Wersje
org.code.bar [2.0.0,3.1.0)
org.code.bar 2.5.1
org.code.bar [3.2.0,5.0.0)
org.code.bar 3.2
MOŻE COŚ UKRYD
Bundle
Widocznośd
• W OSGi funkcjonuje pojęcie Private-Package.
• Wszystkie paczki, które nie są eksportowane są prywatne.
NUMEROWANIE WERSJI
Standaryzacja idzie dalej
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, ∞)
DYNAMIKA W OSGI
Interakcje pomiędzy komponentami, czyli
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)
BAZUJE NA SERVICE REGISTRY OSGI Każdy z wymienionych frameworków może byd użyty z innym, ponieważ
Dynamika
Zarządzanie usługami
BundleContext
- registerService
- getServiceReference
- ungetService
ServiceRegistration
- unregister
Śledzenie usług
ServiceTrackerCustomizer
- addingService
- modifiedService
- removedService
Dynamika cd
BundleTracker
- addingBundle
- modifiedBundle
- removedBundle
SPRING DYNAMIC MODULES
Dla pragmatyków i tradycjonalistów
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();
}
}
BLUEPRINT
Dla futurystów
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>
SPRING DM - BLUEPRINT
Porównanie
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
DEMO SPRING, BLUEPRINT, OSGI Showtime
LITERATURA Co warto przeczytad
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?
top related