21.2.2 | Die JNLP-Datei |
Die Beschreibungsdatei für eine Anwendung ist in XML-Notation geschrieben und auf dem Webserver abgelegt, damit die entsprechende Internetseite auf diese verweise kann. Es ist darauf zu achten, dass diese Datei auf dem Webserver mit dem Mime-Type application/x-java-jnlp-file assoziiert ist. Daher haben diese XML-Dateien meist die Endung .jnlp. Beim Apache-Webserver erreicht man dies beispielsweise durch den Eintragapplication/x-java-jnlp-file JNLPin der Datei mime.types.
Möchte man den Inhalt dieser Datei dynamisch generieren, kann man beispielsweise eine Java Server Page dafür benutzen, solange diese den genannten Content-Type liefert.
In einer HTML-Seite könnte dann eine entsprechende Verknüpfung folgendermaßen angegeben werden:<a href="myappplication.jnlp">Hier starten</a>Möchte man hingegen eine Fehlermeldung bringen, wenn Java Web Start noch nicht installiert wurde, kann man folgenden JavaScript/VBScript-Code benutzen. Dieser dient lediglich als Beispiel und ist nur im Microsoft Internet Explorer und im Netscape Navigator 4.x lauffähig:<script language="Javascript" type="text/javascript"> var javawsInstalled = 0; var isIE = "false"; if (navigator.mimeTypes && navigator.mimeTypes.length) { if (navigator.mimeTypes['application/x-java-jnlp-file']) javawsInstalled = 1; } else isIE = "true"; function insertLink(url, name) { if (javawsInstalled) { document.write('<a href="'+url+'">'+ name+'</a>'); } else document.write( 'Java Web Start required'); } </script> <script language="VBScript" type="text/vbscript"> on error resume next If isIE = "true" Then If Not(IsObject(CreateObject( "JavaWebStart.IsInstalled"))) Then javawsInstalled = 0 Else javawsInstalled = 1 End If End If </script>
Wenn man nun die entsprechende Verknüpfung mithilfe des JavaScript-Aufrufes<script language="JavaScript" type="text/javascript"> insertLink ('Hier starten', 'myapplication.jnlp'); </script>
in die HTML-Seite einbaut, erscheint eine entsprechende Fehlermeldung (»Java Web Start wird benötigt«), wenn Java Web Start nicht installiert wurde. Diese Lösung funktioniert natürlich nur bei eingeschaltetem JavaScript. Ein alternativer Text sollte zwischen <noscript> und </noscript> aufgrund der Benutzerfreundlichkeit in der HTML-Datei nicht fehlen.
Die JNLP-XML-Datei kann dabei folgendermaßen aussehen:<?xml version="1.0" encoding="utf-8"?> <!-- JNLP File for SwingSet2 Demo Application --> <jnlp spec="1.0+" codebase="http://javaweb.eng.com/jaws/apps" href="swingset2.jnlp"> <information> <title>SwingSet2 Demo Application</title> <vendor>Sun Microsystems, Inc.</vendor> <homepage href="docs/help.html"/> <description>SwingSet2 Demo</description> <description kind="short">A demo of the capabilities of the Swing Graphical User Interface.</description> <icon href="images/swingset2.jpg"/> <offline-allowed/> </information> <security> <all-permissions/> </security> <resources> <j2se version="1.3"/> <jar href="lib/SwingSet2.jar"/> </resources> <application-desc main-class="SwingSet2"/> </jnlp>
Tabelle 21.1: Attribute des Elements jnlp Attribut Pflicht Beschreibung spec nein Standardwert 1.0+ bezeichnet die aktuelle Version der Spezifikation version nein Die Version der Datei und die Version der Applikation codebase nein Die Basis-URL, ab der relative Links gesucht werden href nein Die (ggf. relative) URL zu dieser Datei Das JNLP-Wurzelelement besteht neben den Attributen aus einem oder mehreren Informationsblöcken, ggf. Sicherheitsangaben, ggf. Ressourcen und eine der vier möglichen Applikationsformen Applet, Applikation, Komponente (Teil einer anderen Applikation) oder Installer.
Tabelle 21.2: Attribute des Elements information Attribut Pflicht Beschreibung locale nein Wenn angegeben (z.B. de_DE, s. java.util.Locale), werden die entsprechenden Unterelemente genommen, wenn der Benutzer die dementsprechende Sprache auf seinem System gewählt hat. Normalerweise verwendet man das information-Element ohne locale. Die dortigen Beschreibungen (Titel, Hersteller, Homepage, Beschreibung, Bild, Offline-Modus) können dann durch passende Informationen einer bestimmten Sprache überschrieben werden.
Der Titel gibt der Applikation eine verständliche Überschrift.
Der Hersteller der Applikation.
Die Homepage des Herstellers.
Tabelle 21.3: Attribute des Elements description Attribut Pflicht Beschreibung kind nein Die Art der Beschreibung. Es gibt one-line (einzeilige Beschreibung), short (Kurzbeschreibung) und tooltip. Längere Beschreibungen sollten eher auf der Homepage zu finden sein. Zeigt dem Benutzer eine Beschreibung zu der Applikation.
Tabelle 21.4: Attribute des Elements icon Attribut Pflicht Beschreibung href ja Die URL zu der Grafik im GIF- oder JPEG-Format. version nein Version der Grafik. Hat die vorher gespeicherte Version eine kleinere Nummer, wird das Bild neu geladen width nein Die Breite (in Pixeln) der Grafik. height nein Die Höhe der Grafik kind nein Die Art der Grafik. Der Standardwert ist default. Die anderen möglichen Werte sind selected (die Applikation wurde vom Benutzer angeklickt), disabled (der Benutzer hat die Applikation deaktiviert) und rollover (der Benutzer ist mit dem Mauszeiger auf der Applikation). depth nein Die Farbtiefe (8, 16, 24) in Bit. Es wird über diese Elemente - je nach Art (kind) - eine Grafik im Java Web Start Client angezeigt.
Steht dieses Element im information-Element, kann diese Applikation auch ohne offene Internetverbindung gestartet werden.
Wenn die Applikation signiert ist, können unter diesem Element die benötigten Sicherheitseinstellungen angefordert werden. Wenn dieses Element (und das entsprechende Unterelement) nicht angegeben ist, läuft die Applikation in der Applet-ähnlichen Sandbox, mit strengen Zugriffsrechten.
Wenn diese Option angegeben ist und die Applikation signiert ist, werden der Applikation alle Rechte eingeräumt.
Mit dieser Option möchte die Applikation die Zugriffsmöglichkeiten, die es als J2EE-Client benötigt. Damit darf die Applikation beispielsweise nicht auf lokale Ressourcen zugreifen, dafür aber auf alle Hosts auf allen Ports.
Tabelle 21.5: Attribute des Elements resources Attribut Pflicht Beschreibung os nein Wenn diese Ressourcen nur für ein bestimmtes Betriebssystem verwendet werden sollen, kann man dies über dieses Attribut angeben. Der Wert ist identisch mit der Angabe des JRE, wenn man System.getProperty("os.name") aufruft. arch nein Wenn diese Ressourcen nur für eine bestimmte Rechnerarchitektur verwendet werden sollen, kann man dies über dieses Attribut angeben. Der Wert ist identisch mit der Angabe des JRE, wenn man System.getProperty("os.arch") aufruft. locale nein Sind die Ressourcen länderspezifisch, kann man dies hier angeben (z.B. locale="DE_de"). Jede Applikation benötigt verschiedene, ggf. plattform- und länderspezifische Ressourcen. Man kann bei den Attributen auch mehrere Werte angeben, wobei diese durch Leerzeichen getrennt sein müssen. Treten im Betriebssystemnamen bereits Leerzeichen auf (z.B. Windows 95), so muss dieses Leerzeichen mit einem Blackslash gekennzeichnet werden (also Windows\ 95).
Das JAR-Archiv enthält Klassen, die zur Ausführung der Applikation nötig sind.
Tabelle 21.6: Attribute des Elements property Attribut Pflicht Beschreibung name ja Der Name einer Property value ja Der Wert der Property Benötigt die Applikation bestimmte Umgebungsvariablen, die mittels System.getProperty(String name) abgefragt werden, können diese hier eingestellt werden.
Tabelle 21.7: Attribute des Elements jar Attribut Pflicht Beschreibung href ja Die relative oder absolute URL zu der JAR-Datei version nein Die Version des JAR. Wenn die angegebene Version aktueller ist als eine bereits geladene Version, wird die alte Version aktualisiert. Die Form ist dabei x.y.z usw. main nein Gibt an, ob diese Ressource die Hauptklasse beinhaltet (true (Standard) oder false). Theoretisch muss nur diese JAR-Datei zum Ausführen geladen werden. download nein Es gibt hier zwei mögliche Werte: eager (Standard) und lazy. Dies gibt an, ob die Ressource vor dem Start (eager) der Applikation geladen werden muss oder nicht (lazy). Durch das zusätzliche Attribut part können Ressourcen gruppiert werden, so dass z.B. für den part sound auch die plattformspezifischen nativelibs mitgeladen würden. Die Entscheidung, ob ein als lazy eingetragenes JAR geladen werden soll, ist Sache des Classloaders. Wird eine Klasse nicht gefunden, muss dieser die passende JAR-Datei herunterladen (s. auch package). Zusätzlich kann auch über das API der Download gestartet werden. part nein Der willkürliche Name des Teils, zu dem dieses JAR gehört. Alle Bestandteile dieses part werden immer zusammen heruntergeladen. size nein Die Größe der Datei. Nützlich, wenn der JNLP-Client die Größe nicht bestimmen kann (weil z.B. der Webserver diese Information nicht liefert).
Das package-Element gibt die Abhängigkeiten von Paketnamen zu parts an. Wird ein entsprechender Paketname gefunden, werden alle Bestandteile dieses part geladen.
Tabelle 21.8: Attribute des Elements package Attribut Pflicht Beschreibung name ja Der Paketname (z.B. de.dpunkt) part ja Der Name des Teils, zu dem dieser Paketname gehört. recursive nein true oder false (Standard). Gibt an, ob dieses package-Element auch für Unterpaketnamen gilt.
Tabelle 21.9: Attribute des Elements j2se Attribut Pflicht Beschreibung version ja Die Version des JRE. Die Versionsnummer entspricht der üblichen Nummerierung von Java, wobei am Ende der Bezeichnung + oder * angehängt werden kann. Während + auch eine höhere Version einschließt, drückt * lediglich ein einfaches Wildcard aus. 1.2+ würde also auch 1.3 einschließen, während 1.2* nur Unterversionen kennzeichnet. href nein Die URL, unter der das JRE geladen werden kann. initial-heap-size nein Die Heap-Größe beim Start in Bytes. Man kann über den Appendix k bzw. m auch die Größe in Kilobytes bzw. Megabytes angeben. max-heap-size nein Die maximale Heap-Größe in Bytes. Man kann über den Appendix k bzw. m auch die Größe in Kilobytes bzw. Megabytes angeben. Über das j2se-Element kann man die unterstützten JREs angeben, wobei die bevorzugte Plattform als erstes angegeben sein sollte. Zu jedem j2se-Element kann man das Unterelement resources (s.o.) angeben. Damit kann man in Abhängigkeit von der Java-Version bestimmte Properties setzen oder zusätzliche Klassen einbinden.
Tabelle 21.10: Attribute des Elements extension Attribut Pflicht Beschreibung href ja Die URL, unter der diese Erweiterung heruntergeladen werden kann version nein Die Versionsnummer der Erweiterung name nein Der Name der Erweiterung Extensions sind Erweiterungen, die meist wiederum in einer JNLP-Datei beschrieben werden. Das ist typischerweise eine Component (s. component-desc) oder ein Installer (s. installer-desc).
Optional kann mithilfe des Unterelementes ext-download die Politik des Herunterladens von parts gesteuert werden.
Referenziert einen part aus der Extension-JNLP-Datei. Hierbei kann die Download-Politik überschrieben werden.
Tabelle 21.11: Attribute des Elements ext-download Attribut Pflicht Beschreibung ext-part ja Der Name des Parts in der referenzierten JNLP-Datei download nein eager (Standard) oder lazy. Überschreibt die Politik des part aus der referenzierten JNLP-Datei. part nein Der Name des part, der zu diesem Extension-Teil gehört. Wird also dieser part benötigt, wird dieser Teil der Extension mitgeladen.
Eine native Ressource. Die Verwendung dieses Elements macht nur Sinn, wenn das Vaterelement resources nur für eine bestimmte Plattform gilt.
Tabelle 21.12: Attribute des Elements nativelib Attribut Pflicht Beschreibung href ja Die URL zu der JAR-Datei mit der nativen Bibliothek. version nein Die Version der Library. download nein eager (Standard) oder lazy. Wenn lazy angegeben wurde, muss durch die Angabe vom Attribut part sichergestellt werden, dass die Library mitgeladen wird. size nein Die Größe der Datei. part nein Der Name des part, von dem die Library einen Teil darstellt.
Gibt die Form der Anwendung (Applikation) an. Zusätzlich können über das Kindelement Argumente angegeben werden.
Tabelle 21.13: Attribute des Elements application-desc Attribut Pflicht Beschreibung main-class nein Die Klasse, bei der die main-Methode aufgerufen wird. Wenn das Attribut nicht angegeben wurde, muss in der Manifest-Datei eines JAR diese Start-Klasse angegeben sein.
Möchte man der Applikation Parameter übergeben, kann man dies zwischen <argument> und </argument> angeben.
Gibt die Form der Anwendung (Applet) an. Über das Kindelement parameter können dem Applet noch Parameter übergeben werden.
Tabelle 21.14: Attribute des Elements applet-desc Attribut Pflicht Beschreibung main-class ja Die Klasse, die das Applet darstellt. name ja Der Name des Applet. width ja Die Breite des Applet in Pixeln. height ja Die Höhe des Applet in Pixeln. documentbase nein Die URL, die das Applet über getDocumentBase() liefert.
Dieses Element gibt die Parameter an, die das Applet über getParameter(String name) abfragen kann.
Tabelle 21.15: Attribute des Elements param Attribut Pflicht Beschreibung name ja Der Name des Parameters. value ja Der Wert des Parameters.
Dieses gibt lediglich an, dass es sich hier um eine Komponente handelt, die über das extension-Element integriert werden kann.
Gibt an, dass die Applikation ein Installer ist, der aufgerufen (in der main.class public static void main(String[] argv) werden muss.
Tabelle 21.16: Attribute des Elements installer-desc Attribut Pflicht Beschreibung main-class nein Die Hauptklasse, die für die Installation aufgerufen wird. Wenn dieses Attribut nicht angegeben wurde, muss in der Manifest-Datei eines JAR die main-Class angegeben sein.