Your SlideShare is downloading. ×
Eclipse Magazin 16 - Die Stärke der Drei
Eclipse Magazin 16 - Die Stärke der Drei
Eclipse Magazin 16 - Die Stärke der Drei
Eclipse Magazin 16 - Die Stärke der Drei
Eclipse Magazin 16 - Die Stärke der Drei
Eclipse Magazin 16 - Die Stärke der Drei
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Eclipse Magazin 16 - Die Stärke der Drei

1,198

Published on

Published in: Technology, Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,198
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
49
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 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

×