osgi service platform by example - nils hartmann · » detaillierte einführung in osgi-technologie...

53
OSGi Service Platform by example Gerd Wütherich Nils Hartmann

Upload: others

Post on 08-Jul-2020

8 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

OSGi Service Platform by example

Gerd Wütherich Nils Hartmann

Page 2: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

» Detaillierte Einführung in OSGi-Technologie

» April 2008, dpunkt.verlag

» ISBN 978-3-89864-457-0

» Website: www.osgibook.org

Die OSGi Service Platform – Das Buch

Page 3: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

» OSGi-Technologie im Überblick

» OSGi-Technologie im Detail

» Bundles

» Package-Abhängigkeiten zwischen Bundles

» Bundle-Lebenszyklus

» OSGi Services

» Was bringt mir das?

» Q&A

Agenda

Page 4: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

OSGi-Technologie im Überblick

Page 5: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

» Kein OO

» Kein Information Hiding

» Globale Variablen

» …

Wir erinnern uns…

Page 6: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

Und heute…

Page 7: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

JAR-Hell

rt

jce

jsse

plugin

marketing

spring

asm

bcel

content

naming

core

commons

guiapp

hibernate

cglib

oracle

dbcp

aspectjrt

logging

poi

lucene

jdom

utils

json

log4j

axis

resource

Page 8: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

» Gröbere Einheiten

» Mehr als Klassen oder Packages

» Klare Abhängigkeiten

» zwischen den Einheiten/Modulen

» Klare Sichtbarkeiten

» Zwischen den Einheiten/Modulen

Was fehlt uns?

Page 9: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

» Die OSGi Service Platform…

» … ist ein dynamisches Modulsystem für Java.

» … ermöglicht die dynamische Integration und das Management von Softwarekomponenten (Bundles) und Diensten (Services).

» Bundles und Services können zur Laufzeit in der Plattform installiert, gestartet, gestoppt und deinstalliert werden.

» Besteht aus:

» OSGi Framework (Container für Bundles und Services)

» OSGi Standard Services (verschiedene, horizontale Services)

OSG – was?

Page 10: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

» Basiskomponente der OSGi Service Platform» Erlaubt die Installation und Verwaltung von Bundles und

Services» Verwaltet Anhängigkeiten zwischen Bundles» Kann über Management Agents „von außen“ administriert

werden

Das OSGi Framework

Page 11: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

Einige Beispiele:» Eclipse Platform

» Eclipse SDKs (IDEs), RCP, eRCP, …

» IBM» Websphere App Server (basiert auf OSGi)» Lotus (basiert auf Eclipse-RCP, damit auch OSGi)» Jazz (basiert auf Server-Side-Eclipse)

» BEA/Oracle» SpringSource Application Platform / dm Server» Adobe» ...

Wo wird die OSGi Service Platform eingesetzt?

Page 12: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

