SlideShare une entreprise Scribd logo
1  sur  6
Télécharger pour lire hors ligne
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
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
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
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
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
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

Contenu connexe

En vedette

Jesús oswaldo chaira ruiz
Jesús oswaldo chaira ruizJesús oswaldo chaira ruiz
Jesús oswaldo chaira ruizjesuschaira
 
Plettenbacher: Neues Geld Neue Welt V2.2
Plettenbacher: Neues Geld Neue Welt V2.2Plettenbacher: Neues Geld Neue Welt V2.2
Plettenbacher: Neues Geld Neue Welt V2.2neuesgeld
 
Won park maestro del origami
Won park maestro del origamiWon park maestro del origami
Won park maestro del origamimedrano77
 
Semejanzas y diferencias del uso de las tic en el conductismo y constructivismo
Semejanzas y diferencias del uso de las tic en el conductismo y constructivismoSemejanzas y diferencias del uso de las tic en el conductismo y constructivismo
Semejanzas y diferencias del uso de las tic en el conductismo y constructivismoAdriana Sandoval P.
 
Rc diego sua
Rc diego suaRc diego sua
Rc diego suadasuasan
 
Mar ti n suarez & lucho santos .
Mar ti n suarez & lucho santos .Mar ti n suarez & lucho santos .
Mar ti n suarez & lucho santos .martiinsuarez
 
Adonde Fui Spanish 2 Project
Adonde Fui Spanish 2 ProjectAdonde Fui Spanish 2 Project
Adonde Fui Spanish 2 ProjectKailyn Nguyen
 
Vortrag "Governance durch Algorithmen? 'Politics of Platforms' und die Ordnun...
Vortrag "Governance durch Algorithmen? 'Politics of Platforms' und die Ordnun...Vortrag "Governance durch Algorithmen? 'Politics of Platforms' und die Ordnun...
Vortrag "Governance durch Algorithmen? 'Politics of Platforms' und die Ordnun...Christian Katzenbach
 
Red de Comunicadores de Isla de Maipo
Red de Comunicadores de Isla de Maipo Red de Comunicadores de Isla de Maipo
Red de Comunicadores de Isla de Maipo ARSChile
 
II Convención de Agronegocios - UPC
II Convención de Agronegocios - UPCII Convención de Agronegocios - UPC
II Convención de Agronegocios - UPCFertilMundo
 
II Convención de Agronegocios - UPC
II Convención de Agronegocios - UPCII Convención de Agronegocios - UPC
II Convención de Agronegocios - UPCFertilMundo
 
Tics en el conductismo y constructivismo
Tics en el conductismo y constructivismoTics en el conductismo y constructivismo
Tics en el conductismo y constructivismoAdriana Sandoval P.
 

En vedette (20)

Jesús oswaldo chaira ruiz
Jesús oswaldo chaira ruizJesús oswaldo chaira ruiz
Jesús oswaldo chaira ruiz
 
Plettenbacher: Neues Geld Neue Welt V2.2
Plettenbacher: Neues Geld Neue Welt V2.2Plettenbacher: Neues Geld Neue Welt V2.2
Plettenbacher: Neues Geld Neue Welt V2.2
 
Won park maestro del origami
Won park maestro del origamiWon park maestro del origami
Won park maestro del origami
 
EL diario
EL diarioEL diario
EL diario
 
Semejanzas y diferencias del uso de las tic en el conductismo y constructivismo
Semejanzas y diferencias del uso de las tic en el conductismo y constructivismoSemejanzas y diferencias del uso de las tic en el conductismo y constructivismo
Semejanzas y diferencias del uso de las tic en el conductismo y constructivismo
 
Practica 7
Practica 7Practica 7
Practica 7
 
Rc diego sua
Rc diego suaRc diego sua
Rc diego sua
 
Mar ti n suarez & lucho santos .
Mar ti n suarez & lucho santos .Mar ti n suarez & lucho santos .
Mar ti n suarez & lucho santos .
 
