Einst wurde die Java-Laufzeitumgebung mit dem Spruch "write once, run everywhere" (sinngemäß: schreib die Anwendung einmal und starte sie auf jedem Betriebssystem) beworben. In Zeiten, in denen die meisten Rechner ständig mit dem Internet verbunden sind, muss die Bedeutung dieser Forderung erweitert werden: Die einmalig und möglichst kostengünstig erstellten Anwendungen müssen sowohl als Internetapplikation wie auch als lokale Anwendung laufen können.
Wer heutzutage nun etwas auf sich hält, stellt Onlineanwendungen bereit, deren Gestaltungsmöglichkeiten der von Desktopsoftware hoch überlegen sind. Das Aussehen solcher Webseiten kann mittels HTML und CSS-Styles leicht geändert, bzw. Dynamik mittels JavaScript eingebaut werden. Die Erweiterbarkeit der Software ist gewährleistet, da auf Standards aufgebaut wird, die jeder Browser versteht. Mit geringem Aufwand kann so eine dynamische Webseite erstellt werden. Aber wie werden solche dynamischen Webseiten als Desktopanwendung bereitgestellt? Nichts ist naheliegender, als mit der Anwendung einen auf freien Standards basierenden Webserver mitzuliefern.
Eine der häufig gewählten Laufzeitumgebungen für Webanwendungen im professionellen Umfeld ist Java, so werden wir uns in diesem Artikel auf Java-basierende Servlet-Container und Applikationen konzentrieren. Unser Ansatz ermöglicht es, die Laufzeitumgebung (Java in der benötigten Version) und Server out-of-the-box mit der Webanwendung mitzuliefern und so von der Umgebung möglichst unabhängig autonom starten zu können – dieser Ansatz wird WebOnDisk-Technologie genannt.
Die Herausforderung …
Der Benutzer kennt die Details und Anforderungen nicht, die unsere Webanwendung benötigt. Es ist nicht zumutbar und auch fehleranfällig, zu verlangen, dass der Benutzer die Laufzeitumgebung und einen Servlet-Container einrichtet und konfiguriert, Ports einstellt usw. (besonders unter Windows sind Benutzer es nicht gewöhnt, Konfigurationsdateien zu editieren). Eine "webige" Anwendung ist gefordert, die out-of-the-box funktioniert und sich selbst konfiguriert. Natürlich muss die Anwendung auch ohne Administratorrechte und ohne Installation (bzw. von Read-Only-Medien gestartet) erwartungsgemäß arbeiten! Die Aufgabenstellung kristallisiert sich in folgenden Anforderungen heraus:
- Der Webanwendung soll die Java-Laufzeitumgebung in der benötigten Version zur Verfügung gestellt werden, unabhängig davon, ob Java auf dem Client-Rechner installiert ist. Die installierte Java-Version soll verwendet werden, soweit verfügbar, ansonsten nutzt die Webapp eine mitgelieferte JRE.
- Ein Servlet-Container soll gestartet werden, der JSP-Servlets, Struts- bzw. JSF-Anwendungen ausführen kann. Ein verfügbarer Port auf localhost soll ausgesucht werden, unter dem der Server die Webanwendung zur Verfügung stellt.
- Der Browser soll automatisch mit dem zur Laufzeit ermittelten URL und Port der eingerichteten dynamischen Webseite, die sofort nutzbar ist, gestartet werden.
- Nach Abschluss der Benutzersessions soll der Webserver heruntergefahren und die belegten Ressourcen wieder freigegeben werden.
- Eine erfolgreiche Anwendung wird auf vielen Rechnern mit unterschiedlichster Konfiguration eingesetzt. Dies verlangt nach einer möglichst fehlertoleranten und self-contained Anwendung. Ein hohes Hotline-Aufkommen (über 0,5 Prozent der Benutzer) verursacht nämlich bei 50.000 Kunden schon 250 Reklamationen! Kein Unternehmen kann sich heute viele verärgerte Kunden leisten!
… Lösungsmöglichkeiten ...
Die Anforderung, Java-(Web-)Anwendungen auf dem Desktop möglichst unkompliziert zu starten, stellt sich nicht zum ersten Mal. Es existieren bereits Möglichkeiten, die in Betracht gezogen werden können: RAP: Die Rich Ajax Platform (ein Eclipse-Plug-in) ist mit dem Anspruch angetreten, die Entwicklung von Webanwendungen auf dem Desktop zu unterstützen. Die von der Firma Innoopract entwickelte Architektur ist Open Source und steht somit jedem frei zur Verfügung, der Webanwendungen auf dem Desktop starten möchte. Die Idee des Frameworks, mit einer Codebasis Web- und Desktopanwendungen zu kompilieren, ist hervorragend. Leider gibt es noch ein Paar Hürden, die es in unserem Beispiel verhindern, die Technologie einzusetzen:
- Es gibt Funktionen, die nicht überall und transparent zur Verfügung stehen. So sind Mausereignisse in Webumgebungen nicht durchgängig verfügbar.
- Die Benutzerführung kann nicht immer konsistent umgesetzt werden. Beispiel: einen online und offline gleich funktionierenden Datei-Öffnen-Dialog gibt es nicht.
- Das Session-Handling kann nicht offline und online gleich gehandhabt werden.
- Eine gemeinsame Codebasis für beide Anwendungstypen ist nicht in jedem Fall möglich, da bestimmte Funktionen auf unterschiedlichen Plattformen verschiedene Interfaces implementieren müssen.
- Eine einfache Konfiguration der Oberfläche ist nur mit großem Aufwand möglich, da die Anwendung nicht auf HTML-Seiten basiert.
Java Web Start: Mithilfe der Java-Web-Start-Technologie ist es möglich, über das Internet kleine Anwendungen zur Verfügung zu stellen, die bei Bedarf heruntergeladen und gestartet werden. Die gestartete Anwendung benötigt keinen Browser. Die Technologie ist ein von Sun definierter Standard, der (prinzipiell) betriebssystemunabhängig zur Verfügung steht. Allerdings gibt es Ausschlusskriterien, die die Software nicht erfüllt, sodass auch diese Lösung nicht in Betracht gezogen werden kann:
- Die Technologie basiert nicht auf HTML/CSS/JSP/JSF, ist somit nicht flexibel anpassbar.
- Eine bereits installierte Java Runtime wird vorausgesetzt.
- Eignet sich nicht für größere Datenbestände, da ein Download von mehreren 100 MB Daten viel Zeit in Anspruch nimmt. Eine Auslieferung über CD-ROM ist nicht vorgesehen.
Alle bekannten Optionen, die plattformunabhängige Lösungen anbieten, weisen Nachteile auf, die die oben beschriebenen Anforderungen nicht erfüllen. Zum Glück gibt es im Java-Umfeld genug Open-Source-Projekte, die es erlauben, eine eigene Implementierung, basierend auf freier Software, selbst voranzutreiben. Es steht nichts im Wege, einen leichtgewichtigen Servlet-Container, wie Tomcat oder Jetty, in unsere Anwendung einzubinden, die Java-Laufzeitumgebung mitzuliefern und mit entsprechender Konfiguration zu starten.






