SlideShare ist ein Scribd-Unternehmen logo
1 von 4
Downloaden Sie, um offline zu lesen
Core OSGi in kleinen Dosen – Teil 1




     Erste Schritte mit OSGi
     Die OSGi Service Platform (OSGi) hat sich zu einem sehr bedeutenden
     Standard im Java-Umfeld entwickelt. Also wird es für den engagierten
     Java-Entwickler allerhöchste Zeit, sich damit näher auseinanderzusetzen.




     von Heiko Seeberger

                                                                                                 bestehen. Wer meint, Modularisierung
                                                   zahlreiche namha e Unternehmen sind,
               SGi prägt schon heute vielerorts
                                                                                                 sei auch organisatorisch zu erzielen, z.B.
                                                   die sich 1999 zu diesem Zweck in einer
               die Java-Welt und schickt sich
                                                                                                 durch mehrere Projekte oder durch den
                                                   internationalen Organisation zusam-
               an, zu einer universellen Ba-
                                                                                                 Einsatz von komponentenorientierten
                                                   menfanden, der OSGi Alliance [1]. OSGi
     sistechnologie zu werden. So mancher
                                                                                                 Build-Systemen wie Maven, der betrach-
                                                   stand ursprünglich als Abkürzung für
     Leser wird diesem bereits seit 2000 exis-
                                                                                                 tet nur die halbe Wahrheit. OSGi hinge-
                                                   „Open Service Gateway Initiative“, heute
     tierenden Standard vermutlich erstmalig
                                                                                                 gen adressiert nicht nur den Zeitraum
                                                   steht der Begri für sich bzw. als Teil von
     in Form des Eclipse SDK oder der Eclipse
                                                                                                 der Entwicklung, sondern insbesondere
                                                   OSGi Service Platform, Titel der aktuellen
     Rich Client Platform begegnet sein, da die
                                                                                                 auch das Laufzeitverhalten: Es wird spe-
                                                   Spezi kation (Version 4.1).
     Eclipse-Plug-in-Architektur seit Version
                                                                                                 zi ziert, wie Module im laufenden Be-
     3.0 auf OSGi basiert. Damit hat Eclipse
                                                   Ein dynamisches und service-                  trieb unter Berücksichtigung ihrer Ab-
     zweifelsohne einen bedeutenden Anteil
                                                   orientiertes Modulsystem                      hängigkeiten installiert, aktualisiert und
     an der aktuellen Popularität dieser Tech-
                                                                                                 entfernt werden können. Gerade diese
     nologie, die jedoch viel mehr zu bieten hat   Warum ist OSGi eigentlich so erfolg-
                                                                                                 Dynamik macht OSGi für serverseitige
     als ein „Modulsystem für Rich Clients“.       reich? Welchen Eigenscha en ist es zu
                                                                                                 bzw. hochverfügbare Systeme interes-
                                                   verdanken, dass OSGi aus der Java-Welt
     Ein Blick zurück                                                                            sant, da Hot Deployment im Standard
                                                   kaum mehr wegzudenken ist? Die OSGi
                                                                                                 inklusive ist.
     Ursprünglich wurde OSGi nicht mit Blick       Alliance de niert OSGi als dynamisches
                                                                                                      Die dritte wesentliche Eigenschaft
     auf Rich Clients oder gar Server, sondern     Modulsystem für Java. Damit werden
                                                                                                 von OSGi ist ein serviceorientiertes
     für so genannte Residential Internet Gate-    zwei der drei aus unserer Sicht entschei-
                                                                                                 Programmiermodell: Module können
     ways – Systeme aus der Gebäudetechnik         denden Merkmale aufgeführt: Modula-
                                                                                                 Objekte als Services bereitstellen, indem
     – konzipiert. Derartige Systeme erfordern     risierung und Dynamik.
                                                                                                 sie diese an der OSGi Service Registry re-
     üblicherweise Fernmanagement sowie                 Modularisierung ist ein „altes Haus-
                                                                                                 gistrieren. Andere Module können diese
     Installation von Komponenten im lau-          mittel“ – nicht nur in der Informatik –,
                                                                                                 Services abrufen und so untereinander
     fenden Betrieb. Mit diesen Anforderun-        um komplexe Probleme zu lösen.
                                                                                                 kommunizieren. Dies führt zu einer lo-
     gen im Fokus entstand die erste Version       Schließlich lassen sich überschaubare
                                                                                                 sen Kopplung der beteiligten Module.
     der OSGi-Spezi kation, deren Urheber          Häppchen leichter verdauen als das gro-
                                                   ße Ganze. Die Objektorientierung im
                                                   Allgemeinen und Java im Speziellen bie-
            Artikelserie:
                                                   ten bereits Möglichkeiten zur Modulari-
            OSGi in kleinen Dosen
                                                   sierung, z.B. in Form von Klassen, Pake-
                                                   ten, Sichtbarkeitsregeln etc. Allerdings
            Teil 1: Erste Schritte mit OSGi
            Teil 2: Immer in Bewegung –            hat sich in der Praxis herausgestellt, dass
                    Bundles und Lifecycle
                                                   Java ein Modulkonzept „oberhalb“ von
            Teil 3: Was wünschen Sie? –
                                                   Packages vermissen lässt. OSGi schließt
                    Services à la OSGi
                                                   diese Lücke, sodass anstelle der sonst o
            Teil 4: Alles XML oder was? – Ser-
                                                   anzutre enden monolithischen Syste-
                    vices auf deklarative Weise
            Teil 5: Hier wird „Service“ groß ge    me solche treten, die aus verschiedenen
                    schrieben — Ausgewählte
                                                   Modulen mit wohlde nierten ö entli-
                    OSGi-Standardservices
                                                   chen Schnittstellen und Abhängigkeiten        Abb. 1: Herausragende OSGi-Eigenschaften




  32 javamagazin 12|2008                                                                                                www.JAXenter.de
OSGi in kleinen Dosen – Teil 1 Core



                                            definiert im Wesentlichen das OSGi
    Jede dieser drei Eigenscha en, Mo-
                                            Framework sowie die OSGi Standard
dularisierung, Laufzeitdynamik und
                                            Services. Das OSGi Framework bzw.
Serviceorientierung, ist an sich nichts
                                            eine Implementierung dessen stellt die
Neues, aber OSGi verbindet diese syn-
                                            Laufzeitumgebung für So ware auf Ba-
