Neuerungen im JDK 1.4 : Die Java Logging API und Java Web Start



Ähnliche Dokumente
Programmiermethodik. Übung 13

Die Programmiersprache Java. Dr. Wolfgang Süß Thorsten Schlachter

Anleitung mtan (SMS-Authentisierung) mit SSLVPN.TG.CH

Übung: Verwendung von Java-Threads

Installation von NetBeans inkl. Glassfish Anwendungs-Server

Handbuch. timecard Connector Version: REINER SCT Kartengeräte GmbH & Co. KG Goethestr Furtwangen

Powermanager Server- Client- Installation

Um ein solches Dokument zu erzeugen, muss eine Serienbriefvorlage in Word erstellt werden, das auf die von BüroWARE erstellte Datei zugreift.

Lizenzen auschecken. Was ist zu tun?

Lokale Installation von DotNetNuke 4 ohne IIS

INHALT 1. INSTALLATION DES V-MODELL XT UNTER WINDOWS 7 2. INSTALLATION DES V-MODELL XT UNTER WINDOWS VISTA

Java: Vererbung. Teil 3: super()

Anleitung Grundsetup C3 Mail & SMS Gateway V

Programmierkurs Java

INSTALLATION DES V-MODELL XT UNTER WINDOWS VISTA

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Universal Dashboard auf ewon Alarmübersicht auf ewon eigener HTML Seite.

Lizenz-Server überwachen

How-to: Webserver NAT. Securepoint Security System Version 2007nx

Verwendung des Terminalservers der MUG

Web Sockets mit HTML5. Quelle:

Einrichtung des Cisco VPN Clients (IPSEC) in Windows7

Kleines Handbuch zur Fotogalerie der Pixel AG

Herzlich Willkommen bei der nfon GmbH

GEORG.NET Anbindung an Ihr ACTIVE-DIRECTORY

How to install freesshd

Computeria Solothurn

Hinweise zum Update des KPP Auswahltools (Netzwerkinstallation) auf Version 7.2

2. ERSTELLEN VON APPS MIT DEM ADT PLUGIN VON ECLIPSE

Remote Method Invocation

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER

DVD Version 9.1. Netzwerkinstallation + VDE-Admin-Tool.

25 Import der Beispiele

1 Installation QTrans V2.0 unter Windows NT4

Advoware mit VPN Zugriff lokaler Server / PC auf externe Datenbank

Konfiguration von Igel ThinClients fu r den Zugriff via Netscaler Gateway auf eine Storefront/ XenDesktop 7 Umgebung

Anleitung zur Nutzung des SharePort Utility

COSA. Portal Client Installation JAVA J2SE / JRE Version 1.4.2_09, Stand Copyright

Step by Step Remotedesktopfreigabe unter Windows Server von Christian Bartl

Task: Nmap Skripte ausführen

System-Update Addendum

EKF Software Server. Handbuch. Version 2.1. Hersteller: 2008 mesics gmbh Berliner Platz Münster info@mesics.de

mobilepoi 0.91 Demo Version Anleitung Das Software Studio Christian Efinger Erstellt am 21. Oktober 2005

4D Server v12 64-bit Version BETA VERSION

2. Einrichtung der ODBC-Schnittstelle aus orgamax (für 32-bit-Anwendungen)

Update und Konfiguraton mit dem ANTLOG Konfigurations-Assistenten

Erfahrungsbericht Installation von OpenOffice.org2 auf Terminalservern mit Citrix Metaframe

Übungen Programmieren 1 Felix Rohrer. Übungen

Durchführung der Datenübernahme nach Reisekosten 2011

Step by Step Webserver unter Windows Server von Christian Bartl

Upgrade auf die Standalone Editionen von Acronis Backup & Recovery 10. Technische Informationen (White Paper)

ecaros-update 8.2 Update 8.2 procar informatik AG 1 Stand: DP 02/2014 Eschenweg Weiterstadt

Umstellung VPSMail von Java-Web-Start auf Installer

Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten

.htaccess HOWTO. zum Schutz von Dateien und Verzeichnissen mittels Passwortabfrage