Online - politisch - partizipativ
Online - politisch - partizipativOnline - politisch - partizipativ
Online - politisch - partizipativ
 
Practica 5
Practica 5Practica 5
Practica 5
 
Adonde Fui Spanish 2 Project
Adonde Fui Spanish 2 ProjectAdonde Fui Spanish 2 Project
Adonde Fui Spanish 2 Project
 
Vortrag "Governance durch Algorithmen? 'Politics of Platforms' und die Ordnun...
Vortrag "Governance durch Algorithmen? 'Politics of Platforms' und die Ordnun...Vortrag "Governance durch Algorithmen? 'Politics of Platforms' und die Ordnun...
Vortrag "Governance durch Algorithmen? 'Politics of Platforms' und die Ordnun...
 
Red de Comunicadores de Isla de Maipo
Red de Comunicadores de Isla de Maipo Red de Comunicadores de Isla de Maipo
Red de Comunicadores de Isla de Maipo
 
Practica 29
Practica 29Practica 29
Practica 29
 
Dossier Impulsor
Dossier ImpulsorDossier Impulsor
Dossier Impulsor
 
Practicas
PracticasPracticas
Practicas
 
II Convención de Agronegocios - UPC
II Convención de Agronegocios - UPCII Convención de Agronegocios - UPC
II Convención de Agronegocios - UPC
 
Mi vida
Mi vidaMi vida
Mi vida
 
II Convención de Agronegocios - UPC
II Convención de Agronegocios - UPCII Convención de Agronegocios - UPC
II Convención de Agronegocios - UPC
 
Tics en el conductismo y constructivismo
Tics en el conductismo y constructivismoTics en el conductismo y constructivismo
Tics en el conductismo y constructivismo
 

Similaire à Eclipse Magazin 16 - Die Stärke der Drei

Eclipse Magazin15 - Performance Logging
Eclipse Magazin15 - Performance LoggingEclipse Magazin15 - Performance Logging
Eclipse Magazin15 - Performance LoggingHeiko Seeberger
 
JM 12/08 - OSGi in kleinen Dosen 1
JM 12/08 - OSGi in kleinen Dosen 1JM 12/08 - OSGi in kleinen Dosen 1
JM 12/08 - OSGi in kleinen Dosen 1Heiko Seeberger
 
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 HealthcarePeter Affolter
 
Eclipse Magazin 12 - Security does matter
Eclipse Magazin 12 - Security does matterEclipse Magazin 12 - Security does matter
Eclipse Magazin 12 - Security does matterHeiko Seeberger
 
DHI-WASY Aktuell 04/2011
DHI-WASY Aktuell 04/2011DHI-WASY Aktuell 04/2011
DHI-WASY Aktuell 04/2011DHI-WASY GmbH
 
JM 01/09 - OSGi in kleinen Dosen 2
JM 01/09 - OSGi in kleinen Dosen 2JM 01/09 - OSGi in kleinen Dosen 2
JM 01/09 - OSGi in kleinen Dosen 2Heiko Seeberger
 
MT AG 7 Gute Gründe warum APEX
MT AG 7 Gute Gründe warum APEXMT AG 7 Gute Gründe warum APEX
MT AG 7 Gute Gründe warum APEXNiels de Bruijn
 
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_vollWolfgang Weigend
 
Amazon Web Services: Flaggschiff des Cloud Computings
Amazon Web Services: Flaggschiff des Cloud ComputingsAmazon Web Services: Flaggschiff des Cloud Computings
Amazon Web Services: Flaggschiff des Cloud ComputingsLothar Wieske
 
Apex on the Rocks - Hochverfügbarkeit
Apex on the Rocks - HochverfügbarkeitApex on the Rocks - Hochverfügbarkeit
Apex on the Rocks - HochverfügbarkeitStefan Witwicki
 