ergetisch, sodass sich die folgenden Nut-
                                            sis von OSGi dar. Die Standardservices,
zenpotenziale ergeben (Abb. 1):
                                            z.B. Log Service oder Http Service, stan-   Abb. 2: OSGi-System
                                            dardisieren die Lösung typischer Prob-
 Erhöhte Flexibilität durch rigorose
                                            lemstellungen und können in eigenen
 Trennung von API und Implementie-
                                            Systemen genutzt werden.
 rung
 Einsparung von Entwicklungskosten
                                            Das OSGi Framework
 durch Wiederverwendung von Mo-
 dulen                                      Um gleich im OSGi-Jargon sprechen zu
 Einsparung von Betriebskosten durch        können, führen wir zunächst einen zen-
 standardisiertes Lifecycle Manage-         tralen Begri ein: Ein OSGi-Modul wird       Abb. 3: Schichtenarchitektur des OSGi
 ment, z.B. Hot Deployment oder par-        Bundle genannt. Somit bestehen Syste-       Frameworks
 allelen Betrieb mehrerer Modulversi-       me auf Basis von OSGi aus Bundles, für
 onen                                       die das OSGi Framework die Laufzeit-
                                            umgebung darstellt (Abb. 2). Die Funk-
 Hohe Qualitätseffizienz durch gute
                                            tionalität des OSGi Frameworks ist auf
 Testbarkeit aufgrund von loser Kopp-
                                            mehrere Schichten verteilt, die in Abbil-
 lung
                                            dung 3 orange dargestellt sind.
 Nutzung neuer Möglichkeiten, z.B. in
                                                Der Module Layer definiert die
 der So wareverteilung                                                                  Abb. 4: „Hello World!“-Architektur
                                            strukturellen Aspekte rund um Bundles,
                                            d.h. die statische Sicht auf das OSGi-Mo-
Doch wie unterstützt OSGi die beschrie-
                                            dulkonzept. Bundles sind JAR-Archive        zuheben ist, dass im Bundle Manifest
benen Eigenscha en? Dazu werfen wir
                                            und enthalten neben Klassen und Res-        die Abhängigkeiten und das API, d.h.
zunächst einen Blick auf die Gesamtar-
                                            sourcen mit dem Bundle Manifest eine        die ö entliche Schnittstelle, explizit de-
chitektur. Die vorzügliche OSGi-Spezi-
                                            Datei, die die OSGi-Eigenscha en des        klariert werden. Das OSGi Framework
  kation, die in Form von Core Speci ca-
                                            Bundles beschreibt. Besonders hervor-       stellt sicher, dass andere Bundles nur auf
tion und Service Compendium vorliegt,




                                                            Anzeige




  Java-184x115.indd 1                                                                                                        17.10.2008 15:54:09 Uhr
Core OSGi in kleinen Dosen – Teil 1


                                                                            sodass Bundles in bestimmten Phasen
                                                                            ihres Lebenszyklus Objekte als Services
                                                                            an der OSGi Service Registry anmelden
                                                                            oder abrufen können. Dabei wird das
                                                                            Serviceinterface, das vom Service imple-
                    Abb. 5: „Hello World!“-Ergebnis
                                                                            mentiert wird, als Schlüssel verwendet.      Abb. 6: Deklaration der öffentlichen
                                                                            Besonderes Augenmerk muss hierbei            Schnittstelle
                                                                            der Laufzeitdynamik gewidmet werden:
                              das API eines Bundles zugreifen kön-
                                                                            Schließlich können die Bundles, die
                              nen, und das auch nur dann, wenn sie                                                       „lauscht“, sobald es gestartet wurde, auf
                                                                            Services anbieten, jederzeit „kommen
                              selbst entsprechende Abhängigkeiten                                                        solche Services, um diese aufzurufen
                                                                            und gehen“, womit Servicekonsumenten
                              deklarieren.                                                                               und das Ergebnis „Hello World!“ auf der
                                                                            umgehen können müssen. Daher bietet
                                   Der Lifecycle Layer bringt die dy-                                                    Konsole auszugeben (Abb. 5).
                                                                            OSGi Mechanismen, um den Service
                              namische Sicht ins Spiel, indem er den                                                         Für dieses Beispiel wird Java 5 und
                                                                            Lifecycle zu verfolgen, z.B. den im „Hello
                              Lebenszyklus von Bundles im OSGi                                                           Eclipse SDK Ganymede mit PDE benö-
                                                                            World!“-Beispiel verwendeten Service-
                              Framework de niert. So können Bund-                                                        tigt, z.B. das Package Eclipse for RCP/
                                                                            Tracker.
                              les beispielsweise zur Laufzeit installiert                                                Plug-in Developers [5]. Um Nebene ek-
                                                                                Daneben stellt der Security Layer auf
                              und wieder deinstalliert werden. Weiter-                                                   te zu vermeiden, sollte ein neuer Work-
                                                                            Basis von Java 2 Security spezi sche Si-
                              hin können Bundles auch gestartet und                                                      space verwendet werden.
                                                                            cherheitsbelange zur Verfügung. Neben
                              gestoppt werden, woraufhin in einem
                                                                                                                         Der Provider
                              speziellen Objekt, dem BundleActivator,       dem Signieren von Bundles spielen dar-
                              entsprechende start()- und stop()-Me-                                                      Zunächst erstellen wir das Bundle com.
                                                                            in für OSGi spezi sche Permissions eine
                                                                                                                         weiglewilczek.example.osgi.hello.pro-
                                                                            zentrale Rolle. So kann z.B. festgelegt
                              thoden aufgerufen werden.
                                                                                                                         vider. Wir werden in der kommenden
                                                                            werden, ob ein Bundle berechtigt wird,
                                   Der Service Layer fügt ein service-
                                                                            bestimmte Services zu verwenden oder
                              orientiertes Programmiermodell hinzu,                                                      Folge auf übliche Namenskonventionen
                                                                            das API anderer Bundles zu nutzen.           eingehen. PDE unterstützt die Entwick-
                                                                                Unterhalb der Framework-Schich-          lung von OSGi Bundles unter anderem
Listing 1                                                                   ten de niert OSGi in Form von Executi-       durch Plug-in-Projekte. Diese sind, ver-
                                                                            on Environments Abstraktionen von Ja-        einfacht dargestellt, Java-Projekte, deren
