21.1.4 | Extensions |
Seit Java 1.3 ist es möglich, Erweiterungen als JAR-Dateien automatisiert in jre/lib/ext zu installieren. Diese Erweiterungen besitzen eine Versionsnummer und müssen signiert sein.
Um eine solche Extension zu erzeugen, muss die Manifest-Datei des JARs um folgende Attribute erweitert werden (hier als Beispiel die Extension javax.help):Extension-Name: javax.help Specification-Vendor: Sun Microsystems, Inc Specification-Version: 1.0 Implementation-Vendor-Id: com.sun Implementation-Vendor: Sun Microsystems, Inc Implementation-Version: 1.0.3In dem entsprechenden Applet-JAR, welches diese Extension benötigt, werden folgende Zeilen in die Manifest-Datei eingefügt (hier neben javax.help auch javax.3d):Extension-List: javahelp java3d javahelp-Extension-Name: javax.help javahelp-Specification-Version: 1.0 javahelp-Implementation-Version: 1.0.3 javahelp-Implementation-Vendor-Id: com.sun javahelp-Implementation-URL: http://java.sun.com/products/stdext/javahelp.jar java3d-Extension-Name: javax.3d java3d-Specification-Version: 1.0 java3d-Implementation-Version: 1.2.1 java3d-Implementation-Vendor-Id: com.sun java3d-Implementation-URL: http://java.sun.com/products/stdext/java3d.jarHierbei ist zu beachten, dass alle JAR-Dateien, auch die des Applets, signiert sein müssen.
Ist die Extension noch nicht installiert oder die Versionsnummer der vorhandenen kleiner, wird die Extension von der angegebenen URL geladen. Ist in der Manifest-Datei das Attribut Main-Class gesetzt, wird der dort angegebene Installer aufgerufen (durch Aufruf der main-Methode). Fehlt das Attribut, wird das JAR einfach in jre/lib/ext/ kopiert.
Es ist zudem möglich, plattformspezifische Implementierungen zu laden. Dafür kann an beliebiger Steller in der ImplementationURL der Parameter $(os-name)$ eingefügt werden; er wird beim Laden durch den Betriebssystemnamen (die VM Property os.name) des Clients ersetzt.
Diesen Mechanismus kann man sich für die eigene Applikation zunutze machen. Hierbei wird die gesamte Applikation als Extension verpackt. Eine zweite JAR-Datei, welche lediglich eine Ableitungsklasse des Applets aus dem Haupt-JAR beinhaltet, wird in der HTML-Seite referenziert. Diese JAR-Datei muss dann nur noch um die Abhängigkeit zur Extension in der Manifest-Datei erweitert werden.
Lädt der Benutzer nun die erste JAR-Datei, wird die zweite (die Extension) automatisch permanent installiert. Nur die erste - fast leere - JAR-Datei wird bei jedem Laden des Applets neu heruntergeladen.
Ändert sich in dem Programm etwas, müssen in beiden JAR-Dateien die Versionsnummern hochgesetzt werden (die JAR-Dateien mit neuen Manifest-Dateien also neu generiert werden). Das Plug-in bemerkt nun, dass die gecachte Version der Extension veraltet ist, und lädt die neue Version herunter, wodurch diese wieder permanent installiert wird.