Article - JDK 8 im Fokus der Entwickler
Article - JDK 8 im Fokus der EntwicklerArticle - JDK 8 im Fokus der Entwickler
Article - JDK 8 im Fokus der EntwicklerWolfgang Weigend
 
Java Aktuell Bernd Zuther Canary Releases mit der Very Awesome Microservices ...
Java Aktuell Bernd Zuther Canary Releases mit der Very Awesome Microservices ...Java Aktuell Bernd Zuther Canary Releases mit der Very Awesome Microservices ...
Java Aktuell Bernd Zuther Canary Releases mit der Very Awesome Microservices ...Bernd Zuther
 
Ecm 5 13_djaafar_jas_forge
Ecm 5 13_djaafar_jas_forgeEcm 5 13_djaafar_jas_forge
Ecm 5 13_djaafar_jas_forgeJasmine Conseil
 
JM 03/09 - OSGi in kleinen Dosen 4
JM 03/09 - OSGi in kleinen Dosen 4JM 03/09 - OSGi in kleinen Dosen 4
JM 03/09 - OSGi in kleinen Dosen 4Heiko Seeberger
 
iJUG Java Aktuell [Februar 2015] Lukas Eder - jOOQ - ein alternativer Weg mit...
iJUG Java Aktuell [Februar 2015] Lukas Eder - jOOQ - ein alternativer Weg mit...iJUG Java Aktuell [Februar 2015] Lukas Eder - jOOQ - ein alternativer Weg mit...
iJUG Java Aktuell [Februar 2015] Lukas Eder - jOOQ - ein alternativer Weg mit...Lukas Eder
 
LAIK: A Library for Fault Tolerant Distribution of Global Data
LAIK: A Library for Fault Tolerant Distribution of Global DataLAIK: A Library for Fault Tolerant Distribution of Global Data
LAIK: A Library for Fault Tolerant Distribution of Global DataDai Yang
 

Similaire à Eclipse Magazin 16 - Die Stärke der Drei (20)

Eclipse Magazin15 - Performance Logging
Eclipse Magazin15 - Performance LoggingEclipse Magazin15 - Performance Logging
Eclipse Magazin15 - Performance Logging
 
JM 12/08 - OSGi in kleinen Dosen 1
JM 12/08 - OSGi in kleinen Dosen 1JM 12/08 - OSGi in kleinen Dosen 1
JM 12/08 - OSGi in kleinen Dosen 1
 
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
 
Eclipse Magazin 12 - Security does matter
Eclipse Magazin 12 - Security does matterEclipse Magazin 12 - Security does matter
Eclipse Magazin 12 - Security does matter
 
"RCP-Hilfe-System" - Ein Artikel im Eclipse Magazin 6/2010
"RCP-Hilfe-System" - Ein Artikel im Eclipse Magazin 6/2010"RCP-Hilfe-System" - Ein Artikel im Eclipse Magazin 6/2010
"RCP-Hilfe-System" - Ein Artikel im Eclipse Magazin 6/2010
 
DHI-WASY Aktuell 04/2011
DHI-WASY Aktuell 04/2011DHI-WASY Aktuell 04/2011
DHI-WASY Aktuell 04/2011
 
Openshift
OpenshiftOpenshift
Openshift
 
JM 01/09 - OSGi in kleinen Dosen 2
JM 01/09 - OSGi in kleinen Dosen 2JM 01/09 - OSGi in kleinen Dosen 2
JM 01/09 - OSGi in kleinen Dosen 2
 
MT AG 7 Gute Gründe warum APEX
MT AG 7 Gute Gründe warum APEXMT AG 7 Gute Gründe warum APEX
MT AG 7 Gute Gründe warum APEX
 
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
 
Amazon Web Services: Flaggschiff des Cloud Computings
Amazon Web Services: Flaggschiff des Cloud ComputingsAmazon Web Services: Flaggschiff des Cloud Computings
Amazon Web Services: Flaggschiff des Cloud Computings
 