public class Activator implements BundleActivator {
                                                                            va-Laufzeitumgebungen. Diese können          Build-Klassenpfad den deklarierten
                                                                            pro Bundle zur Voraussetzung gemacht         Abhängigkeiten der Bundles entspricht.
    private ServiceTracker helloProviderTracker;
                                                                            werden, wobei das OSGi Framework             Auf diese Weise können Laufzeitfeh-
                                                                            selbst das OSGi/Minimum-1.1 Execu-           ler aufgrund fehlender oder fehlerha
    public void start(final BundleContext context) {
                                                                            tion Environment benötigt. Es gibt zahl-     deklarierter Abhängigkeiten schon zur
        helloProviderTracker = new ServiceTracker(context,
                                                                            reiche OSGi-Implementierungen, so-           Entwicklungszeit vermieden werden.
              IHelloProvider.class.getName(),
                                                                            wohl kommerzielle Produkte als auch              Plug-in-Projekte werden mit ei-
              new ServiceTrackerCustomizer() {

                                                                            kostenlose Open-Source-Lösungen,             nem eigenen New-Wizard angelegt. In
         public Object addingService(final ServiceReference reference) {
                                                                            z.B. Apache Felix [2] oder Knop er sh        unserem Beispiel wird auf der ersten
              final IHelloProvider helloProvider = (IHelloProvider)
                                                                                                                         Wizard-Seite com.weiglewilczek.examp-
                                                                            OSGi [3]. Wir werden für das folgen-
                 context.getService(reference);
                                                                                                                         le.osgi.hello.provider als Projektname
                                                                            dende Beispiel Eclipse Equinox [4] ver-
              System.out.println(helloProvider.sayHello());
                                                                                                                         eingetragen und an OSGi framework mit
                                                                            wenden, weil das Eclipse SDK als Ent-
              return helloProvider;
                                                                                                                         Ausprägung standard selektiert. Auf der
                                                                            wicklungsumgebung mit dem Plug-in
         }
                                                                            Development Environment (PDE) eine           zweiten Wizard-Seite können die Vor-
         public void modifiedService(final ServiceReference reference,
                                                                            hervorragende Werkzeugunterstützung          belegungen mit einer Ausnahme über-
               final Object service) { // Nothing to be done!
                                                                            anbietet, die optimal auf Equinox ab-        nommen werden: Dem vorgeschlagenen
         }
                                                                                                                         Namen für Activator wird ein internal-
                                                                            gestimmt ist, sodass die ersten Schritte
                                                                            besonders einfach sind. Trotzdem wer-        Package-Segment vor dem Klassenna-
         public void removedService(final ServiceReference reference,
                                                                            den wir uns ausschließlich am aktuellen      men eingeschoben. Nach Fertigstellung
               final Object service) { // Nothing to be done!
                                                                            OSGi-Standard orientieren, sodass die        wurde ein neues Projekt angelegt, das im
         }
                                                                                                                         Wesentlichen die Activator-Klasse sowie
                                                                            Beispiele problemlos auf anderen Imple-
        });
        helloProviderTracker.open();
                                                                            mentierungen laufen können.                  das Bundle Manifest (mehr dazu in der
    }
                                                                                                                         kommenden Folge) enthält.
                                                                            „Hello World!“                                   Als Nächstes erstellen wir im Packa-
    public void stop(final BundleContext context) {
                                                                                                                         ge com.weiglewilczek.example.osgi.hello.
                                                                            Das Beispiel (Abb. 4) besteht aus zwei
        if (helloProviderTracker != null) helloProviderTracker.close();
                                                                                                                         provider (diesmal ohne internal) das
                                                                            Bundles: Das eine bietet beim Starten
    }
                                                                                                                         Serviceinterface IHelloProvider mit der
                                                                            unter dem Serviceinterface IHello-
}
                                                                                                                         Methode sayHello():
                                                                            Provider einen Service an, das andere




                        34 javamagazin 12|2008                                                                                                    www.JAXenter.de
OSGi in kleinen Dosen – Teil 1 Core



                                                              Abb. 7:
public interface IHelloProvider {
                                                                 OSGi
    String sayHello();
                                                               Frame-
}                                                            work Run
                                                             Configu-
                                                                ration
Dazu implementieren wir im Package
com.weiglewilczek.example.osgi.hello.
internal.provider (diesmal wieder mit in-
ternal) die Klasse OsgiHelloProvider:

public class OsgiHelloProvider implements
                                          IHelloProvider {
    public String sayHello() {
        return ”Hello world!“;
    }
}



In der Methode Activator.start() erzeu-
gen wir eine Instanz des OsgiHelloPro-
viders und registrieren diese als OSGi
ServiceunterdemServiceinterfaceIHello-
Provider:
                                                                                                          Ausblick
                                                             zu können, müssen diese Abhängigkei-
                                                             ten im Bundle Manifest eingetragen           In dieser ersten Folge haben wir einen
public void start(final BundleContext context) {
                                                             werden. Dazu verwenden wir wieder-           Überblick über OSGi gegeben, die Archi-
    context.registerService(
                                                             um den Manifest-Editor und fügen im          tektur des OSGi Frameworks betrachtet
        IHelloProvider.class.getName(),
                                                             Reiter Dependencies die entsprechen-         und Modularisierung, Laufzeitdynamik
        new OsgiHelloProvider(), null);
}
                                                             den Packages hinzu.                          und Serviceorientierung als wesentliche
                                                                                                          Eigenscha en von OSGi herausgestellt.
                                                             „Hello World!“ in Aktion                     Die nächste Folge steht unter dem Mot-
Abschließend deklarieren wir noch das
                                                                                                          to „Immer in Bewegung – Bundles und
Package, das das Serviceinterface als Be-                    Um dieses Beispiel ablaufen zu lassen,
                                                                                                          Lifecycle“ und beleuchtet im Detail das
standteil der ö entlichen Schnittstelle                      können wir eine weitere hilfreiche
                                                                                                          Modulkonzept und die Laufzeitdyna-
enthält. Dies erfolgt im Bundle Manifest,                    Funktion des PDE nutzen: Es ist nicht
                                                                                                          mik von OSGi.
das wir durch Doppelklick im Package                         nötig, Bundles im korrekten Zielfor-
Explorer mit dem Manifest-Editor – ei-                       mat zu erstellen und in einem OSGi
nem weiteren PDE-Werkzeug – ö nen.                           Framework zu installieren. Vielmehr
                                                                                                                       Heiko Seeberger ist als
Im Reiter Runtime fügen wir das Package                      können Plug-in-Projekte direkt aus der
                                                                                                                       Technical Director für die