ACDSee Pro 2. ACDSee Pro 2 Tutorials: Übertragung von Fotos (+ Datenbank) auf einen anderen Computer. Über Metadaten und die Datenbank

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Programmierung für Mathematik (HS13)

ecaros2 Installer procar informatik AG 1 Stand: FS 09/2012 Eschenweg Weiterstadt

Kommunikations-Management

Kommunikations-Parameter

Backup der Progress Datenbank

Überprüfung der digital signierten E-Rechnung

Avira Support Collector. Kurzanleitung

Version NotarNet Bürokommunikation. Bedienungsanleitung für den ZCS-Import-Assistenten für Outlook

Betriebshandbuch. MyInTouch Import Tool

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Seite 1 von 14. Cookie-Einstellungen verschiedener Browser

PRAXISMANAGEMENT FÜR DIE ZAHNARZTPRAXIS, MKG - CHIRURGIE UND KLINIK PRO X DENT MKG ZMK UMSTELLUNG DER INSTALLATION AUF NETZLAUFWERK

Einrichten eines Postfachs mit Outlook Express / Outlook bis Version 2000

.procmailrc HOWTO. zur Mailfilterung und Verteilung. Stand:

Meldung Lokale Anwendung inkompatibel oder Microsoft Silverlight ist nicht aktuell bei Anmeldung an lokal gespeicherter RWE SmartHome Anwendung

Installationsanleitung Mehrplatz-/Netzwerk Hypo Office Banking

Installationsanleitung für CashPro im Mehrbenutzerzugriff/Netzwerkbetrieb

OpenVPN unter Linux mit KVpnc Stand: 16. Mai 2013

Wählen Sie bitte START EINSTELLUNGEN SYSTEMSTEUERUNG VERWALTUNG und Sie erhalten unter Windows 2000 die folgende Darstellung:

Sophia Business Leitfaden zur Administration

Psyprax GmbH. Netzwerk Installation unter XP. Wichtig für alle Netzwerkinstallationen: Psyprax GmbH

Formular»Fragenkatalog BIM-Server«

Persönliches Adressbuch

SSH Authentifizierung über Public Key

Online Newsletter III

Erstellen eines Screenshot

AppCenter Handbuch August 2015, Copyright Webland AG 2015

Automatische Installation (wenn das SSO-Applet nicht vorhanden ist)! Abbildung 1:Auswahldialog für Installationslaufwerk

Installation mit Lizenz-Server verbinden

Webbasierte Installation des Cisco AnyConnect VPN-Client 3.1 unter Linux

Samsung Large Format Display

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Einführung in Javadoc

Kommunikations-Management

Folgende Einstellungen sind notwendig, damit die Kommunikation zwischen Server und Client funktioniert:

MSDE 2000 mit Service Pack 3a

Freigabe der Windows-Firewall und Verknüpfung der Pfade für die Druckvorlagen

Transkript:

Neuerungen im JDK 1.4 : Die Java Logging API und Java Web Start Projektarbeit SommerSemester 2002 von Derk Wesemann Diese Projektarbeit dient dazu, einen kurzen Überblick über neue Bestandteile im aktuellen Java Development Kit 1.4 zu geben. Im ersten Teil werden die Möglichkeiten der neuen Java Logging API besprochen und deren Umsetzung anhand eines einfachen Beispiels erläutert. Der zweite Abschnitt behandelt die Funktionsweise des Produktes Java Web Start und beschreibt mögliche Anwendungsfälle. Inhalt : - Die Java Logging-API Seite 2 - Beispielprogramm: SimpleServer Seite 4 - Beispielprogramm: LogHandler Seite 7 - Beispielprogramm: SimpleClient Seite 8 - Aussehen der erstellten Log-Datei Seite 11 - Klassendiagramm Seite 12 - Sequenzdiagramm: SimpleServer Seite 13 - Sequenzdiagramm: SimpleClient Seite 14 - Das Produkt Java Web Start Seite 15 - Anhang Seite 18

