Weitere aktuelle Java-Titel finden Sie bei dpunkt.
 Inhaltsverzeichnis   Auf Ebene Zurück   Seite Zurück   Seite Vor   Auf Ebene Vor   Eine Ebene höher   Index


21.2.4

JNLP-Dienste



Die JNLP-Dienste (alle Klassen liegen im Paket javax.jnlp) stellen eine Schnittstelle des Programms zum JNLP-Client dar, mit dem man einfach auf nützliche Funktionen zugreifen kann. So ist es z.B. über den PersistenceService möglich, Dateien in einem vorgegeben Verzeichnis zu speichern, obwohl ansonsten sämtlicher Zugriff auf die lokale Platte verboten ist, solange die Applikation nicht signiert ist.

Ein Applet oder eine Applikation muss diese Services nicht gebrauchen - sie machen nur dann Sinn, wenn die Applikation speziell für den JNLP-Client geschrieben wurde und die Erweiterungen benötigt. Wer sein fertig programmiertes Applet oder seine Applikation einfach nur um eine weitere Ausführungsart erweitern möchte, kann in den meisten Fällen ohne das zusätzliche API auskommen. Insbesondere besteht die Gefahr, eine ClassNotFound-Exception zu bekommen, wenn die Applikation auf JNLP-Services zugreifen will, diese aber nicht in einem JNLP-Client läuft.

Der Zugriff auf die verschiedenen Services geschieht über die statischen Methoden der Klasse javax.jnlp.ServiceManager:
  BasicService basicService = (BasicService) 
    ServiceManager.lookup("javax.jnlp.BasicService");

Eine Liste aller zur Verfügung stehenden Dienste bekommt man über die statische Methode ServiceManager.getServiceNames(). Lediglich der BasicService und der DownloadService sind Pflicht für einen JNLP-Client.

BasicService

Über den BasicService erhält man generelle Informationen über den Kontext der Applikation, z.B. ob die Applikation im Offline-Modus ist (isOffline()) oder ob ein Webbrowser zur Verfügung steht (isWebBrowserSupported()). Über showDocument(URL url) kann entsprechend eine Seite in einem Browser angezeigt werden.
  // Service-Exemplar anfordern
  BasicService bs = (BasicService) 
    ServiceManager.lookup("javax.jnlp.BasicService"); 
  // Zeigt eine URL an
  bs.showDocument(new URL("http://java.sun.com")); 

DownloadService

Über den DownloadService hat der Programmierer größeren Zugriff darauf, welche Ressourcen wann geladen werden. So stehen Methoden zur Verfügung, um herauszubekommen, ob bestimmte parts, extensions oder sonstige Ressourcen schon zwischengespeichert sind, um, falls nicht, den Download-Vorgang zu starten oder diese Caches zu löschen.
  DownloadService ds = (DownloadService)
    ServiceManager.lookup("javax.jnlp.DownloadService"); 
  // Die Resource
  URL url = new URL("http://localhost/images.jar");
  // Gucken, ob die Resource in der Version 1.0
  // schon gecacht ist
  boolean cached = ds.isResourceCached(url, "1.0"); 
  // Die gecachte Version ggf. löschen
  if (cached)  
    ds.removeResource(url, "1.0"); 
  // Resource erneut laden
  DownloadServiceListener dsl = 
    ds.getDefaultProgressWindow(); 
  ds.loadResource(url, "1.0", dsl); 

FileOpenService

Über den FileOpenService kann der Benutzer Dateien öffnen, wobei statt eines File-Objektes ein Exemplar der Klasse javax.jnlp.FileContents zurückgegeben wird. Diese Klasse dient als Wrapper um die eigentliche Datei, um z.B. aus Sicherheitsgründen die Information über den Pfad nicht preiszugeben (damit daraus kein Rückschluss auf die gesamte Verzeichnisstruktur gezogen werden kann).
  FileOpenService fos = (FileOpenService)
    ServiceManager.lookup("javax.jnlp.FileOpenService"); 
  // Datei den Benutzer aussuchen lassen
  FileContents fc = fos.openFileDialog(null, null); 

FileSaveService

Um eine Datei vom Benutzer auswählen zu lassen, in die gespeichert werden soll, wird dieser Dienst benötigt. Er verhält sich grundsätzlich wie der FileOpenService.
  FileOpenService fos = (FileOpenService)
    ServiceManager.lookup("javax.jnlp.FileOpenService");
  FileSaveService fss = (FileSaveService)
    ServiceManager.lookup("javax.jnlp.FileSaveService");

  // Datei aussuchen
  FileContents fc = fos.openFileDialog(null, null);
  // Datei abspeichern
  fss.saveFileDialog(null, null, fc);

ClipboardService

Möchte der Entwickler auf die System-Zwischenablage zugreifen, muss er diesen Dienst einbinden. Bei der Benutzung des Dienstes wird der Benutzer kurz über die Risiken der Verwendung informiert.
  // Service-Exemplar bekommen
  ClipboardService cs = (ClipboardService)
    ServiceManager.lookup("javax.jnlp.ClipboardService"); 
  // Einen Text ims Clipboardboard aufnehmen
  StringSelection ss = 
    new StringSelection("Java Web Start!"); 
  cs.setContents(ss); 

PrintService

Um indirekten Zugriff auf den Drucker zu erhalten, kann der Programmierer diesen Dienst nutzen.
  PrintService ps = (PrintService)
    ServiceManager.lookup("javax.jnlp.PrintService"); 

  ps.print(new Printable {
    public int print(Graphics g, PageFormat pageformat, 
                     int PageIndex) {
      // Entsprechend ausdrucken
    }
  });

PersistenceService

Über den PersistenceService kann der Programmierer ähnlich wie bei HTTP-Cookies Informationen lokal an einer vordefinierten Stelle ablegen. Dabei wird statt eines Dateinamens eine URL angegeben (also z.B. http://www.dpunkt.de/meineapplikation/daten). In diese Datei kann man beliebige Daten hineinschreiben, wobei es Dateilängenbegrenzungen durch den Service geben kann.
  PersistenceService ps = (PersistenceService)
    ServiceManager.lookup("javax.jnlp.PersistenceService");
  // Ein vorher initialisiertes Objekt einlesen
  FileContents fc = get("http://localhost/myapp"); 

ExtensionInstallerService

Wenn eine Extension installiert wird, kann dieser Code, wenn vorhanden, auf diesen Service zugreifen und so dem Benutzer beispielsweise Informationen über den Installationsstatus geben.


 Inhaltsverzeichnis   Auf Ebene Zurück   Seite Zurück   Seite Vor   Auf Ebene Vor   Eine Ebene höher   Index

Copyright © 2002 dpunkt.Verlag, Heidelberg. Alle Rechte vorbehalten.