com.weiglewilczek.example.osgi.hello.                        Entwicklungsumgebung heraus gestar-                       Weigle Wilczek GmbH
provider zu den Exported Packages hin-                       tet werden. Dazu wird eine Run Con-                       tätig. Sein technischer
                                                             figuration vom Typ OSGi Framework
zu (Abb. 6).                                                                                                           Schwerpunkt liegt in der
                                                                                                                       Entwicklung von Unterneh-
                                                             benötigt. Über das Menü R         |R
                                                                                                           mensanwendungen mit OSGi, Eclipse
Der Consumer                                                 C                  ... gelangen wir in ei-    RCP, Spring, AspectJ und Java EE. Sei-
                                                             nen Dialog, in dem wir eine neue OSGi
Nun erstellen wir das Bundle com.                                                                          ne Erfahrungen aus über zehn Jahren
                                                             Framework Run Con guration anlegen
weiglewilczek.example.osgi.hello.con-                                                                      IT-Beratung und Softwareentwicklung
                                                                                                           fließen in die Eclipse Training Alliance
                                                             (Abb. 7). Dabei ist der Reiter Bundles
sumer. Dazu gehen wir analog zum
                                                                                                           ein. Zudem ist Heiko Seeberger aktiver
                                                             besonders wichtig, denn hier legen wir
Provider vor. Der Consumer enthält                                                                         Committer in Eclipse-Projekten, Autor
mit dem Activator nur eine Klasse. Lis-                      fest, welche Bundles verwendet werden         zahlreicher Fachartikel und Redner auf
                                                             sollen. Die Voreinstellungen bewirken,
ting 1 zeigt, wie wir in dessen Methode                                                                    einschlägigen Konferenzen.
start() einen ServiceTracker (mehr da-                       dass die verwendeten Bundles nicht nur
                                                             installiert, sondern auch gleich gestar-
zu in kommenden Folgen) für obiges
Serviceinterface anlegen. Der Service-                       tet werden, was wir für unser Beispiel         Links & Literatur
TrackerCustomizer ru in der Metho-                           auch benötigen. Wir wählen unsere bei-         [1] www.osgi.org/
de addingService() den vom Provider                          den Beispiel-Bundles und lassen mittels        [2] felix.apache.org/
                                                             Add Required Bundles alle abhängigen
registrierten IHelloService auf und gibt                                                                    [3] www.knopflerfish.org/
                                                             Bundles automatisch ergänzen. Ein
das Ergebnis auf der Konsole aus. Um                                                                        [4] www.eclipse.org/equinox
                                                             Klick auf R lässt uns „Hello World!“
den ServiceTracker und das vom Provi-                                                                       [5] www.eclipse.org/downloads
                                                             in Aktion erleben (Abb. 5).
der angebotene Serviceinterface nutzen



                                                                                                                              javamagazin 12|2008 35
www.JAXenter.de

Weitere ähnliche Inhalte

Ähnlich wie JM 12/08 - OSGi in kleinen Dosen 1

Eclipse Magazin 16 - Die Stärke der Drei
Eclipse Magazin 16 - Die Stärke der DreiEclipse Magazin 16 - Die Stärke der Drei
Eclipse Magazin 16 - Die Stärke der Drei
Heiko Seeberger
 
Server Revolutions- Der Spring Source DM Server
Server Revolutions- Der Spring Source DM ServerServer Revolutions- Der Spring Source DM Server
Server Revolutions- Der Spring Source DM Server
Sandro Sonntag
 
Vorstellung OSGi Users'-Forum Germany
Vorstellung OSGi Users'-Forum GermanyVorstellung OSGi Users'-Forum Germany
Vorstellung OSGi Users'-Forum Germany
Kai Hackbarth
 
Entwickeln und Betreiben eines Cloud Service
Entwickeln und Betreiben  eines Cloud ServiceEntwickeln und Betreiben  eines Cloud Service
Entwickeln und Betreiben eines Cloud Service
SITEFORUM
 
Eclipse Magazin 12 - Security does matter
Eclipse Magazin 12 - Security does matterEclipse Magazin 12 - Security does matter
Eclipse Magazin 12 - Security does matter
Heiko Seeberger
 

Ähnlich wie JM 12/08 - OSGi in kleinen Dosen 1 (20)

Eclipse Magazin 16 - Die Stärke der Drei
Eclipse Magazin 16 - Die Stärke der DreiEclipse Magazin 16 - Die Stärke der Drei
Eclipse Magazin 16 - Die Stärke der Drei
 
Server Revolutions- Der Spring Source DM Server
Server Revolutions- Der Spring Source DM ServerServer Revolutions- Der Spring Source DM Server
Server Revolutions- Der Spring Source DM Server
 
Artikel Professional Computing: Mit SOA zu effizientem Business Process Manag...
Artikel Professional Computing: Mit SOA zu effizientem Business Process Manag...Artikel Professional Computing: Mit SOA zu effizientem Business Process Manag...
Artikel Professional Computing: Mit SOA zu effizientem Business Process Manag...
 
CDI
CDICDI
CDI
 
Vorstellung OSGi Users'-Forum Germany
Vorstellung OSGi Users'-Forum GermanyVorstellung OSGi Users'-Forum Germany
Vorstellung OSGi Users'-Forum Germany
 
Artikel ITReseller: BPO a la Sun Microsystems
Artikel ITReseller: BPO a la Sun MicrosystemsArtikel ITReseller: BPO a la Sun Microsystems
Artikel ITReseller: BPO a la Sun Microsystems
 
Portale 2.0 mit Liferay
Portale 2.0 mit LiferayPortale 2.0 mit Liferay
Portale 2.0 mit Liferay
 
Artikel Schweizer Bank: SOA als Grundlage für «Composite Applications"​
Artikel Schweizer Bank: SOA als Grundlage für «Composite Applications"​Artikel Schweizer Bank: SOA als Grundlage für «Composite Applications"​
Artikel Schweizer Bank: SOA als Grundlage für «Composite Applications"​
 
Prospect MENTIQ SÜSS MicroTec
Prospect MENTIQ SÜSS MicroTecProspect MENTIQ SÜSS MicroTec
Prospect MENTIQ SÜSS MicroTec
 
OSGi: Tools und Entwicklungsprozesse in OSGi Projekten
OSGi: Tools und Entwicklungsprozesse in OSGi ProjektenOSGi: Tools und Entwicklungsprozesse in OSGi Projekten
OSGi: Tools und Entwicklungsprozesse in OSGi Projekten
 