Die Java Logging API Das Logging an sich dient der Ablaufdokumentation einer Anwendung. Diese Dokumentation bietet bei eventuell auftretenden Problemen oder Fehlern dann eine einfache Möglichkeit zur Problemfindung und Problembehebung, speziell in Situationen wo kein Debugger verwendet werden kann. Bisher mussten diese Mechanismen jedoch aufwendig in den jeweiligen Java-Anwendungen implementiert werden, als einzige einfache Möglichkeit bot sich das häufig verwendete System.out.println an. An dieser Stelle setzt nun die neue Logging API an und ermöglicht es Entwicklern, mit verhältnismäßig geringem Aufwand Log-Nachrichten in der jeweilig gewünschten Form zu erzeugen.grundsätzlich besteht die Logging API ( java.util.logging ) aus den folgenden Klassen: Allgemein: ErrorManager Level Logger LoggingPermission LogManager LogRecord Handler: ConsoleHandler FileHandler Handler MemoryHandler SocketHandler StreamHandler Formatter: Formatter SimpleFormatter XMLFormatter Interfaces: Filter Der Rahmen dieser Projektarbeit lässt es leider nicht zu, sich mit allen Klassen auseinander zu setzen. Im Folgenden werden daher nur diejenigen behandelt, die zum Erstellen von Log-Nachrichten unabdingbar sind und am häufigsten verwendet werden.

Die Java Logging API Die am meisten verwendete Komponente der Logging API ist das sogenannte Logger- Objekt. Es lässt sich am schnellsten für die meisten Projekte adaptieren und erzeugt aus der ihm übergebenen Textzeile ein LogRecord-Objekt. Dieses Objekt kann dann einem der oben aufgeführten Handler übergeben werden, welche dann das LogRecord-Objekt entsprechend ihrer Funktion darstellen, im Falle des FileHandlers z.b. in Form einer Datei. Das Aussehen der Datei, bzw. ihre Formatierung ist vom gewählten Handler und Formatter abhängig. Der Standard-Formatter für den FileHandler ist beispielsweise der XML-Formatter, das bedeutet die LogRecords werden in XML- Tags ausgegeben. Eine andere Variante wäre der SimpleFormatter, der eine zusammenhängende Textausgabe bewirkt. Das folgende Diagramm veranschaulicht den Prozess des so beschriebenen Loggings: Jedes LogRecord-Objekt hat einen dazugehörigen Level, welcher die Wichtigkeit des Objektes beschreibt und darüber entscheidet, ob das Objekt ausgegeben wird oder nicht. Die folgenden Level sind durch die Logging API vorgegeben: severe ( als höchste Priorität ) warning info config fine finer finest ( als niedrigste Priorität ) Zusätzlich gibt es einen definierten Level all, welcher das Loggen aller Objekte zulässt. Sollte dem Logger-Objekt kein Level zugewiesen werden, gilt als Grundeinstellung der Level info, das heißt, alle LogRecord-Objekte welche einen geringeren Level aufweisen, werden nicht an den Handler weitergegeben. Der Sinn dieser Level besteht darin, den Verarbeitungsaufwand für das Loggen einer Anwendung den jeweiligen Gegebenheiten anzupassen. So kann z.b. ein Logger- Objekt während der Entwicklung eines Programms hochauflösende Log-Einträge zur Überprüfung des Programms erstellen, erzeugt jedoch während der späteren Anwendung nur noch einen Bruchteil davon. Dies kommt natürlich der Geschwindigkeit des Programms zugute und lässt gleichzeitig die Möglichkeit zur späteren ausführlichen Diagnose, durch einfaches Setzen einer Variablen. Zur besserem Veranschaulichung des eben Erklärten bietet sich das folgende Beispielprogramm an. Es beinhaltet eine einfache Client/Server-Anwendung. Über den Client wird eine Nachricht in Form eines Strings erstellt und per TCP/IP- Protokoll an den Server versendet. Dieser liest die Nachricht, stellt sie auf dem Bildschirm dar und schreibt Inhalt und Absender der Nachricht in eine Log- Datei zur späteren Ansicht.