Apex on the Rocks - Hochverfügbarkeit
Apex on the Rocks - HochverfügbarkeitApex on the Rocks - Hochverfügbarkeit
Apex on the Rocks - Hochverfügbarkeit
 
Article - JDK 8 im Fokus der Entwickler
Article - JDK 8 im Fokus der EntwicklerArticle - JDK 8 im Fokus der Entwickler
Article - JDK 8 im Fokus der Entwickler
 
Elsholz stoll js_03_10
Elsholz stoll js_03_10Elsholz stoll js_03_10
Elsholz stoll js_03_10
 
Java Aktuell Bernd Zuther Canary Releases mit der Very Awesome Microservices ...
Java Aktuell Bernd Zuther Canary Releases mit der Very Awesome Microservices ...Java Aktuell Bernd Zuther Canary Releases mit der Very Awesome Microservices ...
Java Aktuell Bernd Zuther Canary Releases mit der Very Awesome Microservices ...
 
Ecm 5 13_djaafar_jas_forge
Ecm 5 13_djaafar_jas_forgeEcm 5 13_djaafar_jas_forge
Ecm 5 13_djaafar_jas_forge
 
JM 03/09 - OSGi in kleinen Dosen 4
JM 03/09 - OSGi in kleinen Dosen 4JM 03/09 - OSGi in kleinen Dosen 4
JM 03/09 - OSGi in kleinen Dosen 4
 
iJUG Java Aktuell [Februar 2015] Lukas Eder - jOOQ - ein alternativer Weg mit...
iJUG Java Aktuell [Februar 2015] Lukas Eder - jOOQ - ein alternativer Weg mit...iJUG Java Aktuell [Februar 2015] Lukas Eder - jOOQ - ein alternativer Weg mit...
iJUG Java Aktuell [Februar 2015] Lukas Eder - jOOQ - ein alternativer Weg mit...
 
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
 
LAIK: A Library for Fault Tolerant Distribution of Global Data
LAIK: A Library for Fault Tolerant Distribution of Global DataLAIK: A Library for Fault Tolerant Distribution of Global Data
LAIK: A Library for Fault Tolerant Distribution of Global Data
 

Plus de Heiko Seeberger

Scaladays 2011 - The Ease of Scalaz
Scaladays 2011 - The Ease of ScalazScaladays 2011 - The Ease of Scalaz
Scaladays 2011 - The Ease of ScalazHeiko Seeberger
 
RheinJUG 2010 - Sprechen Sie Scala?
RheinJUG 2010 - Sprechen Sie Scala?RheinJUG 2010 - Sprechen Sie Scala?
RheinJUG 2010 - Sprechen Sie Scala?Heiko Seeberger
 
Objektforum 2010 - Sprechen Sie Scala?
Objektforum 2010 - Sprechen Sie Scala?Objektforum 2010 - Sprechen Sie Scala?
Objektforum 2010 - Sprechen Sie Scala?Heiko Seeberger
 
JM 08/09 - Beginning Scala Review
JM 08/09 - Beginning Scala ReviewJM 08/09 - Beginning Scala Review
JM 08/09 - Beginning Scala ReviewHeiko Seeberger
 
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 ScalaHeiko Seeberger
 
JAX 09 - OSGi Service Components Models
JAX 09 - OSGi Service Components ModelsJAX 09 - OSGi Service Components Models
JAX 09 - OSGi Service Components ModelsHeiko Seeberger
 
Eclipse Magazin 12 - Design by Contract
Eclipse Magazin 12 - Design by ContractEclipse Magazin 12 - Design by Contract
Eclipse Magazin 12 - Design by ContractHeiko Seeberger
 
EclipseCon 08 - Agile RCP
EclipseCon 08 - Agile RCPEclipseCon 08 - Agile RCP
EclipseCon 08 - Agile RCPHeiko 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 RCPHeiko Seeberger
 
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 ModulesHeiko Seeberger
 

Plus de 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
 

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