Artikel Netzguide eGovernment: Flexible Infrastruktur dank serviceorientierte...
Artikel Netzguide eGovernment: Flexible Infrastruktur dank serviceorientierte...Artikel Netzguide eGovernment: Flexible Infrastruktur dank serviceorientierte...
Artikel Netzguide eGovernment: Flexible Infrastruktur dank serviceorientierte...
 
Entwickeln und Betreiben eines Cloud Service
Entwickeln und Betreiben  eines Cloud ServiceEntwickeln und Betreiben  eines Cloud Service
Entwickeln und Betreiben eines Cloud Service
 
Artikel eHealthcare Kompendium: Service Orientierte Architekturen für Healthcare
Artikel eHealthcare Kompendium: Service Orientierte Architekturen für HealthcareArtikel eHealthcare Kompendium: Service Orientierte Architekturen für Healthcare
Artikel eHealthcare Kompendium: Service Orientierte Architekturen für Healthcare
 
Zühlke Whitepaper Client Technologien
Zühlke Whitepaper Client TechnologienZühlke Whitepaper Client Technologien
Zühlke Whitepaper Client Technologien
 
//SEIBERT/MEDIA im Magazin DOK: Google Wave - Auf die Euphorie folgt Ernüchte...
//SEIBERT/MEDIA im Magazin DOK: Google Wave - Auf die Euphorie folgt Ernüchte...//SEIBERT/MEDIA im Magazin DOK: Google Wave - Auf die Euphorie folgt Ernüchte...
//SEIBERT/MEDIA im Magazin DOK: Google Wave - Auf die Euphorie folgt Ernüchte...
 
docufied smartINVOICE
docufied smartINVOICEdocufied smartINVOICE
docufied smartINVOICE
 
Einsatzmöglichkeiten von Virtual Private Workspace
Einsatzmöglichkeiten von Virtual Private WorkspaceEinsatzmöglichkeiten von Virtual Private Workspace
Einsatzmöglichkeiten von Virtual Private Workspace
 
Eclipse Magazin 12 - Security does matter
Eclipse Magazin 12 - Security does matterEclipse Magazin 12 - Security does matter
Eclipse Magazin 12 - Security does matter
 
Leistungsvergleich Präsentationsoberflächen für digitale Sammlungen 2013
Leistungsvergleich Präsentationsoberflächen für digitale Sammlungen 2013Leistungsvergleich Präsentationsoberflächen für digitale Sammlungen 2013
Leistungsvergleich Präsentationsoberflächen für digitale Sammlungen 2013
 
Java magazin9 2012_wls 12c_das_dutzend_ist_voll
Java magazin9 2012_wls 12c_das_dutzend_ist_vollJava magazin9 2012_wls 12c_das_dutzend_ist_voll
Java magazin9 2012_wls 12c_das_dutzend_ist_voll
 

Mehr von Heiko Seeberger

Eclipse Magazin 12 - Design by Contract
Eclipse Magazin 12 - Design by ContractEclipse Magazin 12 - Design by Contract
Eclipse Magazin 12 - Design by Contract
Heiko Seeberger
 
EclipseCon 08 - Agile RCP
EclipseCon 08 - Agile RCPEclipseCon 08 - Agile RCP
EclipseCon 08 - Agile RCP
Heiko Seeberger
 
W-JAX 07 - AOP im Einsatz mit OSGi und RCP
W-JAX 07 - AOP im Einsatz mit OSGi und RCPW-JAX 07 - AOP im Einsatz mit OSGi und RCP
W-JAX 07 - AOP im Einsatz mit OSGi und RCP
Heiko Seeberger
 

Mehr von Heiko Seeberger (20)

Scaladays 2011 - The Ease of Scalaz
Scaladays 2011 - The Ease of ScalazScaladays 2011 - The Ease of Scalaz
Scaladays 2011 - The Ease of Scalaz
 
Java Magazin - Lift
Java Magazin - LiftJava Magazin - Lift
Java Magazin - Lift
 
JavaSPEKTRUM - Scala 3
JavaSPEKTRUM - Scala 3JavaSPEKTRUM - Scala 3
JavaSPEKTRUM - Scala 3
 
JavaSPEKTRUM - Scala 2
JavaSPEKTRUM - Scala 2JavaSPEKTRUM - Scala 2
JavaSPEKTRUM - Scala 2
 
JavaSPEKTRUM - Scala 1
JavaSPEKTRUM - Scala 1JavaSPEKTRUM - Scala 1
JavaSPEKTRUM - Scala 1
 
RheinJUG 2010 - Sprechen Sie Scala?
RheinJUG 2010 - Sprechen Sie Scala?RheinJUG 2010 - Sprechen Sie Scala?
RheinJUG 2010 - Sprechen Sie Scala?
 
Objektforum 2010 - Sprechen Sie Scala?
Objektforum 2010 - Sprechen Sie Scala?Objektforum 2010 - Sprechen Sie Scala?
Objektforum 2010 - Sprechen Sie Scala?
 
W-JAX 09 - ScalaModules
W-JAX 09 - ScalaModulesW-JAX 09 - ScalaModules
W-JAX 09 - ScalaModules
 
W-JAX 09 - Lift
W-JAX 09 - LiftW-JAX 09 - Lift
W-JAX 09 - Lift
 
JM 08/09 - Beginning Scala Review
JM 08/09 - Beginning Scala ReviewJM 08/09 - Beginning Scala Review
JM 08/09 - Beginning Scala Review
 
JM 08/09 - ScalaModules
JM 08/09 - ScalaModulesJM 08/09 - ScalaModules
JM 08/09 - ScalaModules
 
OSGi DevCon Europe 09 - OSGi on Scala
OSGi DevCon Europe 09 - OSGi on ScalaOSGi DevCon Europe 09 - OSGi on Scala
OSGi DevCon Europe 09 - OSGi on Scala
 
JAX 09 - OSGi on Scala
JAX 09 - OSGi on ScalaJAX 09 - OSGi on Scala
JAX 09 - OSGi on Scala
 
JAX 09 - OSGi Service Components Models
JAX 09 - OSGi Service Components ModelsJAX 09 - OSGi Service Components Models
JAX 09 - OSGi Service Components Models
 
JAX 08 - Agile RCP
JAX 08 - Agile RCPJAX 08 - Agile RCP
JAX 08 - Agile RCP
 
