Produktiver modular arbeiten dank OSGi Blueprint

15.01.2014

QuellcodeDie Modularisierungsspezifikation OSGi hat zwar schon ein paar Jahre auf dem Buckel, trifft aber noch immer den Zahn der Zeit. Dies zeigt sich nicht zuletzt dadurch, dass Oracle für Java 8 ein ähnliches System namens Jigsaw plant. Doch während Jigsaw noch Zukunftsmusik ist, wird OSGi bei doubleSlash bereits fleißig eingesetzt.

Während der Einarbeitung in das Thema OSGi starten in der Regel alle Lernwilligen bei einfachen Services, die händisch registriert und abgefragt werden. Dies ist ein guter Weg, um das System kennenzulernen, artet aber im produktiven Einsatz sehr schnell aus. Um diese elementaren Funktionen zu erleichtern, lohnt es sich, einen Blick in die Enterprise-Spezifikation von OSGi zu werfen.

Unter dem Begriff „Blueprint“ findet man eine zeitgemäße Behandlung der Services: Dependency Injection!

Voraussetzung dafür ist eine lauffähige Implementierung des Standards, z.B. Apache Aries. Um einen neuen Service zu registrieren, wird zunächst eine XML Datei unter OSGI-INF/blueprint/ angelegt (Beispiel von aries.apache.org):

<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
   <service id="serviceOne" ref="account" interface="org.apache.aries.simple.AccountInterface" />
   <bean id="account" class="org.apache.aries.simple.Account"/>
</blueprint>

Blueprint sorgt nun automatisch dafür, dass dieser Service im OSGi Container registriert wird.

Um diesen jetzt in einer Java Klasse (im Beispiel „AccountClient“) verwenden zu können, bedarf es folgender Konfiguration:

<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
   <bean id="accountClient" class="org.apache.aries.simple.AccountClient">
      <property name="account" ref="accountRef" />
   </bean>
   <reference id="accountRef" interface="org.apache.aries.simple.AccountInterface"/>
</blueprint>

Damit hat man bereits alles Nötige, um den Service verwenden zu können. Der Code wird entschlackt und die Testbarkeit der Anwendung deutlich verbessert. Natürlich bietet Blueprint noch einige weitere Features – beispielsweise die Handhabung von kurzfristig ausfallenden Services über Proxies, welches ein grundlegendes Problem in einer so dynamischen Umgebung ist.

Auch wenn die Fülle an Möglichkeiten Einsteiger etwas erschlagen kann, sollte man keine Scheu haben, früh einen Einblick jenseits der Kernspezifikationen zu wagen. Die Belohnung sind oft große Produktivitätszuwächse. Durch die Modularisierung der einzelnen Bereiche einer Software werden diese kleinen Teile automatisch wartbarer. Komplexität und Abhängigkeiten werden reduziert und dadurch langfristig auch die Kosten eines Projekts.

Zurück zur Übersicht

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

*Pflichtfelder

*