Quelltext für Klasse SimpleServer // SimpleServer - einfaches Server-Testprogramm für die Java Logging API // Importieren der notwendigen Bibliotheken import java.net.*; import java.io.*; import java.util.logging.*; public class SimpleServer { // Variablen // Für den Client: public static Socket mysocket; // Der Client-Sockel public static InetAddress ClientIpNumber; // Die Client-IP-Adresse public static String ClientAddress; // Der Name des Clients public static int ClientPort; // Die Port-Nummer des Clients // Für den Server public static ServerSocket myserversocket; // Der Server-Sockel public static InetAddress ServerIpNumber; // Die server-ip-adresse public static String ServerAddress; // Der Name des Servers public static int ServerPort; // Die Port-Nummer des servers // Der Datenstrom vom Client private DataInputStream streamin; // Methoden public SimpleServer(int port) { try { // Bestimmung der eigenen Host-Adresse ServerIpNumber = ServerIpNumber.getLocalHost(); ServerAddress = ServerIpNumber.getHostName(); System.out.println( Binding to port + port +, please wait... ); // Speichern der Server-Port-Nummer ServerPort = port; // Ein Server-Sockel-Objekt auf dem oben bestimmten Host aufsetzen myserversocket = new ServerSocket(port, 20, ServerIpNumber); System.out.println( Server started: +ServerAddress+, port : +ServerPort); System.out.println( Waiting for a client... ); // Anbindung an Client ermöglichen mysocket = myserversocket.accept();

Quelltext für Klasse SimpleServer ( Forts. ) // Bestimmung des Namens, des Ports und der Adresse des Clients ClientIpNumber = mysocket.getinetaddress(); ClientAddress = ClientIpNumber.getHostName(); ClientPort = mysocket.getlocalport(); System.out.println( Client accepted: +ClientAddress+, port : +ClientPort); open(); // Aufruf der Methode open, siehe unten // Erzeugung eines Logger-Objektes aus der Klasse loghandler LogHandler.newLogger(); // Erstellung von Log-Nachrichten auf dem Level INFO : LogHandler.myLogger.info( Logrecord generated by class SimpleServer.java ); LogHandler.myLogger.info( origin = +SimpleServer.ClientAddress+, port = +SimpleServer.ClientPort); // Einlesen des Datenstroms vom Client bis die Textzeile das Wort exit enthält boolean done = false; while (!done) { try { // Einlesen des Datenstroms im unicode-format String line = streamin.readutf(); // Ausgabe der Textzeile auf die Konsole System.out.println(line); // Weitergabe der Textzeile an die Klasse LogHandler als LogRecord-Objekt LogHandler.myLogger.finer( message from client +ClientAddress+ : +line); // Abbruch, wenn die Textzeile exit enthält done = line.equals( exit ); // Falls Fehler beim Einlesen aufgetreten ist catch(ioexception ioe) { done = true;

Quelltext für Klasse SimpleServer ( Forts. ) // Ausgabe weiterer Log-Nachrichten auf Level FINE : LogHandler.myLogger.fine( This log message was sponsored by Sun Microsystems Inc. ); // Aufruf der Methode writelogfile, siehe Klasse LogHandler LogHandler.writeLogFile(); close(); // Aufruf der Methode close, siehe unten catch(ioexception ioe) { System.out.println(ioe); public void open() throws IOException { // Erzeugung des Datenstrom-Objektes, welches die Textzeile vom Client ein liest streamin = new DataInputStream(newBufferedInputStream(mySocket.getInputStream())); public void close() throws IOException { // Client-Sockel schliessen mysocket.close(); // Eingehenden Datenstrom schliessen streamin.close(); public static void main(string args[]) { // Initialisierung der ServerSocket-Variablen SimpleServer myserversocket = null; // Abbruch, falls unpassende Anzahl an Argumenten eingegeben wird if (args.length!= 1) System.out.println( Usage: java SimpleServer port ); else // Erzeugung des ServerSocket-Objektes mit dem zu verwendenden Port als Argument myserversocket = new SimpleServer(Integer.parseInt(args[0]));