Eclipse Magazin 12 - Design by Contract
Eclipse Magazin 12 - Design by ContractEclipse Magazin 12 - Design by Contract
Eclipse Magazin 12 - Design by Contract
 
JUGM 07 - AspectJ
JUGM 07 - AspectJJUGM 07 - AspectJ
JUGM 07 - AspectJ
 
EclipseCon 08 - Agile RCP
EclipseCon 08 - Agile RCPEclipseCon 08 - Agile RCP
EclipseCon 08 - Agile RCP
 
W-JAX 07 - AOP im Einsatz mit OSGi und RCP
W-JAX 07 - AOP im Einsatz mit OSGi und RCPW-JAX 07 - AOP im Einsatz mit OSGi und RCP
W-JAX 07 - AOP im Einsatz mit OSGi und RCP
 
W-JAX 08 - Declarative Services versus Spring Dynamic Modules
W-JAX 08 - Declarative Services versus Spring Dynamic ModulesW-JAX 08 - Declarative Services versus Spring Dynamic Modules
W-JAX 08 - Declarative Services versus Spring Dynamic Modules
 

JM 12/08 - OSGi in kleinen Dosen 1

  • 1. Core OSGi in kleinen Dosen – Teil 1 Erste Schritte mit OSGi Die OSGi Service Platform (OSGi) hat sich zu einem sehr bedeutenden Standard im Java-Umfeld entwickelt. Also wird es für den engagierten Java-Entwickler allerhöchste Zeit, sich damit näher auseinanderzusetzen. von Heiko Seeberger bestehen. Wer meint, Modularisierung zahlreiche namha e Unternehmen sind, SGi prägt schon heute vielerorts sei auch organisatorisch zu erzielen, z.B. die sich 1999 zu diesem Zweck in einer die Java-Welt und schickt sich durch mehrere Projekte oder durch den internationalen Organisation zusam- an, zu einer universellen Ba- Einsatz von komponentenorientierten menfanden, der OSGi Alliance [1]. OSGi sistechnologie zu werden. So mancher Build-Systemen wie Maven, der betrach- stand ursprünglich als Abkürzung für Leser wird diesem bereits seit 2000 exis- tet nur die halbe Wahrheit. OSGi hinge- „Open Service Gateway Initiative“, heute tierenden Standard vermutlich erstmalig gen adressiert nicht nur den Zeitraum steht der Begri für sich bzw. als Teil von in Form des Eclipse SDK oder der Eclipse der Entwicklung, sondern insbesondere OSGi Service Platform, Titel der aktuellen Rich Client Platform begegnet sein, da die auch das Laufzeitverhalten: Es wird spe- Spezi kation (Version 4.1). Eclipse-Plug-in-Architektur seit Version zi ziert, wie Module im laufenden Be- 3.0 auf OSGi basiert. Damit hat Eclipse Ein dynamisches und service- trieb unter Berücksichtigung ihrer Ab- zweifelsohne einen bedeutenden Anteil orientiertes Modulsystem hängigkeiten installiert, aktualisiert und an der aktuellen Popularität dieser Tech- entfernt werden können. Gerade diese nologie, die jedoch viel mehr zu bieten hat Warum ist OSGi eigentlich so erfolg- Dynamik macht OSGi für serverseitige als ein „Modulsystem für Rich Clients“. reich? Welchen Eigenscha en ist es zu bzw. hochverfügbare Systeme interes- verdanken, dass OSGi aus der Java-Welt Ein Blick zurück sant, da Hot Deployment im Standard kaum mehr wegzudenken ist? Die OSGi inklusive ist. Ursprünglich wurde OSGi nicht mit Blick Alliance de niert OSGi als dynamisches Die dritte wesentliche Eigenschaft auf Rich Clients oder gar Server, sondern Modulsystem für Java. Damit werden von OSGi ist ein serviceorientiertes für so genannte Residential Internet Gate- zwei der drei aus unserer Sicht entschei- Programmiermodell: Module können ways – Systeme aus der Gebäudetechnik denden Merkmale aufgeführt: Modula- Objekte als Services bereitstellen, indem – konzipiert. Derartige Systeme erfordern risierung und Dynamik. sie diese an der OSGi Service Registry re- üblicherweise Fernmanagement sowie Modularisierung ist ein „altes Haus- gistrieren. Andere Module können diese Installation von Komponenten im lau- mittel“ – nicht nur in der Informatik –, Services abrufen und so untereinander fenden Betrieb. Mit diesen Anforderun- um komplexe Probleme zu lösen. kommunizieren. Dies führt zu einer lo- gen im Fokus entstand die erste Version Schließlich lassen sich überschaubare sen Kopplung der beteiligten Module. der OSGi-Spezi kation, deren Urheber Häppchen leichter verdauen als das gro- ße Ganze. Die Objektorientierung im Allgemeinen und Java im Speziellen bie- Artikelserie: ten bereits Möglichkeiten zur Modulari- OSGi in kleinen Dosen sierung, z.B. in Form von Klassen, Pake- ten, Sichtbarkeitsregeln etc. Allerdings Teil 1: Erste Schritte mit OSGi Teil 2: Immer in Bewegung – hat sich in der Praxis herausgestellt, dass Bundles und Lifecycle Java ein Modulkonzept „oberhalb“ von Teil 3: Was wünschen Sie? – Packages vermissen lässt. OSGi schließt Services à la OSGi diese Lücke, sodass anstelle der sonst o Teil 4: Alles XML oder was? – Ser- anzutre enden monolithischen Syste- vices auf deklarative Weise Teil 5: Hier wird „Service“ groß ge me solche treten, die aus verschiedenen schrieben — Ausgewählte Modulen mit wohlde nierten ö entli- OSGi-Standardservices chen Schnittstellen und Abhängigkeiten Abb. 1: Herausragende OSGi-Eigenschaften 32 javamagazin 12|2008 www.JAXenter.de
  • 2. OSGi in kleinen Dosen – Teil 1 Core definiert im Wesentlichen das OSGi Jede dieser drei Eigenscha en, Mo- Framework sowie die OSGi Standard dularisierung, Laufzeitdynamik und Services. Das OSGi Framework bzw. Serviceorientierung, ist an sich nichts eine Implementierung dessen stellt die Neues, aber OSGi verbindet diese syn- Laufzeitumgebung für So ware auf Ba- ergetisch, sodass sich die folgenden Nut- sis von OSGi dar. Die Standardservices, zenpotenziale ergeben (Abb. 1): z.B. Log Service oder Http Service, stan- Abb. 2: OSGi-System dardisieren die Lösung typischer Prob- Erhöhte Flexibilität durch rigorose lemstellungen und können in eigenen Trennung von API und Implementie- Systemen genutzt werden. rung Einsparung von Entwicklungskosten Das OSGi Framework durch Wiederverwendung von Mo- dulen Um gleich im OSGi-Jargon sprechen zu Einsparung von Betriebskosten durch können, führen wir zunächst einen zen- standardisiertes Lifecycle Manage- tralen Begri ein: Ein OSGi-Modul wird Abb. 3: Schichtenarchitektur des OSGi ment, z.B. Hot Deployment oder par- Bundle genannt. Somit bestehen Syste- Frameworks allelen Betrieb mehrerer Modulversi- me auf Basis von OSGi aus Bundles, für onen die das OSGi Framework die Laufzeit- umgebung darstellt (Abb. 2). Die Funk- Hohe Qualitätseffizienz durch gute tionalität des OSGi Frameworks ist auf Testbarkeit aufgrund von loser Kopp- mehrere Schichten verteilt, die in Abbil- lung dung 3 orange dargestellt sind. Nutzung neuer Möglichkeiten, z.B. in Der Module Layer definiert die der So wareverteilung Abb. 4: „Hello World!“-Architektur strukturellen Aspekte rund um Bundles, d.h. die statische Sicht auf das OSGi-Mo- Doch wie unterstützt OSGi die beschrie- dulkonzept. Bundles sind JAR-Archive zuheben ist, dass im Bundle Manifest benen Eigenscha en? Dazu werfen wir und enthalten neben Klassen und Res- die Abhängigkeiten und das API, d.h. zunächst einen Blick auf die Gesamtar- sourcen mit dem Bundle Manifest eine die ö entliche Schnittstelle, explizit de- chitektur. Die vorzügliche OSGi-Spezi- Datei, die die OSGi-Eigenscha en des klariert werden. Das OSGi Framework kation, die in Form von Core Speci ca- Bundles beschreibt. Besonders hervor- stellt sicher, dass andere Bundles nur auf tion und Service Compendium vorliegt, Anzeige Java-184x115.indd 1 17.10.2008 15:54:09 Uhr
  • 3. Core OSGi in kleinen Dosen – Teil 1 sodass Bundles in bestimmten Phasen ihres Lebenszyklus Objekte als Services an der OSGi Service Registry anmelden oder abrufen können. Dabei wird das Serviceinterface, das vom Service imple- Abb. 5: „Hello World!“-Ergebnis mentiert wird, als Schlüssel verwendet. Abb. 6: Deklaration der öffentlichen Besonderes Augenmerk muss hierbei Schnittstelle der Laufzeitdynamik gewidmet werden: das API eines Bundles zugreifen kön- Schließlich können die Bundles, die nen, und das auch nur dann, wenn sie „lauscht“, sobald es gestartet wurde, auf Services anbieten, jederzeit „kommen selbst entsprechende Abhängigkeiten solche Services, um diese aufzurufen und gehen“, womit Servicekonsumenten deklarieren. und das Ergebnis „Hello World!“ auf der umgehen können müssen. Daher bietet Der Lifecycle Layer bringt die dy- Konsole auszugeben (Abb. 5). OSGi Mechanismen, um den Service namische Sicht ins Spiel, indem er den Für dieses Beispiel wird Java 5 und Lifecycle zu verfolgen, z.B. den im „Hello Lebenszyklus von Bundles im OSGi Eclipse SDK Ganymede mit PDE benö- World!“-Beispiel verwendeten Service- Framework de niert. So können Bund- tigt, z.B. das Package Eclipse for RCP/ Tracker. les beispielsweise zur Laufzeit installiert Plug-in Developers [5]. Um Nebene ek- Daneben stellt der Security Layer auf und wieder deinstalliert werden. Weiter- te zu vermeiden, sollte ein neuer Work- Basis von Java 2 Security spezi sche Si- hin können Bundles auch gestartet und space verwendet werden. cherheitsbelange zur Verfügung. Neben gestoppt werden, woraufhin in einem Der Provider speziellen Objekt, dem BundleActivator, dem Signieren von Bundles spielen dar- entsprechende start()- und stop()-Me- Zunächst erstellen wir das Bundle com. in für OSGi spezi sche Permissions eine weiglewilczek.example.osgi.hello.pro- zentrale Rolle. So kann z.B. festgelegt thoden aufgerufen werden. vider. Wir werden in der kommenden werden, ob ein Bundle berechtigt wird, Der Service Layer fügt ein service- bestimmte Services zu verwenden oder orientiertes Programmiermodell hinzu, Folge auf übliche Namenskonventionen das API anderer Bundles zu nutzen. eingehen. PDE unterstützt die Entwick- Unterhalb der Framework-Schich- lung von OSGi Bundles unter anderem Listing 1 ten de niert OSGi in Form von Executi- durch Plug-in-Projekte. Diese sind, ver- on Environments Abstraktionen von Ja- einfacht dargestellt, Java-Projekte, deren public class Activator implements BundleActivator { va-Laufzeitumgebungen. Diese können Build-Klassenpfad den deklarierten pro Bundle zur Voraussetzung gemacht Abhängigkeiten der Bundles entspricht. private ServiceTracker helloProviderTracker; werden, wobei das OSGi Framework Auf diese Weise können Laufzeitfeh- selbst das OSGi/Minimum-1.1 Execu- ler aufgrund fehlender oder fehlerha public void start(final BundleContext context) { tion Environment benötigt. Es gibt zahl- deklarierter Abhängigkeiten schon zur helloProviderTracker = new ServiceTracker(context, reiche OSGi-Implementierungen, so- Entwicklungszeit vermieden werden. IHelloProvider.class.getName(), wohl kommerzielle Produkte als auch Plug-in-Projekte werden mit ei- new ServiceTrackerCustomizer() { kostenlose Open-Source-Lösungen, nem eigenen New-Wizard angelegt. In public Object addingService(final ServiceReference reference) { z.B. Apache Felix [2] oder Knop er sh unserem Beispiel wird auf der ersten final IHelloProvider helloProvider = (IHelloProvider) Wizard-Seite com.weiglewilczek.examp- OSGi [3]. Wir werden für das folgen- context.getService(reference); le.osgi.hello.provider als Projektname dende Beispiel Eclipse Equinox [4] ver- System.out.println(helloProvider.sayHello()); eingetragen und an OSGi framework mit wenden, weil das Eclipse SDK als Ent- return helloProvider; Ausprägung standard selektiert. Auf der wicklungsumgebung mit dem Plug-in } Development Environment (PDE) eine zweiten Wizard-Seite können die Vor- public void modifiedService(final ServiceReference reference, hervorragende Werkzeugunterstützung belegungen mit einer Ausnahme über- final Object service) { // Nothing to be done! anbietet, die optimal auf Equinox ab- nommen werden: Dem vorgeschlagenen } Namen für Activator wird ein internal- gestimmt ist, sodass die ersten Schritte besonders einfach sind. Trotzdem wer- Package-Segment vor dem Klassenna- public void removedService(final ServiceReference reference, den wir uns ausschließlich am aktuellen men eingeschoben. Nach Fertigstellung final Object service) { // Nothing to be done! OSGi-Standard orientieren, sodass die wurde ein neues Projekt angelegt, das im } Wesentlichen die Activator-Klasse sowie Beispiele problemlos auf anderen Imple- }); helloProviderTracker.open(); mentierungen laufen können. das Bundle Manifest (mehr dazu in der } kommenden Folge) enthält. „Hello World!“ Als Nächstes erstellen wir im Packa- public void stop(final BundleContext context) { ge com.weiglewilczek.example.osgi.hello. Das Beispiel (Abb. 4) besteht aus zwei if (helloProviderTracker != null) helloProviderTracker.close(); provider (diesmal ohne internal) das Bundles: Das eine bietet beim Starten } Serviceinterface IHelloProvider mit der unter dem Serviceinterface IHello- } Methode sayHello(): Provider einen Service an, das andere 34 javamagazin 12|2008 www.JAXenter.de
  • 4. OSGi in kleinen Dosen – Teil 1 Core Abb. 7: public interface IHelloProvider { OSGi String sayHello(); Frame- } work Run Configu- ration Dazu implementieren wir im Package com.weiglewilczek.example.osgi.hello. internal.provider (diesmal wieder mit in- ternal) die Klasse OsgiHelloProvider: public class OsgiHelloProvider implements IHelloProvider { public String sayHello() { return ”Hello world!“; } } In der Methode Activator.start() erzeu- gen wir eine Instanz des OsgiHelloPro- viders und registrieren diese als OSGi ServiceunterdemServiceinterfaceIHello- Provider: Ausblick zu können, müssen diese Abhängigkei- ten im Bundle Manifest eingetragen In dieser ersten Folge haben wir einen public void start(final BundleContext context) { werden. Dazu verwenden wir wieder- Überblick über OSGi gegeben, die Archi- context.registerService( um den Manifest-Editor und fügen im tektur des OSGi Frameworks betrachtet IHelloProvider.class.getName(), Reiter Dependencies die entsprechen- und Modularisierung, Laufzeitdynamik new OsgiHelloProvider(), null); } den Packages hinzu. und Serviceorientierung als wesentliche Eigenscha en von OSGi herausgestellt. „Hello World!“ in Aktion Die nächste Folge steht unter dem Mot- Abschließend deklarieren wir noch das to „Immer in Bewegung – Bundles und Package, das das Serviceinterface als Be- Um dieses Beispiel ablaufen zu lassen, Lifecycle“ und beleuchtet im Detail das standteil der ö entlichen Schnittstelle können wir eine weitere hilfreiche Modulkonzept und die Laufzeitdyna- enthält. Dies erfolgt im Bundle Manifest, Funktion des PDE nutzen: Es ist nicht mik von OSGi. das wir durch Doppelklick im Package nötig, Bundles im korrekten Zielfor- Explorer mit dem Manifest-Editor – ei- mat zu erstellen und in einem OSGi nem weiteren PDE-Werkzeug – ö nen. Framework zu installieren. Vielmehr Heiko Seeberger ist als Im Reiter Runtime fügen wir das Package können Plug-in-Projekte direkt aus der Technical Director für die com.weiglewilczek.example.osgi.hello. Entwicklungsumgebung heraus gestar- Weigle Wilczek GmbH provider zu den Exported Packages hin- tet werden. Dazu wird eine Run Con- tätig. Sein technischer figuration vom Typ OSGi Framework zu (Abb. 6). Schwerpunkt liegt in der Entwicklung von Unterneh- benötigt. Über das Menü R |R mensanwendungen mit OSGi, Eclipse Der Consumer C ... gelangen wir in ei- RCP, Spring, AspectJ und Java EE. Sei- nen Dialog, in dem wir eine neue OSGi Nun erstellen wir das Bundle com. ne Erfahrungen aus über zehn Jahren Framework Run Con guration anlegen weiglewilczek.example.osgi.hello.con- IT-Beratung und Softwareentwicklung fließen in die Eclipse Training Alliance (Abb. 7). Dabei ist der Reiter Bundles sumer. Dazu gehen wir analog zum ein. Zudem ist Heiko Seeberger aktiver besonders wichtig, denn hier legen wir Provider vor. Der Consumer enthält Committer in Eclipse-Projekten, Autor mit dem Activator nur eine Klasse. Lis- fest, welche Bundles verwendet werden zahlreicher Fachartikel und Redner auf sollen. Die Voreinstellungen bewirken, ting 1 zeigt, wie wir in dessen Methode einschlägigen Konferenzen. start() einen ServiceTracker (mehr da- dass die verwendeten Bundles nicht nur installiert, sondern auch gleich gestar- zu in kommenden Folgen) für obiges Serviceinterface anlegen. Der Service- tet werden, was wir für unser Beispiel Links & Literatur TrackerCustomizer ru in der Metho- auch benötigen. Wir wählen unsere bei- [1] www.osgi.org/ de addingService() den vom Provider den Beispiel-Bundles und lassen mittels [2] felix.apache.org/ Add Required Bundles alle abhängigen registrierten IHelloService auf und gibt [3] www.knopflerfish.org/ Bundles automatisch ergänzen. Ein das Ergebnis auf der Konsole aus. Um [4] www.eclipse.org/equinox Klick auf R lässt uns „Hello World!“ den ServiceTracker und das vom Provi- [5] www.eclipse.org/downloads in Aktion erleben (Abb. 5). der angebotene Serviceinterface nutzen javamagazin 12|2008 35 www.JAXenter.de