Mais conteúdo relacionado Semelhante a OSGi, deklaratywnie (20) OSGi, deklaratywnie3. Agenda
• Wprowadzenie do OSGi
• Dynamika w OSGi
• Spring DM
• Blueprint
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*
13. Jak powstaje graf
Importy Eksporty
• org.code.bar • org.code.foo
• org.code.baz • org.code.faz
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)
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, ∞)
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
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