Quelltext für Klasse LogHandler // LogHandler - Aufruf von Logger und Handler für die Klasse SimpleServer // Importieren der erforderlichen Bibliotheken import java.util.logging.*; import java.io.*; import java.lang.*; public class LogHandler { // Variablen // Das Logger-Objekt public static Logger mylogger; // Datei- und Speicher-Handler für den Logger public static FileHandler myfilehandler; public static MemoryHandler mymemoryhandler; // Methoden // Zur Initialisierung der logger und Handler: public static void newlogger() throws IOException { // Erzeugung eines Logger-Objekts mit einem bestimmten Namen mylogger = Logger.getLogger( SimpleServer.LogHandler ); // Erzeugung eines FileHandler-Objekts, welches die beschriebene Datei anlegt myfilehandler = new FileHandler( c:/logrecords/log.htm ); // Erzeugung eines MemoryHandler-Objekts. // Bis zu 50 LogRecord-Objekte werden zwischengespeichert, // alle LogRecords, deren Level grösser als finer ist // werden dem FileHandler übergeben mymemoryhandler = new MemoryHandler(myFileHandler, 50, Level.FINER); // MemoryHandler mit dem Logger verknüpfen mylogger.addhandler(mymemoryhandler);

Quelltext für Klasse LogHandler ( Forts. ) // Zur Initialisierung der Level und zum Schreiben der Datei: public static void writelogfile() throws IOException { // Logging-Level für das Logger-Objekt setzen mylogger.setlevel(level.finer); // Schreiben des Speicherinhaltes und Schliessen der Handler try { mymemoryhandler.flush(); mymemoryhandler.close(); myfilehandler.close(); // Falls keine Schreibrechte vorhanden sind um die Datei zu schliessen catch (SecurityException se) { System.out.println(se); Quelltext für Klasse SimpleClient // SimpleClient - einfache Client-Anwendung zum Versenden von Textzeilen an einen Server // Importieren der erforderlichen Bibliotheken import java.net.*; import java.io.*; public class SimpleClient { // Variablen // Sockel des Servers, der erreicht werden soll (IP-Nummer und Port) private Socket mysocket; // Datenstrom von der Tastatur private DataInputStream streamin; // Datenstrom zum Server private DataOutputStream streamout; // Zu übertragende Textzeile public String line = ;

Quelltext für Klasse SimpleClient ( Forts. ) // Methoden public SimpleClient(String servername, int serverport) { System.out.println( Establishing connection. Please wait... ); try { // Verbindungsaufbau zum Server servername, port serverport mysocket = new Socket(serverName, serverport); System.out.println( Connected: + mysocket); start(); // Aufruf der Methode start, siehe unten //Falls Name oder IP-Nummer nicht erreichbar sind catch(unknownhostexception uhe) { System.out.println( Host unknown: + uhe.getmessage()); catch(ioexception ioe) { System.out.println( Unexpected exception: + ioe.getmessage()); // exit in der Textzeile bewirkt Abbruch while (!line.equals( exit )) { try { // Einlesen der Tastaturzeile line = streamin.readline(); // Schreiben der Tastaturzeile in den DataOutputStream (unicode-format) streamout.writeutf(line); // Auslesen des DataOutputStreams an den Server streamout.flush(); // Falls Fehler bei Lese-/Schreibvorgang catch(ioexception ioe) { System.out.println( Sending error: + ioe.getmessage()); stop(); //Aufruf der Methode stop, siehe unten public void start() throws IOException { // Initialisierung der Variablen für Input- und OutputStreams // Zuordnung des InputStreams zur Konsole (System.in) streamin = new DataInputStream(System.in); // Zuordnung des OutputStreams zum Server (Name und Port) streamout = new DataOutputStream(mySocket.getOutputStream());

