W-JAX 08 - Declarative Services versus Spring Dynamic Modules
Eclipse Magazin 16 - Die Stärke der Drei
1. Rich Clients Spring, OSGi und RCP
Spring trifft auf OSGi und RCP
Quellcode
Die Stärke der Drei
auf CD!
>> alexander thurow und heiko seeberger
Funktionalitäten und -Komponenten
Mit dem Zusammenrücken von Spring und OSGi durch Spring Dynamic zur Verfügung (z.B. Views, Perspektiven,
MVC-Konstrukte, Updatemechanis-
Modules (DM) ergeben sich neue und vielversprechende Möglichkeiten
mus). Über diese Framework-Vorgaben
für die Eclipse-RCP-Entwicklung. Im Kern definiert Spring DM dabei eine hinaus stellt sich aber die Frage nach
einem einheitlichen Strukturierungskon-
einfach zu nutzende Integrationsschicht für die Framework-Welten von
zept für die fachlichen Komponenten der
Spring und OSGi. Aufsetzend auf dieser Schicht kann der Entwickler zu erstellenden Anwendung. Wie struktu-
zukünftig mit deutlich weniger Aufwand flexible RCP-Applikationsarchi- riere ich meine Domänenlogik am über-
sichtlichsten und effizientesten?
tekturen erstellen.
Strukturierung von Domänenlogik:
Spring und OSGi
In den vergangenen Jahren lautete die
D OSGi als Basis des Eclipse-Modularisie-
ie mit dem Eclipse-3.0-Release einge- Antwort auf die Frage nach der Ordnung
rungskonzepts ausgewählt zu haben [2].
führte Eclipse Rich Client Platform in der eigenen Java-Applikation immer
Die in OSGi abgebildeten Komponenten
(RCP) hat sich seit ihrer Veröffentlichung häufiger „Spring“. Das Spring Frame-
der Bundles (Java-Archive mit jeweils
im Jahre 2004 als eine leistungsfähige work [3] mit seinem leichtgewichtigen
eigenem Classloader und OSGi-spezi-
Plattform für die Entwicklung von Java- Applikationscontainer, auf Basis der
fischen MANIFEST.MF-Einträgen) sind
basierten Rich Clients erwiesen [1]. Die Konzepte Dependency Injection [4] und
technische Basis für die als Plug-ins be-
Kombination aus modularem Aufbau, AOP [5], liefert dabei einen Strukturie-
zeichneten Komponenten, aus denen sich
flexibler Erweiterbarkeit und aktiver rungsansatz für POJOs, der sich komfor-
jede RCP-Applikation zusammensetzt.
Open Source Community trug dabei tabel in eigenen Applikationen nutzen
Bei der herkömmlichen Eclipse-RCP-
maßgeblich zu diesem Erfolg bei. Zwei lässt. Interessant ist dabei insbesondere,
Entwicklung steht dem Programmierer
dieser Erfolgsfaktoren lassen sich heu- dass sich diese Aussage nicht nur für neu
bereits eine breite Palette an Framework-
te auf die Entscheidung zurückführen, entwickelte Applikationen treffen lässt,
74 eclipse magazin Vol. 16 www.eclipse-magazin.de
2. Rich Clients
Spring, OSGi und RCP
Abb. 1: Benutzerin-
sondern auch für bestehende Altapplika-
terface des Spring-
tionen. DM-basierten Rich
Neben Spring lässt sich mittlerweile Clients
ein neuer Trend hin zur OSGi-basierten
Modularisierung von Applikationslogik
identifizieren. Diese Entwicklung wird
unmittelbar verständlich, wenn man
das von OSGi definierte Komponen-
tenmodell der Bundles betrachtet. Im
Kern ermöglicht dieses Modell eine lose
gekoppelte Applikationsarchitektur, in
der einzelne Komponenten zur Laufzeit
austauschbar/aktualisierbar sind sowie
verschiedene Versionen einer Kompo-
nente parallel betrieben werden kön-
den Entwickler deutlich leichter, trans-
nen. In Kombination mit der von OSGi von Spring und OSGi schon deutlich nä-
parenter und – wenn man so will – auch
definierten Servicearchitektur können her zusammengerückt. Ab dieser Version
eleganter.
leistungsfähige und flexible Applika- sind alle mit Spring ausgelieferten JAR-
tionsarchitekturen realisiert werden. Dateien gleichzeitig OSGi Bundles und
Technische Realisierung von Spring DM
Neuerdings hält OSGi mit diesem Leis- somit unmittelbar in OSGi-Ablaufumge-
tungsspektrum auch im Bereich der Ap- bungen installierbar und nutzbar. Diese Realisiert wird die Integration über eini-
pliktionsserverarchitekturen auf breiter komfortable Neuerung ist möglich, da ge, mit der eigenen Applikation zusätz-
Front Einzug (derzeit: IBM WebSphere sich klassische JAR-Dateien und OSGi- lich auszuliefernde Bundles. Werden die
6.x, JOnAS 5.x; in Zukunft: Sun Glass- Bundles nur durch zusätzliche Einträge in Spring DM Bundles zur Laufzeit vom
Fish, JBoss AS und BEA WebLogic). der MANIFEST.MF-Konfigurationsdatei OSGi-Container gefunden und gestartet,
Im konkreten Anwendungskontext unterscheiden, die jede JAR-Datei enthält.
der clientseitigen RCP-Entwicklung ist Zum anderen stellt Spring nun mit
Listing 1
OSGi hingegen ein alter Bekannter. Bei Spring Dynamic Modules eine Techno-
Start des Spring DM-basierten OSGi-Serverprozesses
der Entwicklung von RCP ist von vorn- logie zur Verfügung, die eine Integrati-
INFO: Discovered configurations {osgibundle:/
herein konsequent auf OSGi gesetzt wor- onsschicht zwischen Spring und OSGi
META-INF/spring/*.xml} in bundle [Rmi Publisher
den: Jedes Eclipse-Plug-in ist gleichzeitig definiert [7]. Die an die Ablaufumgebung
Plug-in (com.weiglewilczek.springosgi.
ein OSGi-Bundle. Bei der Modularisie- gestellten Anforderungen sind (vorzugs-
service.publisher.rmi)]
rung einer zu erstellenden RCP-Applika- weise) Spring 2.5, eine Java-VM >= 1.4 …
tion kann demnach out-of-the-box auf sowie eine OSGi-R4-Implementierung INFO: Binding service ’MyRmiPublishedService‘ to RMI
das volle Leistungsspektrum von OSGi (z.B. Equinox 3.x, Apache Felix 1.x, registry: RegistryImpl[UnicastServerRef [liveRef:
zugegriffen werden. Schaut man genauer Knopflerfish 2.x). Die Vorteile, die für [endpoint:[192.168.1.201:1199](local),objID:
hin, so lässt sich sogar feststellen, dass die den RCP-Entwickler mit Spring DM [0:0:0, 0]]]]
RCP zugrunde liegende OSGi-Implemen- einhergehen, lassen sich wie folgt zusam-
osgi> ss
tierung Eclipse Equinox die Referenz- menfassen:
implementierung der OSGi-R4-Spezifi- Framework is launched.
kation ist [6]. Während OSGi also über • Standardisiertes Vorgehen für die De-
Id State Bundle
die Integration in das Framework unmit- finition von Spring-Kontexten pro
0 ACTIVE org.eclipse.osgi_3.4.0.v20080605-1900
telbar im Zugriff des RCP-Entwicklers Bundle
1 ACTIVE org.springframework.bundle.osgi.
liegt, hat sich der Sachverhalt im Bereich • Automatisches Erkennen von Spring-
extender_1.1.0
von Spring bisher deutlich anders darge- Kontextdefinitionen pro Bundle
2 ACTIVE com.weiglewilczek.springosgi.service.
stellt: Jede Nutzung von Spring musste • Deklarativer Export von Bundle-loka- publisher.rmi_1.0.0
ohne Framework-Unterstützung voll- len Spring Beans als OSGi-Services und 3 ACTIVE com.weiglewilczek.springosgi.service.
ständig „zu Fuß“ realisiert werden. Kon- dadurch Bundle-externe Zugriffsmög- implementation_1.0.0
kret bedeutete das, dass der Entwickler lichkeiten 4 ACTIVE org.apache.commons.logging_1.0.4.
seine Spring-Anbindung mithilfe von • Integration von Spring-Kontext- und v20080605-1930
klassischem „Boilerplate-Code“ selbst OSGi-Lebenszyklus 5 ACTIVE org.springframework.bundle.osgi.core_1.1.0
realisieren musste. Mit Spring DM än- • Deutlich weniger „Boilerplate-Code“ 6 ACTIVE org.eclipse.equinox.common_3.4.0.
dert sich dieser Sachverhalt nun grund- v20080421-2006
7 ACTIVE org.springframework.bundle.osgi.io_1.1.0
legend. Im Klartext bedeutet dies nichts anderes,
8 ACTIVE org.springframework.bundle.spring_2.5.5
als dass Spring DM dem OSGi-Entwick-
Spring Dynamic Modules: RCP, OSGi 9 ACTIVE com.weiglewilczek.springosgi.service.
ler ein standardisiertes Modell für die
und Spring interface_1.0.0
Nutzung von Spring an die Hand gibt.
Die Verwendung von Spring in OSGi-
Zum einen sind mit der Veröffentlichung osgi>
basierten Applikationen wird damit für
von Spring 2.5 die Framework-Welten
75
www.eclipse-magazin.de eclipse magazin Vol. 16
3. Rich Clients Spring, OSGi und RCP
Abb. 2: kömmlicher Standalone Rich Client oder
OSGi Bundles der erstell-
als Client/Serveranwendung betrieben
ten Lösung
werden kann. Im Fall des Standalone-
Betriebs wird dabei der zu rufende OSGi-
Service als Plug-in mit ausgeliefert und lo-
kal aufgerufen, während dieser bei Client/
Serverkonfiguration remote über RMI in
einem OSGi-Serverprozess gerufen wird
(Abb. 1, Listing 1).
Um die abgebildete Architektur zu
realisieren wurden fünf OSGi-Bundles
erstellt:
trum durch eine Integration der OSGi-
sorgen sie dafür, dass in OSGi-Bundles
• Bundle für das Interface des OSGi-Ser-
und Spring-Kontextlebenszyklen. Als
hinterlegte XML-Spring-Kontexte ge-
vice (...interface)
Resultat erhält man dann, Spring DM
laden werden. Somit kann jedes Bundle
• Bundle für die Implementierung des
sei dank, eine vorwiegend über Spring-
über einen eigenen Spring-Kontext ver-
OSGi-Service (…implementation)
XML-Kontextdefinitionen konfigu-
fügen, der die Erzeugung und Konfigu-
• Bundle zum Exportieren des OSGi-
rierte Applikation und erspart sich eine
ration der Objekte – im Spring-Jargon
Service in eine RMI-Registry (...publis-
erhebliche Menge an Boilerplate-Code.
„Beans“ genannt – innerhalb des Bundles
Im folgenden Anwendungsbeispiel wer-
übernimmt. Wirklich interessant wird her.rmi)
• Bundle für den Zugriff auf den über
den RCP und Spring DM kombiniert, um
es dann aber mit Spring DMs Möglich-
RMI remote zugreifbaren Service
die Vorteile der auf dieser Basis möglich
keiten zum deklarativen Export von
(…accessor.rmi)
werdenden Anwendungsentwicklung
Bundle-lokal verwalteten Spring Beans.
• RCP-Plug-in für die Clientapplikation
herauszuarbeiten.
Über Einträge in den Spring-Kontextde-
(…client)
finitionen können Beans in die OSGi Ser-
Das Anwendungsbeispiel
vice Registry exportiert, respektive aus
Für den Betrieb der Spring-DM-Appli-
dieser importiert werden. Für den Im- Als Beispielapplikation dient eine ein-
kation selbst sind sieben weitere Bundles
und Export definiert Spring DM einen fache RCP-Anwendung, mit der der Be-
nötig, die die Funktionalität von Spring
zusätzlichen XML Namespace. Abge- nutzer einen OSGi-Service aufrufen kann.
DM implementieren, eine Logging-
rundet wird Spring DMs Feature-Spek- OSGi-Services sind ein Basisleistungs-
Implementierung mitbringen sowie ei-
merkmal von OSGi, das es dem Program-
ne OSGi-Implementierung beisteuern
mierer erlaubt, Java-Objekte in einer
Listing 2
(Abb. 2).
zentral zugreifbaren Service Registry
Serviceimplementierung
Was die eigentliche Serviceimple-
anzumelden. Das anzumeldende Objekt
package com.weiglewilczek.springosgi.service.
mentierung anbelangt, so ist die Logik
kann dabei wahlweise unter Angabe des
internal;
für dieses Beispiel trivial. Das Interface
Namens seines/seiner Interface(s) und/
des Service enthält nur eine Methode für
oder dem Namen seiner Implementati-
import com.weiglewilczek.springosgi.service.
die Addition zweiter int-Werte. Die Ser-
onsklasse in der Service Registry abgelegt
MyService;
viceimplementierung ist daher nahelie-
werden. Serviceclients können dann unter
gend (Listing 2).
Angabe eines solchen Namens (und opti-
public class MyServiceImpl implements MyService {
Anzumerken ist in diesem Zusam-
onal einigen zusätzlichen Kriterien) eine
menhang lediglich, dass Interface und
Referenz auf den angemeldeten Service
public int add(int a, int b) {
Implementierung in zwei separaten
erlangen. Um das Leistungsspektrum von
return a + b;
Bundles abgelegt sind. Dieses Vorgehen
Spring DM in diesem Zusammenhang
}
} hat sich bei der Realisierung von OSGi-
zu verdeutlichen, wurde die Applikation
Services als Best Practice erwiesen, da
so strukturiert, dass sie entweder als her-
Abb. 3: Kontextdefiniti-
on im implementation-
Bundle
76 eclipse magazin Vol. 16 www.eclipse-magazin.de
4. Spring, OSGi und RCP
nur so das Bundle mit dem Interface für Referenzierung des Service betrachtet.
den Zugriff auf einen registrierten Ser- OSGi-Entwickler müssen aufgrund der
vice benötigt wird. Bundles, die Imple- dynamischen Umgebung von OSGi da-
mentierungen des Interface als Service bei etliches in Betracht ziehen – so kön-
publizieren, werden dadurch für den Cli- nen Bundles zum Beispiel zu beliebigen
ent nachrangig und transparent. Zeitpunkten aktiv oder inaktiv werden,
aktualisiert oder sogar deinstalliert wer-
Serviceregistrierung und den. Obwohl das Framework eine API
-referenzierung mit Spring DM definiert, die einiges an Komplexität ver-
birgt (Stichwort: ServiceTracker), ent-
Interessant wird es nun aber, wenn man
steht bei der Arbeit mit OSGi-Services
die Registrierung und anschließende
Unter der Haube
Der eine oder andere Leser wird sich fragen: Spring-Kontext auf Basis der Bundle-lokalen
Wozu eigentlich Spring DM? Warum nicht Spring-Konfigurationsdatei(en) erzeugt. Auf
Spring in RCP-Applikationen „ganz normal“ diese Weise wird das OSGi-Konzept der Mo-
verwenden? Die Antwort darauf lautet: OSGi dularisierung konsequent auf Spring bzw. den
bzw. das zugrunde liegende Modularisierungs- Spring-Kontext übertragen.
konzept machen Spring DM erforderlich. Um dennoch Beans Bundle-übergreifend
Solange eine RCP-Applikation nur aus einem nutzen zu können, kommen – wie im Artikel
einzigen Plug-in bzw. Bundle besteht, das beschrieben – OSGi-Services zum Einsatz. Das
neben den Klassen und Ressourcen der Appli- Ex- und Importieren von Beans erfolgt also mit
kation auch die Spring-Bibliothek(en) enthält, „OSGi-Bordmitteln“ und ist daher auch mit der
kann man tatsächlich Spring wie gehabt ver- Dynamik von OSGi bestens verträglich.
C
wenden, d.h. insbesondere ohne Spring DM.
Vom Bundle zum „Spring-powered“ Bundle
Allerdings ist dieser Fall wohl akademischer M
Natur, denn ein Hauptargument für die Ver- Wie wird nun ein Bundle ganz konkret zum
Y
wendung von Eclipse RCP bzw. OSGi ist – ne- „Spring-powered“ Bundle? Dies ist die Aufga-
ben Dynamik und Serviceorientierung – die be eines speziellen Bundles, das Bestandteil CM
Modularisierung, sodass RCP-Applikationen von Spring DM ist: das so genannte Spring DM MY
in der Praxis aus mehreren Bundles bestehen Extender Bundle (org.springframework.osgi.
CY
bundle.extender).
werden. Und genau das bedeutet das Aus
für den gewohnten globalen Spring-Kontext. Sobald dieses installiert und gestartet wird, CMY
Schließlich werden die zu erzeugenden und zu analysiert es alle gestarteten Bundles, ob
K
konfigurierenden Beans in einer modularen sie Spring-Konfigurationsdateien enthalten.
Applikation auf mehrere Bundles verteilt sein. Diese können entweder standardgemäß im
Verzeichnis META-INF/spring/ liegen oder
Damit Spring diese instanziieren kann, müssen
die entsprechenden Klassen geladen werden in beliebigen anderen Verzeichnissen, die
über den speziellen Manifest Header Spring-
können. Das bedeutet in der OSGi-Welt, dass
Context spezifiziert werden können. Für jedes
die Applikations-Bundles alle Packages, die
Spring-Bean-Implementierungsklassen ent- Bundle, das auf die eine oder andere Weise
halten, exportieren müssen. Das widerspricht Spring-Konfigurationsdateien enthält, wird
dem Konzept, dass nur öffentliche API – in vom Spring DM Extender Bundle ein Spring-
der Regel oft Interfaces und Basisklassen – zu Kontext erzeugt.
publizieren und die Implementierung privat zu Doch damit nicht genug: Das Spring DM
halten ist, denn schließlich sind Spring Beans Extender Bundle verfolgt mittels eines so ge-
nannten BundleListeners das Starten weiterer
meist (private) Implementierungen von (öf-
fentlichen) Interfaces. Weiterhin benötigt das Bundles, sodass in der Folge auch neu gestar-
Bundle, das den globalen Spring-Kontext er- tete „Spring-powered“ Bundles mit ihrem
zeugen soll, Abhängigkeiten zu allen Bundles Spring-Kontext versehen werden.
mit Spring Beans. Wenngleich das technisch In diesem Zusammenhang muss hervorge-
möglich ist, so ist es strukturell eher als hoben werden, dass das Starten von Bundles
„Designfehler“ anzusehen. für Spring DM eine entscheidende Rolle spielt:
Sowohl das Spring DM Extender Bundle als
Spring DM setzt voll auf OSGi-Konzepte auch ein „Spring-powered“ Bundle muss ge-
Spring DM löst dieses Dilemma nicht nur, es startet sein, damit ein Spring-Kontext erzeugt
geht dabei sogar einen sehr eleganten Weg, wird. Insbesondere Entwickler von RCP-Appli-
indem es voll auf OSGi-Konzepte setzt. kationen dürften diesem Sachverhalt bisher
Zunächst wird der globale Spring-Kontext auf- weniger Beachtung geschenkt haben, da das
gegeben. An seine Stelle treten Bundle-lokale Verwenden der exportierten APIs sowie das
Spring-Kontexte. Konkret wird für jedes so ge- Nutzen von Extension Points ohne das Starten
nannte „Spring-powered“ Bundle ein eigener von Bundles auskommt.
www.eclipse-magazin.de
5. Rich Clients Spring, OSGi und RCP
Abb. 4: Kontextdefini-
tion im client-Bundle
(mit RCP-Applikation)
Abb. 5: Kontextdefini-
tion im clientseitigen
accessor.rmi-Bundle
wurde bewusst von dieser Empfehlung
einiges an Boilerplate-Code. Setzt man kömmlichen Spring-Applikation. Wie
abgewichen, um das Beispiel übersicht-
Spring DM ein, so reduziert sich dieser man Abbildung 3 entnehmen kann, ist
licher darstellen zu können.
Code erheblich, da Spring DM Bordmit- danach die Serviceimplementierung
Betrachtet man die Referenzierung
tel mitbringt, die es ermöglichen, An- MyServiceImpl unter dem Namen
des soeben in der Service Registry ange-
meldungen und Referenzierungen von mySpringManagedBeanToBeExported
meldeten Service, so erwartet einen hin-
Services in Spring-Kontextdateien aus- als Spring-Bean zugreifbar. Zusätzlich
sichtlich der Nutzung von Spring DM
zulagern. Wenn man dies anhand des im- zu dieser Bean-Definition findet sich
keine Überraschung mehr: Über den Ein-
plementation-Bundles betrachtet, wird aber noch ein weiterer (Spring-DM-
trag <osgi:reference> können in der Ser-
man abweichend von einem klassischen spezifischer) Eintrag in der Kontext-
vice Registry angemeldete Services in den
Bundle unterhalb von META-INF einen definition: <osgi:service>. Dieser sorgt
Bundle-lokalen Spring-Kontext impor-
zusätzlichen Ordner namens spring fin- für den Export der Bean in die Service
tiert werden. Zusätzlich kann man der
den (Abb. 3). Registry. Anstelle des eigenhändig zu
Kontextdefinition entnehmen, dass ein
Ist nun das bereits oben in der erstellenden Codes führt Spring DM
<osgi:listener>-Element für den Service
Bundle-Übersicht aufgeführte Spring hier also eine komfortabel zu nutzende
registriert wurde. Ein solches ermöglicht
DM Extender Bundle mit all seinen Ab- Abstraktionsschicht ein. Spring DM
es dem Entwickler, Benachrichtigungen
hängigkeiten aktiv, so sorgt dieses (stan- definiert dafür einen zusätzlichen XML
über den Lebenszyklus des Service zu er-
dardmäßig) dafür, dass bei jedem aktiv Namespace http://www.springframe-
halten und gegebenenfalls auf solche zu
werdenden Bundle ein solcher Ord- work.org/schema/osgi, über den die
reagieren (Abb. 4).
ner nach Spring-Kontextdefinitionen Spring-DM-spezifische XML-Konfigu-
Auf der Basis von Spring DM lassen
durchsucht wird. Jede dort gefundene ration ermöglicht wird. Als Best Prac-
sich nun mit überschaubarem Aufwand
XML-Datei wird dabei als Kontextde- tice wird in der Spring-DM-Referenz
flexible Applikationsarchitekturen er-
finition interpretiert. Aus diesen Defi- empfohlen, die Kontextdefinition der
stellen. Architekturen wie die unseres
nitionen wird dann ein Bundle-lokaler Bundle-lokalen Spring Beans und die
beispielhaften Anwendungsfalls „Stand-
Spring-Kontext erzeugt. Dieser un- der OSGi-spezifischen Definitionen in
alone- vs. Client/Serverbetrieb“. Die Mo-
terscheidet sich strukturell zunächst (mindestens zwei) separate Kontext-
dularisierung über OSGi Bundles sowie
nicht von einem Kontext aus einer her- dateien auszulagern. Für das Beispiel
78 eclipse magazin Vol. 16 www.eclipse-magazin.de
6. Rich Clients Spring, OSGi und RCP
Abb. 6:
Kontextdefi-
nition im ser-
verseitigen
publisher.
rmi-Bundle
• Bundle für den Zugriff auf den über
die Strukturierung der Applikation über keine Zeile Java-Code mehr geschrie-
RMI remote zugreifbaren Service
Spring (Bundle-lokal) und OSGi-Services ben werden.
(…accessor.rmi)
(applikationsglobal) geben einem dafür
Fazit
• RCP-Plug-in für die Clientapplikation
die geeigneten Hilfsmittel zur Hand.
(…client) Die in Spring DM abgebildete Integra-
Standalone-Konfiguration tionsschicht zwischen den Spring und
Hierbei ist hervorzuheben, dass der Cli-
Für den Standalone-Betrieb werden OSGi Frameworks ermöglicht es dem
ent in dieser Konstellation die eigentliche
neben den Infrastruktur-Bundles von RCP-Entwickler, zukünftig mit deutlich
Serviceimplementierung nicht enthält.
Spring DM und RCP drei der fünf Appli- verringertem Aufwand die Vorteile von
Stattdessen registriert das accessor.
kations-Plug-ins ausgeliefert: Spring und OSGi vereint zu nutzen. In
rmi-Bundle unter dem bekannten Servi- Zukunft ist es also keine Wunschvorstel-
ceinterface MyService ein RMI-Proxy-
• Bundle für das Interface des OSGi-Ser- lung mehr: „RCP powered by Spring“.
Objekt, über das remote mit dem Service
vice (...interface)
kommuniziert werden kann. Genutzt
• Bundle für die Implementierung des
wird hierzu die mit Spring ausgelieferte
OSGi-Service (…implementation)
RMI-Integrationsschicht (Abb. 5).
• RCP-Plug-in für die Clientapplikation
Alexander Thurow ist Software-
Auf der Serverseite wird ein OSGi-
(…client) entwickler und Trainer bei der
Prozess gestartet, in dem folgende Bundles Weigle Wilczek GmbH in Esslingen
laufen:
Dabei liefert und registriert, wie oben am Neckar. Er beschäftigt sich seit
schon aufgezeigt, das implementation- drei Jahren mit der Entwicklung von
Enterprise-Applikationen auf Basis von JEE und
• Bundle für das Interface des OSGi-Ser-
Bundle die Spring-Bean-basierte Imple-
Eclipse RCP. Kontakt: thurow@weiglewilczek.com.
vice (...interface)
mentierung für die Service Registry. Das
• Bundle für die Implementierung des
client-Bundle wird danach über den an
Heiko Seeberger ist als Technical
OSGi-Service (…implementation)
der Registry angemeldeten ServiceLis-
Director für die Weigle Wilczek GmbH
• Bundle zum Exportieren des OSGi-Ser-
tener über den neu angemeldeten Ser-
tätig. Sein technischer Schwerpunkt
vice in eine RMI Registry (...publisher.
vice informiert. Dies erfolgt über Aufruf liegt in der Entwicklung von Unter-
der onBind()-Methode des Listeners. rmi) nehmensanwendungen mit OSGi,
Dort kann dann der RCP-Applikation Eclipse RCP, Spring, AspectJ und Java EE. Seine
Neben den zwei bekannten Bundles für
eine Referenz auf den Service zugewiesen Erfahrung aus über zehn Jahren IT-Beratung
und Softwareentwicklung fließen in die Eclipse
das Serviceinterface und dessen Imple-
werden (konkret über die Hilfsmethode
Training Alliance ein; zudem ist Heiko Seeberger
mentation findet sich auf der Serversei-
Activator.setService(MyService)). Im di-
aktiver Committer in Eclipse-Projekten.
te das Bundle publisher.rmi. In diesem
rekten Anschluss an diese von Spring DM
Kontakt: seeberger@weiglewilczek.com.
Bundle ist Funktionalität lokalisiert, die
gesteuerte Initialisierung steht die „Run
dafür sorgt, dass der vom implementa-
Service“-Funktionalität in der UI zur Ver-
tion-Bundle registrierte Service in einer
fügung.
>> Links & Literatur
RMI Registry für Remote-Zugriffe pu-
Client/Serverkonfiguration [1] wiki.eclipse.org/index.php/Rich_Client_Platform
bliziert wird. Auch in diesem Fall wird
[2] de.wikipedia.org/wiki/OSGi
die mit Spring ausgelieferte RMI-Inte-
Für diese zweite Konfiguration wird die
[3] springframework.org/
grationsschicht genutzt (Abb. 6).
Clientseite der Applikation mit einer
Besonderes Augenmerk sei dabei
abgewandelten Menge von Bundles ver- [4] en.wikipedia.org/wiki/Dependency_injection
auf die leeren src-Verzeichnisse der
sehen: [5] de.wikipedia.org/wiki/Aspektorientierte_
Programmierung
beiden letztgenannten Bundles gelenkt
(Abb. 5, 6). Bei dem für die Bundles ge-
• Bundle für das Interface des OSGi-Ser- [6] www.eclipse.org/equinox/
wählten Implementationsansatz muss
vice (...interface) [7] www.springframework.org/osgi/
80 eclipse magazin Vol. 16 www.eclipse-magazin.de