Komponentenbasierte Softwareentwicklung Java Webstart Ausarbeitung zum Vortrag Java Web Start von Adrian Fülöp Fach: Komponentenbasierte Softwareentwicklung WS 06/07 Fachhochschule Osnabrück Adrian Fülöp (297545) -1- Komponentenbasierte Softwareentwicklung Java Webstart Inhaltsverzeichnis: 1. 2. 3. 4. 5. 6. 7. 8. Einführung Was ist Java Web Start Aktualisierungsmechanismus Mögliche Einsatzziele Sicherheit für den Anwender Das JNLP Beispielprogramm „Picupper“ Quellen, Links Adrian Fülöp (297545) -2- Komponentenbasierte Softwareentwicklung Java Webstart 1. Einführung In dieser Ausarbeitung wird beschrieben wie Java Web Start arbeitet und welche Vorteile es bei der Entwicklung von Software bieten kann. Auch sollen die Grenzen der Technologie dargestellt werden. Im Rahmen der Präsentation wurde eine Beispielapplikation entwickelt, die sich dieser Lösung bedient, um das Problem der Softwareverteilung zu lösen. 2. Was ist Java Web Start? Java Web Start ist eine Technologie, die die Verteilung von Software vereinfachen soll. Der Anwender soll dabei lediglich das Programm starten, wie er es von lokal installierten Anwendungen gewohnt ist. Dies erfolgt per Link auf dem Desktop, über das Startmenü oder über einen Link auf einer Website. Je nach dem wie der Programmierer der Software es wünscht. Im Unterschied zu Applets können hier vollwertige Java Anwendungen mit allen Rechten auf dem Lokalen Computer ausgeführt werden. Eine Einschränkung ist allerdings auch möglich. Der Übergang zwischen der Website und der Lokal ausgeführten Anwendung ist dabei fließend. Es wird seit der Version 1.2 mit der virtuellen Maschine mitgeliefert und ist somit auf jedem aktuellen Java fähigen Rechner bereits installiert. Besonders sinnvoll ist der Einsatz bei Anwendungen die ohnehin im Netzwerk arbeiten. So lässt sich sicherstellen, dass alle Anwender immer die neueste Version verwenden. Adrian Fülöp (297545) -3- Komponentenbasierte Softwareentwicklung Java Webstart 3. Der Aktualisierungsmechanismus Wird ein Programm das erste mal aufgerufen, werden zuerst alle benötigten JAR-Dateien von dem entsprechenden Server geladen und anschließend nur noch bei bedarf aktualisiert. Über ein Anzeigeprogramm kann man sehen, welche Anwendungen alles im Cache liegen und von wann sie sind (abb. Seite 3). Es ist auch möglich, bestimmte Programme zu löschen, wenn Sie nicht mehr gebraucht werden. Sollten sie dennoch erneut aufgerufen werden, lädt die virtuelle Maschine die entsprechenden Pakeges wieder vom Server herunter und speichert sie ab. Die Granularität mit der Java WS hier arbeitet, sind immer ganze Pakeges. Das Datum dieser Pakeges wird bei jedem Start der Anwendung überprüft um Veränderungen festzustellen. Von welchen Quellen es bezogen werden kann, wird in der JNLP-Datei festgelegt. Darin können auch mehrere Quellen angegeben werden, um eine Redundanz für höhere Ausfallsicherheit zu erzeugen. Der Vorteil hierbei, gegenüber proparitären Updatelösungen, die der Programmierer direkt in seine Applikation integriert, ist dass auch ohne eine alte Version zu besitzen der Anwender mit lediglich einem Link die Applikation installieren kann. Des weiteren ist das Verfahren bereits ausgereift und sehr schnell implementiert. Bei Java wird zum Bytecode des Programms immer eine Virtuelle Maschine benötigt die diesen Code ausführt. Dabei tritt in vielen Anwendungen das Problem auf, das die VM selbst sehr oft geändert wird. Dies kann dazu führen, dass eine Anwendung die Beispielsweise unter der Version JRE 1.4 getestet wurde unter der Folgeversion JRE 1.5 nicht mehr einwandfrei funktioniert. Auch für diese Problematik bietet Java WS Abhilfe indem es die gewünschte VM ebenfalls runterlädt. Das funktioniert in beide Richtungen. Zum einen kann eine neue Version geladen werden, sofern sie benötigt wird, als auch eine ältere Version. Die neu bezogene VM wird parallel zur vorhandenen installiert und beeinträchtigt somit keine anderen Programme. 4. Mögliche Einsatzziele Java WS Programme besitzen alle Vorteile die Java ohnehin hat. Dazu zählt große Plattformunabhängigkeit, wodurch die Programme für einen großen Benutzerkreis der auf verschiedenen Systemen arbeitet interessant sind. Bei sich häufig ändernder Software wird hier der komplette Patch- und Updateprozess automatisiert. 5. Sicherheit für den Anwender Ohne weiteres werden die Applikationen nur in einer sicheren Sandbox ausgeführt, die dem Benutzer garantiert, dass die Anwendung keinen Schaden auf seinem System anrichten kann. Für die Anwendung bedeutet dies, dass nur eine Begrenzte Funktionalität zur Verfügung steht. Z.B. ist ein Zugriff auf lokale Dateien nur über ein vordefiniertes User-Interface möglich. Um eine in Java WS ausgeführte Applikation zu einer Vollwertigen Anwendung zu machen ist es nötig den Programmcode zu signieren. Diese Signatur wird beim Start von der VM überprüft. Ein nachträgliches ändern des Codes ist danach nicht mehr möglich. Würde ein Adrian Fülöp (297545) -4- Komponentenbasierte Softwareentwicklung Java Webstart Angreifer versuchen einen manipuliert Code einem Anwender unterzuschieben, würde die Signaturprüfung fehlschlagen und das Programm nicht ausgeführt werden. Bei der ersten Ausführung wird dem Anwender angezeigt, dass es sich um ein gültiges Zertifikat handelt. Eine Manipulation durch Dritte ist somit ausgeschlossen. Jedoch muss er dem Hersteller der Software nach wie vor vertrauen. Wer überhaupt ein Zertifikat ausstellen darf um damit in einem späteren Schritt Anwendungen zu Signieren ist auf den Systemen bereits voreingestellt. Darunter fallen namhafte Unternehmen wie VeriSign oder Thawte, die allerdings Lizenzgebüren für ein Zertifikat verlangen. Für Kommerziell vertriebene Software sind diese Gebühren jedoch vertretbar. Zum erstellen von Testanwendungen besteht die Möglichkeit sich selbst ein Zertifikat zur Signierung von Anwendungen zu erstellen. Dazu stehen folgende Tools zur Verfügung. Zuerst benötigt man einen Keystore in dem das Zertifikat abgelegt wird. keytool -genkey -keystore <keystorebez.> -alias <name> Unter der in <keystorebez.> angegebenen Bezeichnung wird eine Datei angelegt, in der unter dem in alias angegebenen Namen eine art Zertifikat-Container eingerichtet wird. In diesem Schritt werden alle Information abgefragt, die den Hersteller betreffen und später vom Anwender eingesehen werden können. keytool -selfcert -keystore <keystorebez.> -alias <name> Mit der Option “selfcert” legt das Keytool ein neues Zertifikat an. jarsigner -keystore <keystorebez.> <…>.jar <name> Nun kann jedes JAR-Paket mit diesem Zertifikat signiert werden. Wie bereits erwähnt ist dies eine einfache Methode um Testanwendungen zu Signieren. Folglich wird beim Ausführen eine Warnmeldung ausgegeben, da das Zertifikat von einer nicht bekannten Einrichtung stammt. 6. Das JNLP JNLP steht für „Java Network Launching Protocol“. Es ist ein offener Standard der beschreibt wie der Programmcode übertragen wird und wie die Parameter für die Sandbox bzw. VM festgelegt werden. Im Mittelpunkt steht dabei die JNLP-Datei. Dazu wird XML verwendet. Die folgende JNLP-Datei ist von dem Beispielprogramm aus der Präsentation. Adrian Fülöp (297545) -5- Komponentenbasierte Softwareentwicklung Java Webstart <?xml version="1.0" encoding="utf-8"?> <!-- JNLP File for picupper Application --> <jnlp spec="1.5+" codebase=“http://picupper.nathon.de/“ href="apps/picupper.jnlp"> <information> <title>Picupper beta</title> <vendor>Partypics, Inc.</vendor> <homepage href="go2page.html"/> <description>Picupper beta</description> <description kind="short">no description so far</description> <icon href="apps/logo_pp.jpg"/> <icon kind="splash" href="apps/logo_pp.jpg"/> <offline-allowed/> </information> <security> <all-permissions/> </security> <resources> <j2se version="1.4.2+" java-vm-args="-esa -Xnoclassgc"/> <jar href="apps/picupper.jar"/> </resources> <application-desc main-class="user_interface.MainGUI" /> </jnlp> Wichtige Tags sind: • <jnlp codebase> • • • • • Adresse des Server. Alle weitern Angaben sind relativ zu diesem punkt <hompage href> HTML Seite zu der weitergeleitet werden soll <offline-allowed> Anwendung darf auch ohneNetzverbindung gestartet werden. <security> Mit <all-permissions> wird die Application nicht in einer Sandbox ausgeführt. <resources> Hier wird angegeben welche VM und welche eigenen Pakeges für das Programm benötigt werden. <application-desc> Startklasse des Programms Adrian Fülöp (297545) -6- Komponentenbasierte Softwareentwicklung Java Webstart 7. Beispielprogramm „Picupper“ Das Programm dient dazu auf einfache Weise .jpg Dateien auf einen FTP-Server zu laden. Nach dem Start können über einen JFileChoser oder per Drag and Drop Bilddateien hinzugefügt werden. Dieser Vorgang ist nur möglich, da das Programm als vollwertige Applikation ausgeführt wird. Im nächsten Schritt werden diese Dateien auf einen im Programm vorgegebenen FTP-Server geladen. Derzeit wird es testweise für eine online Bildergallerie eingesetzt. Besonderer Vorteil bei der Verwendung von Java WS ist, dass jeder Besucher der Website durch einfaches klicken eines Link seine eigenen Inhalte veröffentlichen kann. Unter folgender Adresse kann das Programm aufgerufen werden: http://picupper.nathon.de/apps/picupper.jnlp Adrian Fülöp (297545) -7- Komponentenbasierte Softwareentwicklung Java Webstart 8. Links • www.sun.com o JWS_White_Paper.pdf • http://java.sun.com/j2se/1.5.0/docs/guide/javaws/developersguide/overview.html#jws • http://java.sun.com/j2se/1.5.0/docs/guide/javaws/developersguide/development.html Developer Guide http://java.sun.com/j2se/1.5.0/docs/guide/javaws/developersguide/overview.html#jws Jnlp demo http://java.sun.com/j2se/1.5.0/docs/guide/javaws/developersguide/development.html Adrian Fülöp (297545) -8-