» Open Source Implementierungen:» Eclipse Equinox (http://www.eclipse.org/equinox/)

» Apache Felix (http://cwiki.apache.org/FELIX/index.html)

» Knopflerfish (http://www.knopflerfish.org/)

» ProSyst mBedded Server Equinox Edition (http://www.prosyst.com/products/osgi_se_equi_ed.html)

» Kommerzielle Implementierungen:» ProSyst (http://www.prosyst.com)

» Knopflerfish Pro (http://www.makewave.com)

» …

Implementierungen der OSGi Service Platform

Page 13: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

OSGi-Demo: Sherlog - Log-File-Analyzer

» http://sherlog.javakontor.org

Page 14: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

OSGi-Technologie

im Detail

Page 15: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

» … sind die Modularisierungseinheiten innnerhalb des OSGi Frameworks

» … enthalten zusammengehörige Klassen und Ressourcen

» ... können unabhängig im OSGi Framework deployed werden

» … sind JAR-Dateien

» … enthalten ein Bundle Manifest, das das Bundle beschreibt

Bundles

Page 16: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

» … ist Teil des Bundles in der Datei META-INF/MANIFEST.MF

» … enthält Informationen, die das Bundle beschreiben, z.B.

» den eindeutigen Namen und die Version

» die öffentliche Schnittstelle/API

» Package-Abhängigkeiten

Das Bundle Manifest

Manifest-Version: 1.0

Bundle-ManifestVersion: 2

Bundle-Name: Histogram Bundle

Bundle-SymbolicName: org.javakontor.sherlog.ui.histogram

Bundle-Version: 1.0.0

Bundle-Activator: org.javakontor.sherlog.ui.histogram.Activator

Import-Package: org.osgi.framework;version="1.4.0"

Bundle-ClassPath: .

Page 17: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

» Jedes Bundle kann im Bundle-Manifest einen Bundle-Aktivator definieren

» Der Bundle-Aktivator muss das Interface BundleActivator implementieren

Bundle Aktivierung

Bundle-Activator: org.javakontor. … .Activator

package org.osgi.framework;

public interface BundleActivator {

public void start(BundleContext context) throws Exception;

public void stop(BundleContext context) throws Exception;

}

Page 18: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

Demo 1: Ein Histogram-Bundle

Page 19: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

» Package-Abhängigkeiten müssen explizit angegeben werden:» Packages müssen exportiert werden, um sichtbar für andere Bundles

zu sein.» Packages müssen importiert werden, um im Bundle genutzt werden zu

können.

» Das OSGi Framework ist verantwortlich für das Auflösen der importierten und exportierten Packages.

Package-Abhängigkeiten

Page 20: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

» Nur die öffentliche API ist für andere Bundles sichtbar

» Manifest-Header “Export-Package”: kommaseparierte Auflistung aller exportiertenPackages

Packages exportieren

Export-Package: org.jfree.data.statistics, …

Page 21: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

» Der Manifest-Header “Import-Package” gibt Package-Abhängigkeiten an

» Importierte Packages werden durch Komma getrenntaufgelistet

Importieren von Packages mit Import-Package

Import-Package: org.jfree.data.statistics

Page 22: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

» Referenziert ein bestimmtes Bundle» Bundles werden durch Komma getrennt aufgeführt

» Alle exportierten Packages der benötigten Bundles werden vomBundle importiert

Packages importieren mit Require-Bundle

Require-Bundle: org.free.chart

Page 23: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

Demo 2: Package Dependencies

Page 24: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

» Bundles haben einen definierten Lebenszyklus

» Zustandsänderungen können programmatisch oderdurch einen Management Agent getriggert werden

Der Bundle Lifecycle

Page 25: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

» Das Bundle wird (persistent) im OSGi Framework verfügbar gemacht

» Der Bundle-Zustand wird auf INSTALLED gesetzt

Installieren von Bundles I

Page 26: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

» Ein Bundle im Zustand INSTALLED kann (noch) nicht genutzt werden:

» Das Bundle kann nicht gestartet werden

» Packages werden nicht exportiert

Installieren von Bundles

Page 27: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

» Importierten Packages werden exportierte Packages zugeordnet

» Ist dies erfolgreich, wird der Zustand wird auf RESOLVED gesetzt

Resolving

Page 28: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

» Ein Bundle im Zustand RESOLVED kann gestartet werden

» Exportierte Packages können von anderen Bundes importiert werden

Resolving

Page 29: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

» Das Bundle wird in den Zustand STARTING gesetzt

» Der Bundle-Aktivator wird instantiiert und die start()-Methode aufgerufen

Starten von Bundles

Page 30: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

» Das Bundle wird in den Zustand STOPPING gesetzt

» Falls ein Aktivator deklariert ist, wirdBundleActivator.stop() aufgerufen

Stoppen von Bundles

Page 31: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

» Entfernt Bundles aus dem OSGi Framework

» Das Bunde wird in den Zustand UNINSTALLEDgesetzt

Deinstallieren von Bundles

Page 32: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

Demo 3: Bundle-Lebenszyklus

Page 33: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

Ein OSGi Service…

» …ist ein einfaches Java-Objekt (POJO),

» …wird an der zentralen Service Registry registriert,

» …kann von der zentralen Service Registry abgefragt werden.

OSGi Services

Page 34: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

» Registrieren über den BundleContext:

Services registrieren

public class Activator implements BundleActivator {

public void start(BundleContextcontext) throws Exception{

context.registerService(ViewContribution.class.getName(),

new HistogramViewContribution(), null);

[…]

}

[…]

}

Page 35: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

» Abfragen über den BundleContext:

Services benutzen

ServiceReference serviceReference = context

.getServiceReference(LogEventStore.class.getName());

if(serviceReference!= null) {

LogEventStore logEventStore=

(LogEventStore) context.getService(serviceReference);

if(logEventStore!= null) {

[...]

}

}

Page 36: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

Demo 4: OSGi Services

Page 37: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

» Die Suche nach einem Service kann scheitern, weil ...

» ... das implementierende Bundle noch nicht gestartet ist

» ... der Service noch nicht registriert ist

» ... das implementierende Bundle beendet wurde

Services können kommen und gehen

Page 38: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

» ServiceListener / ServiceTracker

» ServiceListener: Callbacks, wenn sich etwas ändert

» ServiceTracker: Verfolgen von Service Listener Events (weniger Code als bei der direkten Verwendung von Service Listenern)

» Empfehlung: Benutzen Sie ServiceTracker!

» (Besser: Verwenden Sie deklarative Ansätze!)

ServiceListener / ServiceTracker

Page 39: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

Service Tracker I

public class LogEventStoreServiceTracker extends ServiceTracker {

public LogEventStoreServiceTracker(BundleContext context) {

super(context, LogEventStore.class.getName(), null);

}

public Object addingService(ServiceReference reference) {

LogEventStore logEventStore =

(LogEventStore) super.addingService(reference);

// do something here...

return logEventStore;

}

public void removedService(ServiceReference reference,

Object service) {

// do something here...

super.removedService(reference, service);

}

}

Page 40: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

Service Tracker II

public class Activator implements BundleActivator {

private ServiceTracker _serviceTracker;

public void start(BundleContext context) throws Exception {

_serviceTracker =

new LogEventStoreServiceTracker(context);

_serviceTracker.open();

}

public void stop(BundleContext context) throws Exception {

_serviceTracker.close();

}

}

Page 41: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

Demo 5: Dynamic services

Page 42: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

» Declarative Services» Teil der OSGi-Spezifikation» Deklarative Beschreibung von Services mit XML» Kapitel 12 in “Die OSGi Service Platform”

» Spring Dynamic Modules» Spring wird mittels OSGi dynamisch» http://www.springframework.org/osgi» Blueprint Service in OSGi Specification R 4.2

» iPojo» “Original” DI framework for OSGi» http://ipojo.org

» Guice - Peaberry» Guice: Performantes, leichtgewichtiges DI Framework» Peaberry: Erweiterung zu Guice für OSGi» http://code.google.com/p/peaberry/» http://code.google.com/p/google-guice/

Deklarative Ansätze

Page 43: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

Was bringt mir das?

Page 44: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

Modularisierung

Page 45: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

Modularisierung in Sherlog

Page 46: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

Offen-Geschlossen-Prinzip

Page 47: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

Offen-Geschlossen-Prinzip in Sherlog

Page 48: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

Variantenbildung

Page 49: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

Variantenbildung II

Page 50: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

Versionierung

Page 51: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

Managebare Software

Page 52: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

Managebare Software II

Page 53: OSGi Service Platform by example - Nils Hartmann · » Detaillierte Einführung in OSGi-Technologie » April 2008, dpunkt.verlag » ISBN 978-3-89864-457-0 » Website: Die OSGi Service

Vielen Dank! Fragen?