osgi, deklaratywnie

49
OSGi deklaratywnie OSGi, Spring DM oraz Blueprint w akcji

Upload: code-house

Post on 26-Jun-2015

1.565 views

Category:

Technology


0 download

DESCRIPTION

Slajdy z prezentacji Warszawa JUG, która odbyła się 15 czerwca 2010.

TRANSCRIPT

Page 1: OSGi, deklaratywnie

OSGi deklaratywnie

OSGi, Spring DM oraz Blueprint w akcji

Page 2: OSGi, deklaratywnie

Cel

Przedstawid OSGi oraz deklaratywny model komponentowy

Page 3: OSGi, deklaratywnie

Agenda

• Wprowadzenie do OSGi

• Dynamika w OSGi

• Spring DM

• Blueprint

Page 4: OSGi, deklaratywnie

WPROWADZENIE DO OSGI OSGi to inicjatywa modularyzacji oprogramowania

Page 5: OSGi, deklaratywnie

DEPLOYMENT UNIT

JAR/WAR/EAR nie jest modułem, jest to

Page 6: OSGi, deklaratywnie

JAR

Nie zawiera

• Nazwy modułu

• Wersji

• Dostawcy

• Eksportów

• Importów (zależności)

Jak wygląda

Page 7: OSGi, deklaratywnie

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"

Page 8: OSGi, deklaratywnie

ROZWIĄZANIE OSGi oferuje

Page 9: OSGi, deklaratywnie

Bundle

Zawiera

• Nazwę modułu

• Wersję

• Dostawcę

• Eksporty

• Jawne zależności Więcej*

Jak wygląda

Page 10: OSGi, deklaratywnie

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

Page 11: OSGi, deklaratywnie

JEST PRZENOŚNY

Bundle

Page 12: OSGi, deklaratywnie

Zależności

Page 13: OSGi, deklaratywnie

Jak powstaje graf

Importy

• org.code.bar

• org.code.baz

Eksporty

• org.code.foo

• org.code.faz

Page 14: OSGi, deklaratywnie

Wiązanie

org.code.bar

Page 15: OSGi, deklaratywnie

Wiązanie

org.code.bar org.code.bar

Page 16: OSGi, deklaratywnie

Manifesty

Bundle A Import-Package: org.code.bar

Bundle B Export-Package: org.code.bar

Page 17: OSGi, deklaratywnie

Wiązanie

org.code.bar org.code.bar

Page 18: OSGi, deklaratywnie

Wersje

org.code.bar [2.0.0,3.1.0)

Page 19: OSGi, deklaratywnie

Wersje

org.code.bar [2.0.0,3.1.0)

org.code.bar 4.0

Page 20: OSGi, deklaratywnie

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

Page 21: OSGi, deklaratywnie

Wersje

org.code.bar [2.0.0,3.1.0)

org.code.bar 4.0

Page 22: OSGi, deklaratywnie

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

Page 23: OSGi, deklaratywnie

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

Page 24: OSGi, deklaratywnie

MOŻE COŚ UKRYD

Bundle

Page 25: OSGi, deklaratywnie

Widocznośd

• W OSGi funkcjonuje pojęcie Private-Package.

• Wszystkie paczki, które nie są eksportowane są prywatne.

Page 26: OSGi, deklaratywnie

NUMEROWANIE WERSJI

Standaryzacja idzie dalej

Page 27: OSGi, deklaratywnie

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

Page 28: OSGi, deklaratywnie

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, ∞)

Page 29: OSGi, deklaratywnie

DYNAMIKA W OSGI

Interakcje pomiędzy komponentami, czyli

Page 30: OSGi, deklaratywnie

Stany Bundle’a w OSGi i przejścia

Page 31: OSGi, deklaratywnie

Usługi

• Oparte na interfejsach.

• OSGi dostarcza ServiceRegistry.

• Producent implementuje Interfejs.

• Konsument korzysta z określonego interfejsu.

– Konsumenta z producentem wiąże interfejs.

Page 32: OSGi, deklaratywnie

Usługi cd

• Brak jakichkolwiek zalezności do OSGi.

• Może to byd zwykłe POJO*.

• Obsługa dynamicznych usług wymaga nieco kodu.

Page 33: OSGi, deklaratywnie

Ułatwienia

• OSGi Declarative Services (częśd OSGi)

• Spring Dynamic Modules

• Blueprint (częśd OSGi R4 enterprise)

• Apache Felix iPOJO

• Peaberry (Guice)

Page 34: OSGi, deklaratywnie

Ułatwienia

• OSGi Declarative Services (częśd OSGi)

• Spring Dynamic Modules

• Blueprint (częśd OSGi R4 enterprise)

• Apache Felix iPOJO

• Peaberry (Guice)

Page 35: OSGi, deklaratywnie

BAZUJE NA SERVICE REGISTRY OSGI Każdy z wymienionych frameworków może byd użyty z innym, ponieważ

Page 36: OSGi, deklaratywnie

Dynamika

Zarządzanie usługami

BundleContext

- registerService

- getServiceReference

- ungetService

ServiceRegistration

- unregister

Śledzenie usług

ServiceTrackerCustomizer

- addingService

- modifiedService

- removedService

Page 37: OSGi, deklaratywnie

Dynamika cd

BundleTracker

- addingBundle

- modifiedBundle

- removedBundle

Page 38: OSGi, deklaratywnie

SPRING DYNAMIC MODULES

Dla pragmatyków i tradycjonalistów

Page 39: OSGi, deklaratywnie

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

Page 40: OSGi, deklaratywnie

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>

Page 41: OSGi, deklaratywnie

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();

}

}

Page 42: OSGi, deklaratywnie

BLUEPRINT

Dla futurystów

Page 43: OSGi, deklaratywnie

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>

Page 44: OSGi, deklaratywnie

SPRING DM - BLUEPRINT

Porównanie

Page 45: OSGi, deklaratywnie

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

Page 46: OSGi, deklaratywnie

DEMO SPRING, BLUEPRINT, OSGI Showtime

Page 47: OSGi, deklaratywnie

LITERATURA Co warto przeczytad

Page 48: OSGi, deklaratywnie

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

Page 49: OSGi, deklaratywnie

PYTANIA?