Quelltext für Klasse SimpleClient ( Forts. ) public void stop() { try { // Schliessen der Streams und des Sockets streamin.close(); streamout.close(); mysocket.close(); // Falls ein Stream oder der Socket nicht geschlossen wurde catch(ioexception ioe) { System.out.println( Error closing... ); public static void main(string args[]) { // Erzeugung des SimpleClient-Variablen, Initialwert null SimpleClient client = null; // Falls die erforderlichen Variablen nicht eingegeben wurden if (args.length!= 2) System.out.println( Usage: java SimpleClient host port ); else // Initialisierung des SimpleClient-Objektes mit den Parametern servername, serverport client = new SimpleClient(args[0], Integer.parseInt(args[1]));

Aussehen der erstellten Log-Datei <?xml version="1.0" encoding="windows-1252" standalone="no"?> <!DOCTYPE log SYSTEM "logger.dtd"> <log> <record> <date>2002-05-27t14:26:10</date> <millis>1022502370440</millis> <sequence>0</sequence> <logger>simpleserver.loghandler</logger> <level>info</level> <class>simpleserver</class> <method><init></method> <thread>10</thread> <message> Logrecord generated by class SimpleServer.java</message> </record> <record> <date>2002-05-27t14:26:10</date> <millis>1022502370990</millis> <sequence>1</sequence> <logger>simpleserver.loghandler</logger> <level>info</level> <class>simpleserver</class> <method><init></method> <thread>10</thread> <message> origin = MURPHY, port = 5100</message> </record> <record> <date>2002-05-27t14:26:14</date> <millis>1022502374340</millis> <sequence>2</sequence> <logger>simpleserver.loghandler</logger> <level>finer</level> <class>simpleserver</class> <method><init></method> <thread>10</thread> <message>message from client MURPHY : Nachricht1</message> </record> <record> <date>2002-05-27t14:26:17</date> <millis>1022502377690</millis> <sequence>3</sequence> <logger>simpleserver.loghandler</logger> <level>finer</level> <class>simpleserver</class> <method><init></method> <thread>10</thread> <message>message from client MURPHY : Nachricht2</message> </record> <record> <date>2002-05-27t14:26:19</date> <millis>1022502379670</millis> <sequence>4</sequence> <logger>simpleserver.loghandler</logger> <level>finer</level> <class>simpleserver</class> <method><init></method> <thread>10</thread> <message>message from client MURPHY : exit</message> </record> <record> <date>2002-05-27t14:26:19</date> <millis>1022502379720</millis> <sequence>5</sequence> <logger>simpleserver.loghandler</logger> <level>fine</level> <class>simpleserver</class> <method><init></method> <thread>10</thread> <message> This log message was sponsored by Sun Microsystems Inc. </message> </record> </log>

Klassendiagramm für SimpleServer und SimpleClient

Sequenzdiagramm für Klasse SimpleServer

Sequenzdiagramm für Klasse SimpleClient

Das Produkt Java Web Start Java Web Start ist ein fester Bestandteil des neuen Java Development Kits 1.4. Der Sinn und Zweck von Java Web Start besteht darin, Anwendungen über ein Netzwerk zur Verfügung zu stellen, ohne daß diese auf dem jeweiligen Client- Rechner installiert werden müssen. In dieser Hinsicht kann das Produkt als eine Art Erweiterung zu den bisher verwendeten Java-Applets verstanden werden. Java Web Start ist eine Applikation und als solche auf jedem System lauffähig, welches die Java2-Plattform unterstützt. Dadurch bietet es gegenüber den Applets entscheidende Vorteile, da es nicht auf einen Browser und das entsprechende Java Plug-In angewiesen ist. Für Entwickler bedeutet dies, daß sie bei der Erstellung ihrer Anwendung nicht auf unterschiedliche Versionen des Java Plug-Ins Rücksicht nehmen müssen. Ein weitere Vorteil ist, daß bei jedem Start einer Anwendung eventuelle Updates automatisch ausgeführt werden, der Anwender arbeitet also immer mit der aktuellen Version. Vorbereitungen auf der Serverseite Als Voraussetzung für ein lauffähiges Programm werden hier zwei grundsätzliche Dinge benötigt: Zum Einen müssen alle Klassen, Bilddateien und sonstigen erforderlichen Dateien in ein oder mehrere JAR-Archive gepackt werden, die dann via HTTP zur Verfügung stehen. Die zweite erforderliche Komponente ist eine spezielle Datei mit der Endung.jnlp. jnlp steht für Java Network Launch Protocol und enthält die Informationen, die Java Web Start benötigt um die JAR-Archive zu finden und auszuführen. Als Format für diesen Dateityp wird XML verwendet. Das folgende Beispiel zeigt, wie eine solche Datei aussehen könnte und erläutert die jeweiligen Tags: <?xml version= 1.0" encoding= UTF-8"?> Das codebase -Attribut definiert die Verzeichnisstruktur, in der die Archive gefunden werden können. Dies kann auf einem Server sein (HTTP://) oder auch auf einem lokalen Laufwerk (FILE:///). <jnlp codebase=http://www.companysite.com/javaapp> href bezeichnet den eigenen Dateinamen. Dieser wird vom Web Start Application Manager weiterverwendet. <href= clientapp.jnlp > Der information -Tag bezeichnet den Titel der Anwendung, den Hersteller und ermöglicht Zusätze wie die Angabe der Homepage des Herstellers oder die Verwendung eines best. Logos für eventuell erstellte Shortcuts. <information> <title>this is my company s Java client application</title> <vendor>company name</vendor> <icon href= companylogo.gif /> <homepage ref= reference/tips.html > <offline-allowed/> </information>

Das Produkt Java Web Start Mehrere resources -Elemente sind erlaubt. Diese definieren unter Anderem das Betriebssystem, auf dem die Anwendung laufen soll, die für die verwendeten Klassen erforderliche Java-Version (mindestens 1.3) und natürlich die Namen der JAR-Archive. <resources os= Windows /> <resources> <j2se version=1.3/> <jar href= companysong.jar > </resources> Mit dem Tag application-desc main-class wird der Name der Klasse übergeben, die die main-methode enthält. <application-desc main-class= com.company.ui.client /> Über den security -Tag kann der Zugriff der Anwendung auf den Client geregelt werden. Dieses ist jedoch zur Zeit noch in der Entwicklung, die einzige Option bis dahin ist der Vollzugriff. <security> <all-permissions/> </security> </jnlp> Diese Applikation ließe sich beispielsweise über einen Browser starten, in dem im HTML-Text eine Hypertext-Referenz ( href ) eingebaut wird, die auf die entsprechende.jnlp-datei verweist. Durch Aufrufen dieser Referenz startet der Browser dann Java Web Start. Dieses sucht dann zunächst im lokalen Cache des Clients, ob die erforderlichen Archive dort vorliegen. Ist dies nicht der Fall oder sind diese unvollständig (oder veraltet), werden die fehlenden Archive vom jeweiligen Server angefordert. Sollte die Anwendung zum wiederholten Male gestartet werden erfolgt eine Abfrage, ob Shortcuts für diese Anwendung erzeugt werden sollen. Für den Fall, daß Anwendung Zugriffe auf lokale Dateien ermöglicht erfolgt nochmals eine Sicherheitsabfrage, ob sie wirklich gestartet werden soll. Sind dann alle Archive vollständig geladen wird die Anwendung gestartet. Sie läuft somit vollständig auf dem Client-Rechner. Das folgende Bild ist ein Beispiel für das Aussehen des Ladebildschirmes:

Das Produkt Java Web Start Eine weitere interessante Komponente von Java Web Start ist der sogenannte Application-Manager. Dieser merkt sich die Anwendungen, die bisher ausgeführt wurden und stellt sie über ein einfaches Auswahlmenü beim Aufruf von Java Web Start zur Verfügung, ähnlich dem von Windows bekannten Startmenü. das folgende Bild zeigt ein Beispiel, wie das Erscheinungsbild des Application-Managers aussehen könnte:

Anhang Literatur: - http://java.sun.com JDK 1.4 API-Dokumentation Java support readiness documents Java specification documents - http://www.ociweb.com Object computing inc. - java news brief - http://www.javamagazin.de Tutorial - Java Web Start Workshop - http://www.javaworld.com Artikel - Java web Start to the rescue Artikel - Logging API s for Java - http://www.ibm.com Artikel - IBM developerworks, java technology - http://udk.openoffice.org Artikel - the logging service Entwicklungsumgebungen: - BlueJ http://www.bluej.org - Symantec Visual Café http://www.symantec.com - Java2 standard edition (J2SE ) http://java.sun.com