Ratgeber

Equinox modernisiert Java-Legacy

09.11.2010
Von Jörg Viola
Ältere Java-Systeme lassen sich zum Teil kaum noch beherrschen. Die OSGi-Implementierung Equinox hilft bei der Modernisierung.

Der objektorientierte Entwurf und die OO-Programmierung brachten eine Verheißung in die Szene der 80er Jahre: Information Hiding. Daten sollen nur dort gehalten werden, wo man sie wirklich braucht, und nur die passende Logik soll Zugriff darauf haben. Beides wird zusammen in einem Objekt untergebracht. Ein wohldefiniertes Interface stellt die Operationen nach außen zur Verfügung. Mit einem solchen Softwaredesign steht und fällt die Wartbarkeit einer jeden Anwendung.

Doch zwei Jahrzehnte später lassen viele Änderungen, Bugfixes und Release-Zyklen von den ursprünglichen Ideen und Strukturen aus der Erstellungsphase kaum noch etwas erkennen. Es sind Softwaresysteme entstanden, die aus Tausenden von Klassen und zur Laufzeit aus Millionen von Objekten bestehen. Darüber hinaus kann prinzipiell jedes Objekt die Schnittstelle jedes anderen benutzen. Kein Entwickler ist in der Lage, hier die Übersicht zu behalten.

Die Schaffung von Modulen, auch im Hinblick auf Service-orientierte Architekturen, gilt deshalb als guter Stil. In den OO-Sprachen des Mainstreams wird das jedoch nur durch schwache Sprachkonstrukte unterstützt. So ist zum Beispiel das Private/Protected/Public-Rechtesystem in Java auf Packages beschränkt, die ihrerseits keine sinnvolle Größenordnung für ein Modul darstellen. In Modula-3 oder Oberon ist das besser gelöst, aber wer benutzt das schon? Die Folge: Änderungen an einer Stelle haben potenziell Einfluss auf viele andere Teile einer Anwendung. Entwickler müssen dies entweder nachvollziehen, was erhöhten Aufwand bedeutet, oder sie können dies gar nicht leisten, und das verringert die Qualität.

Die Lösung für dieses konkrete Problem ist klar: Ein Modulbegriff muss her und auch durchgesetzt werden. Genau hierfür bietet OSGi die geeigneten Mittel: Ursprünglich für die automatische nachträgliche Installation (Provisioning) in Embedded-Systemen gedacht, macht es herkömmliche Java-Bibliotheken (JARs) zu Modulen mit gekapseltem Innerem und definierter Schnittstelle.

Was ist OSGi?

Die Open Services Gateway Initiative spezifiziert eine Java-Plattform, auf der Module und Dienste verwaltet werden können.

  • Module = "Bundle": ein JAR (Java Archive), dessen Manifest spezifiziert, welche Pakete von außen gesehen werden.

  • Bundles können einer laufenden Anwendung nachträglich hinzugefügt werden (Hot Deployment).

  • Bundles können gleichzeitig in verschiedenen Versionen vorliegen und benutzt werden.

  • Dienste: Java-Klassen können als Dienst registriert und dann von jedem Bundle aus gefunden und aufgerufen werden.

  • Die aktuelle Version 4.2 enthält mit der Enterprise-Specification auch Dienste, die die Plattform bereitstellen muss, zum Beispiel Bundle-Verwaltung, Rechte, Logging, Remoting, http-Service, Konfiguration, Benutzer, JTA, JMX, JNDI, JDBC und XML Parser.