Ähnlich wie bei Applets bietet auch Java WebStart ein webzentriertes Anwendungsmodell, das ohne Softwareverteilung auskommt und bei dem Updates transparent und inkrementell zur Verfügung stehen. Zusätzlich steht Nutzern der WebStart Technologie jedoch eine sinnvolle Standard-API zur Verfügung, die weit über die Möglichkeiten von Applets hinausgeht. Insgesamt bietet WebStart somit das Beste aus beiden Varianten – ein leichtgewichtiger Ausbringungsprozess, der trotzdem die Einschränkungen der Anwendung gering hält.
Obwohl WebStart-Applikationen im Regelfall über den Browser gestartet werden sind
sie doch weit weniger stark mit diesem verwoben als Applets es sind. Dies reduziert
Komplexität und Risiko, da eine (zumeist unberechenbare) Komponente wegfällt. Die
API bietet darüber hinaus Möglichkeiten wie den
SingleInstanceService
, der es erlaubt, Dateien in eine
laufende Instanz zu laden – auch aus dem Browser.
Die Bereitstellung einer WebStart-Anwendung erfolgt mittels einer sogenannten
JNLP-Datei. Es handelt sich dabei um ein
XML-Format, das durch den Java Network Launching Protocol
(JNLP) Standard spezifiziert wird. Die Datei kann von
einem WebServer ausgeliefert und aus einer HTML-Seite
verlinkt werden. Desweiteren besteht die Möglichkeit, die Datei lokal auf der
Maschine des Nutzers abzulegen und die Applikation darüber zu starten. Über den
IntegrationService
der WebStart
API kann dem Nutzer zusätzlich die Möglichkeit gegeben
werden, die Anwendung in sein Betriebssystem – zum Beispiel durch einen
Desktop-Shortcut – zu integrieren.
Die JNLP-Datei bietet umfangreiche Einstellungsmöglichkeiten für die zu startende Anwendung. Im Gegensatz zu Applets können VM-Parameter pro WebStart-Anwendung spezifiziert werden. Die Parameter werden somit über die JNLP-File jedes Mal vom Server geladen.
Mittels JNLP können sowohl gewöhnliche Java Applikationen
als auch Applets gestartet werden. Die Bereitstellung der Klassen erfolgt im
Regelfall als jar
-Files. Um weniger Daten
zu übertragen besteht zusätzlich die Möglichkeit, jar-diff Dateien anzubieten –
diese können von solchen Clients verwendet werden, die bereits eine vorherige
Version als jar
in ihrem Cache besitzen.
Aufgrund des automatischen Zwischenspeicherns sind WebStart-Applikationen falls
gewünscht für den Offline-Einsatz geeignet.
Das Sicherheitskonzept von Java WebStart ist dem der Applets zunächst sehr
ähnlich: Die Anwendung läuft in einer eigenen Sandbox und kann
sicherheitsrelevante Funktionen nur eingeschränkt oder überhaupt nicht nutzen.
Über die WebStart API werden jedoch zusätzlich verschiedene
Services angeboten, die erweiterte Möglichkeiten bieten. So können
beispielsweise über den FileOpenService
Dateien, die vom
Nutzer ausgewählt werden, in einer (unsignierten) WebStart-Anwendung gelesen
werden. Es besteht dabei nur der Zugriff auf diese explizit zur Verfügung
gestellten Dateien, nicht aber auf das gesamte Dateisystem – ein hoher Grad an
Sicherheit bleibt somit gewährleistet.
Wie es für Applets der Fall ist, besteht auch für WebStart-Anwendungen die Möglichkeit, diese digital zu signieren. Liegt das entsprechende Zertifikat im Trust Store der ausführenden VM vor, so werden der Anwendung volle Rechte eingeräumt. Alternativ kann, wie auch bei Applets, die Default-Einstellung für Rechte unsignierter Anwendungen verändert werden.
Das Auslieferungspaket enthält, wie in „Web-basierte Beispiele“ beschrieben, eine vollständige WebStart-Demo-Applikation. Diese startet im Hintergrund einen eingebetteten WebServer, der die benötigten JNLP Dateien auf Anfrage aus einer JNLP-Template-Datei erstellt. Zu diesem Zweck wird die FreeMarker Template Engine verwendet.
Im Folgenden wird das verwendete JNLP-Template abgedruckt.
Anweisungen, die mit <#
beginnen, werden durch die Engine
verarbeitet und anhand der Template-Regeln durch konkrete Werte ersetzt.
Gleiches gilt für Variablen, die durch
${
gekennzeichnet werden. Auf diesem Weg erhält man die Möglichkeit, dynamische
Werte, die erst zur Laufzeit bekannt sind (also zum Beispiel die
URL eines zur Anzeige bestimmten Dokuments), in die
JNLP-Datei zu injizieren. Genauere Informationen zur
FreeMarker Template Engine finden sich im Internet unter http://freemarker.sourceforge.net/Variablenname
}
<#-- this file is a template file to be used with the FreeMarker Template engine. Anything starting with "<#" is a freemarker template and will be replaced for real XML by the engine. As a special case, "<#--" represents a freemarker comment. It will be ignored during processing and will not make it into the resulting file. Any ${...} names are variables for FreeMarker.--> <#-- ${codebase} is the URL from which jar files should be loaded --> <jnlp spec="1.0+" codebase="${codebase}"> <information> <title>jadice document platform ${project.version}</title> <vendor>levigo holding gmbh</vendor> <description>jadice document platform webstart demonstration</description> <icon href="demo-resources/res/jip.png" /> <offline-allowed /> </information> <security> <all-permissions /> </security> <resources> <!-- specify Java VM Version to use, as well as Xmx value --> <j2se version="1.6.0+" max-heap-size="512m"/> <!-- specify classpath elements --> <jar href="lib/jadice-documentplatform-all.jar"/> <jar href="lib/jadice-appbase.jar"/> <jar href="lib/jadice-demo-client.jar"/> <jar href="lib/jadice-demo-jnlp.jar"/> <jar href="lib/demo-license.jar"/> </resources> <application-desc main-class="JadiceJNLPDemoApplication"> <!-- using <argument>-tags, it is possible to supply args to the main method --> <#-- If a document exists, add an argument. Running demo application will check for such an argument and load document specified. --> <#if document??> <argument>documentURL=${codebase}/demo-docs/${document}</argument> </#if> </application-desc> </jnlp>