Ratgeber

Equinox modernisiert Java-Legacy

09.11.2010
Von Jörg Viola

Fallstricke

Bei diesem Vorgehen gilt es allerdings, einige Fallstricke zu beachten. Wir haben die skizzierte Blaupause auf eine größere Applikation angewendet: Das quelloffene ERP-System ADempiere ist umfangreich und glänzt durch bestechende fachliche Features sowie einige architektonische Geniestreiche, ist jedoch nicht unbedingt für sauberes Softwaredesign oder Erweiterungsfähigkeit bekannt. Diese Schwächen wollten wir abstellen und haben dafür beide Vorgehensweisen ausprobiert.

Während die Umstellung des Swingbasierenden Fat Client zunächst nach Lehrbuch funktionierte, traten im weiteren Verlauf in beiden Ansätzen einige Probleme zutage.

  • Verwendete Bibliotheken: Jede verwendete Bibliothek muss entweder selbst in ein Bundle gewandelt (hierfür gibt es ein geeignetes Werkzeug) oder - ungern - im verwendenden Bundle installiert werden (Bundles lassen, anders als normale JARs, enthaltene Archive zu). Die Zahl der Bundles im Container steigt dadurch sprunghaft an.

  • Automatische Builds: Sie gehören zum guten Ton, die Nightly Builds auf einem entsprechenden Build-Server. Kommt Eclipse Equinox zum Einsatz, wird die sehr gute Entwicklungsumgebung zum Problem, da sie anstelle automatischer Tests aus dem Stand heraus jeweils einen Testaufbau über grafische Werkzeuge vorsieht, was durchaus komfortabel ist, aber zusätzlichen Aufwand bedeutet. Ant4eclipse liefert hier eine gute Lösung.

  • WebStart: Prinzipiell unterstützt zum Beispiel Equinox den Start des Containers mit dieser Technik. Allerdings müssen die herunterzuladenden Plug-ins explizit konfiguriert werden (in Form so genannter Features) - kein ganz einfaches Verfahren, und Hot Deployment (siehe Kasten "Was ist OSGi?") ist damit nicht möglich.

  • Web-Anwendungen: Hier stellt sich die Container-gegen-Container-Frage: OSGi-Container im JEE-Container oder JEE-Container im OSGi-Container? Die erste Variante wird durch so genannte Bridges unterstützt. Tatsächlich stellen diese aber noch nicht den gesamten Umfang der Servlet-Spezifikation bereit - und plötzlich kann man zum Beispiel keinen Filter installieren. Für den - immerhin auf dem komplexen Web-Framework ZK basierenden - Web-Client von ADempiere reichte es aber. Die zweite Variante wird durch Tomcat- oder Jetty-Bundles möglich. Das funktioniert, hat aber eine deutliche Änderung der Installationsumgebung zur Folge. Für Spring-basierende Projekte und solche, die es werden wollen, ist Spring-DM eine Alternative.

  • EJB-Anwendungen: Die Server-Technik von JEE markiert derzeit das Ende der Fahnenstange. Zwar arbeiten verschiedene Projekte und Anbieter (zum Beispiel JBoss, Easybeans und Websphere) daran, ihren JEE-Container OSGi-fähig zu machen. Wer sich jedoch mit Betaversionen keine blutige Nase holen möchte, der muss seine Anwendung umschreiben. Für das Transaktionsverhalten gibt es heute allerhand Alternativen, Remoting kann mit OSGi Remote Services oder flexibler zum Beispiel mit Eclipse Riena erreicht werden. Leichtgewichtiger wird der Server damit auch in Zeiten von EJB 3 allemal.