IBM SDK and Runtime Environment for Linux platforms, Java 2 Technology Edition, Version 5.0

Benutzerhandbuch


Copyrightvermerk

Anmerkung: Vor Verwendung dieser Informationen und des dazugehörigen Produkts sollten Sie die allgemeinen Informationen im Abschnitt Bemerkungen lesen.

Diese Ausgabe des Benutzerhandbuchs bezieht sich auf:

Weiterhin bezieht sich diese Ausgabe des Benutzerhandbuchs auf alle nachfolgenden Releases und Änderungen bis zur Herausgabe neuer Dateiversionen.

(c) Copyright Sun Microsystems, Inc. 1997, 2004, 901 San Antonio Rd., Palo Alto, CA 94303 USA. Alle Rechte vorbehalten.

(c) Copyright International Business Machines Corporation, 1999, 2005. Alle Rechte vorbehalten.

(c) Copyright IBM Deutschland GmbH 1999, 2004. Alle Rechte vorbehalten.

Vorwort

In diesem Benutzerhandbuch erhalten Sie allgemeine Informationen zu IBM(R) SDK and Runtime Environment for Linux(TM) platforms, Java(TM) 2 Technology Edition, Version 5.0 sowie spezielle Informationen zu allen Unterschieden zwischen der IBM Implementierung und der Sun-Implementierung. Lesen Sie dieses Benutzerhandbuch zusammen mit der ausführlicheren Dokumentation auf der folgenden Website von Sun Microsystems: http://java.sun.com.

Unter der folgenden Adresse finden Sie eine Liste der Distributionen, unter denen SDK und Runtime Environment for Linux getestet wurden: http://www-106.ibm.com/developerworks/java/jdk/linux/tested.html

Das Handbuch Diagnostics Guide enthält weitere Informationen zu IBM Virtual Machine für Java.

Die Begriffe "Runtime Environment" und "Java Virtual Machine" sind in diesem Handbuch gleichbedeutend.

Technische Änderungen, die in diesem Benutzerhandbuch zu Version 5.0 enthalten sind, mit Ausnahme von unwichtigen oder offensichtlichen Änderungen, wie beispielsweise die Aktualisierung von "1.4.2" in "5.0", sind rot dargestellt, wenn sie als HTML-Datei angezeigt oder als Farbkopie ausgedruckt werden. Außerdem wird durch vertikale Balken am linken Rand auf diese Änderungen hingewiesen.

Inhaltsverzeichnis

Copyrightvermerk
Vorwort
Übersicht
Konventionen
Versionskompatibilität
Ausführen eines Upgrades für SDK
Migrieren von weiteren IBM JVMs
| |
Unterstützte Hardware für zSeries
Inhalt von SDK und Runtime Environment
Runtime Environment-Tools
SDK-Tools
Installieren und Konfigurieren von SDK und Runtime Environment
Installieren unter Red Hat Enterprise Linux (RHEL) 4
| |
Installieren von 32-Bit-SDK auf 64-Bit-Architektur
Installieren über eine RPM-Datei
Installieren über eine TGZ-Datei
Konfigurieren von SDK und Runtime Environment for Linux
Festlegen der Umgebungsvariablen PATH
Festlegen der Umgebungsvariablen CLASSPATH
Deinstallieren von SDK und Runtime Environment for Linux
Deinstallieren des RPM-Pakets (Red Hat Package Manager)
Deinstallieren des komprimierten TAR-Pakets (Tape Archive)
Verwenden von Runtime Environment
Optionen
Angeben von Java-Optionen und Systemmerkmalen
Standardoptionen
Vom Standard abweichende Optionen
Abrufen der IBM Build- und Versionsnummer
Globalisierung des Befehls 'java'
JIT-Compiler (Just-In-Time)
Inaktivieren des JIT-Compilers
Aktivieren des JIT-Compilers
Prüfen, ob der JIT-Compiler aktiviert ist
Angeben der Garbage-Collection-Richtlinie
Optionen der Garbage-Collection
Pausezeit
Verringerung der Pausezeit
Umgebungen mit sehr vollen Freispeichern
Signalverarbeitung durch JVM
Von JVM verwendete Signale
Verbinden eines nativen Codetreibers mit der Signalverkettungsbibliothek
Verwenden der Funktion 'floating stacks'
Umwandeln von XML-Dokumenten
Verwenden einer älteren Version von Xerces oder Xalan
Verwenden von SDK zur Entwicklung von Java-Anwendungen
Debugging in Java-Anwendungen
Java-Debugger (JDB)
Ermitteln, ob eine Anwendung auf JVM im 32-Bit- oder 64-Bit-Modus ausgeführt wird
Schreiben von JNI-Anwendungen
| |
Unterstützung für die Wiederherstellung von blockierten Verbindungen auf Threadebene
Arbeiten mit Applets
Ausführen von Applets mit Applet Viewer
Debugging von Applets mit Applet Viewer
| |
Konfigurieren einer Speicherzuordnung von großen Seiten
CORBA-Unterstützung
Unterstützung für GIOP 1.2
Unterstützung für portierbare Abfangprozesse
Unterstützung für den Interoperable Naming Service
Systemmerkmale für die ORB-Tracefunktion
Systemmerkmale zur Optimierung des ORB
Java 2-Sicherheitsberechtigungen für den ORB
ORB-Implementierungsklassen
RMI-IIOP
Implementieren des Steuerroutinenpools für RMI-Verbindungen
Erweiterte BiDirectional-Unterstützung
Funktionale Erweiterungen für BigDecimal
Unterstützung des Euro-Symbols
Verwenden der Java Communications API (JavaComm)
Installieren der Java Communications API
Speicherposition der Java Communications API-Dateien
Konfigurieren der Java Communications API
Ändern des Zugriffsmodus für den seriellen Anschluss und den Parallelanschluss
Aktivieren von seriellen Anschlüssen auf IBM ThinkPads
Einschränkung beim Drucken mit der Java Communications API
Deinstallieren der Java Communications API
Deinstallieren des RPM-Pakets (Red Hat Package Manager)
Deinstallieren des komprimierten TAR-Pakets (Tape Archive)
Dokumentation zur Java Communications API
Implementieren von Java-Anwendungen
(Nur Linux IA (32 Bit) und PPC32) Verwenden des Java-Plug-ins
Unterstützte Browser
Installieren und Konfigurieren des Java-Plug-ins
Allgemeine Dokumentobjektmodellunterstützung (Document Object Model, DOM)
Verwenden von DBCS-Parametern
(nur Linux IA (32 Bit), PPC32 und PPC64) Verwenden von Java Web Start
Ausführen von Java Web Start
Ausliefern von Java-Anwendungen
| |
Gemeinsame Nutzung von Klassendaten auf verschiedenen JVMs
| |
Übersicht über die gemeinsame Nutzung von Klassen
| |
Cache-Inhalte
| |
Dynamisches Aktualisieren des Caches
| |
Aktivieren der gemeinsamen Nutzung von Klassen
| |
Cache-Sicherheit
| |
Lebensdauer des Caches
| |
Cache-Dienstprogramme
| |
Verwenden von Befehlszeilenoptionen für die gemeinsame Nutzung von Klassen
| |
Erstellen, Belegen, Überwachen und Löschen eines Caches
| |
Leistung und Speicherbelegung
| |
Einschränkungen und besondere Aspekte bei der gemeinsamen Nutzung von Klassen
| |
Grenzwerte für die Cachegröße
| |
Änderungen bei Laufzeitbytecodes
| |
Betriebssystemeinschränkungen
| |
Verwenden von SharedClassPermission
| |
Anpassen benutzerdefinierter Klassenladeprogramme an gemeinsam genutzte Klassen
Service und Unterstützung für unabhängige Softwareanbieter
Eingabehilfen
iKeyman-Eingabehilfen
Verschieben des Eingabefokus von JComboBox-Komponenten in Swing per Tastatur
(nur Linux IA (32 Bit), PPC32 und PPC64) Web Start-Eingabehilfen
Bekannte Einschränkungen
Einschränkungen, die für alle Linux-Plattformen gelten (wenn nicht anders angegeben)
Einschränkungen für Linux IA (32 Bit)
Einschränkungen für Linux AMD64
Einschränkungen für Linux PPC (32 Bit) und (64 Bit)
Einschränkungen für Linux PPC (64 Bit)
Einschränkungen für Linux zSeries (64 Bit)
Einschränkungen für Linux zSeries (31 und 64 Bit)
Kommentare zu diesem Handbuch
Bemerkungen
Marken

Übersicht

Bei IBM SDK handelt es sich um eine Entwicklungsumgebung zum Schreiben und Ausführen von Applets und Anwendungen, die der IBM Java 5.0 Core-API (Application Programming Interface - Anwendungsprogrammierschnittstelle) entsprechen.

SDK umfasst Runtime Environment for Linux. Mit dieser Komponente können Sie nur Java-Anwendungen ausführen. Wenn Sie SDK installiert haben, ist auch Runtime Environment enthalten.

Runtime Environment enthält Java Virtual Machine sowie unterstützende Dateien, wie z. B. Dateien mit der Erweiterung .so, bei denen kein Debugging möglich ist, und Klassendateien. Runtime Environment enthält nur eine Untergruppe der Klassen, die in SDK enthalten sind. Mit dieser Komponente können Sie ein Java-Programm in der Laufzeit verwenden, jedoch keine Java-Programme kompilieren. Runtime Environment for Linux enthält kein Entwicklungstool, wie z. B. appletviewer oder den Java-Compiler (javac), bzw. keine Klassen, die nur für Entwicklungssysteme konzipiert sind.

Außerdem wird das Paket mit der Java Communications API für IA32-, PPC32- und AMD64/EM64T-Plattformen zur Verwendung mit Runtime Environment for Linux bereitgestellt. Informationen hierzu finden Sie unter Verwenden der Java Communications API (JavaComm).

Die Datei license_xx.html enthält die Lizenzvereinbarung für Runtime Environment for Linux-Software. (xx ist eine Abkürzung für die jeweilige Sprache.) Öffnen Sie diese Datei in einem Web-Browser, um die Lizenzvereinbarung anzuzeigen oder zu drucken.

Konventionen

In diesem Benutzerhandbuch lautet das Standardinstallationsverzeichnis von SDK: /opt/ibm/java2-i386-50/. Die unten aufgeführten Plattformen haben verschiedene Standardinstallationsverzeichnisse. Verwenden Sie das für Ihre Plattform entsprechende Verzeichnis, wenn /opt/ibm/java2-i386-50/ angezeigt wird:

Versionskompatibilität

Normalerweise müssten alle Applets oder Anwendungen, die mit einer Vorversion von SDK ausgeführt wurden, zusammen mit IBM SDK for Linux, v5.0 ordnungsgemäß ausgeführt werden. Es ist nicht gewährleistet, dass Klassen, die auf der Grundlage dieses Releases kompiliert wurden, zusammen mit früheren Releases eingesetzt werden können.

Die Sun-Dokumentation zur Kompatibilität finden Sie auf der Sun-Website unter http://java.sun.com.

Ausführen eines Upgrades für SDK

Wenn Sie ein Upgrade von einem früheren SDK-Release ausführen, sichern Sie alle Konfigurations- und Sicherheitsrichtliniendateien, bevor Sie mit dem Ausführen des Upgrades fortfahren.

Nach dem Ausführen des Upgrades müssen Sie diese Dateien eventuell wiederherstellen oder neu konfigurieren, da sie beim Upgradeprozess möglicherweise überschrieben wurden. Prüfen Sie die Syntax der neuen Dateien, bevor Sie die ursprünglichen Dateien wiederherstellen, da sich das Format oder die Optionen für die Dateien geändert haben können.

Migrieren von weiteren IBM JVMs

In Version 1.4.2 für AMD64/EM64T und Version 5 für die anderen Linux-Plattformen enthält IBM Runtime Environment for Linux neue Versionen von IBM Java Virtual Machine und des JIT-Compilers (Just-In-Time). Wenn Sie von einer älteren IBM Runtime Environment-Version migrieren, beachten Sie Folgendes:

| | |

Unterstützte Hardware für zSeries

|

Die 31-Bit- und 64-Bit-SDKs und Runtime Environments von zSeries werden auf den folgenden System z9- und zSeries-Servern oder funktional entsprechenden Servern ausgeführt:

|

Inhalt von SDK und Runtime Environment

SDK enthält mehrere Entwicklungstools und Java Runtime Environment (JRE). Dieser Abschnitt enthält Erläuterungen zum Inhalt der SDK-Tools und von Runtime Environment.

Anwendungen, die vollständig in Java geschrieben sind, sollten keine Abhängigkeiten von der IBM SDK-Verzeichnisstruktur (oder Dateien in diesen Verzeichnissen) aufweisen. Abhängigkeiten von der SDK-Verzeichnisstruktur (oder den Dateien in diesen Verzeichnissen) können zu Fehlern bei der Portierbarkeit von Anwendungen führen.

Runtime Environment-Tools

SDK-Tools

Anmerkung: SDK for Linux enthält lediglich die Benutzerhandbücher, die Javadoc-Komponente und die zugehörige Lizenz, die zugehörigen Copyrightdateien sowie das Demoverzeichnis. Sie können die Sun-Softwaredokumentation über die Sun-Website aufrufen oder das Dokumentationspaket zur Sun-Software über die Sun-Website herunterladen: http://java.sun.com.

Installieren und Konfigurieren von SDK und Runtime Environment

Sie können IBM Java SDK und Runtime Environment über eine RPM- oder TGZ-Datei installieren. Führen Sie die Installation über die TGZ-Datei aus, außer wenn Sie allen Benutzern auf dem System den Zugriff auf diese Java-Installation erteilen wollen. Wenn Sie nicht über Rootzugriff verfügen, verwenden Sie die TGZ-Datei.

Wenn Sie die Installation mit Hilfe einer RPM-Datei ausführen, werden die Java-Dateien im Verzeichnis /opt/ibm/java2-i386-50/ installiert. Bei den Beispielen im vorliegenden Handbuch wird davon ausgegangen, dass Sie Java in diesem Verzeichnis installiert haben.

Installieren unter Red Hat Enterprise Linux (RHEL) 4

SDK ist von gemeinsam genutzten Bibliotheken abhängig, die nicht standardmäßig für Red Hat Enterprise Linux (RHEL) 4.0 installiert werden.

Die RPMs, die diese Bibliotheken enthalten, lauten:

Gehen Sie wie folgt vor, um diese Bibliotheken während der Installation von RHEL 4 aufzunehmen:

  1. Wenn Sie die Anzeige Package Defaults erreichen, wählen Sie die Option Customize the set of packages to be installed aus.
  2. Wählen Sie in der Anzeige Package Group Selection unter X Windows System die Option Details aus, und stellen Sie sicher, dass xorg-x11-deprecated-libs ausgewählt ist.
  3. Wählen Sie unter den Development-Optionen Legacy Software Development aus.
| | |

Installieren von 32-Bit-SDK auf 64-Bit-Architektur

|

Zum Ausführen von SDK müssen Sie die richtigen Versionen aller für SDK erforderlichen Bibliotheken installieren (32 oder 64 Bit).

|

In RHEL4 sind die 64-Bit-Versionen der Pakete in der Paketgruppe Compatibility Arch Support verfügbar.

|

Sie können das Tool RPM verwenden, um zu überprüfen, welche Versionen des Pakets Sie installiert haben. Fügen Sie dazu dem RPM-Befehl die Option --queryformat "%{NAME}.%{ARCH}\n" hinzu. Beispiel:

|
/home/username : rpm --queryformat "%{NAME}.%{ARCH}\n" -q libstdc++
|libstdc++.x86_64
|libstdc++.i386

Installieren über eine RPM-Datei

  1. Rufen Sie eine Shelleingabeaufforderung auf, und stellen Sie sicher, dass Sie als Root angemeldet sind.
  2. Geben Sie an einer Shelleingabeaufforderung rpm -ivh <RPM-Datei> ein. Beispiel:
    |rpm -ivh ibm-java2-<Architektur>-sdk-5.0-0.0.<Architektur>.rpm
    oder
    |rpm -ivh ibm-java2-<Architektur>-jre-5.0-0.0.<Architektur>.rpm

    |Dabei steht <Architektur> für Ihre Architektur: |i386, x86_64, ppc, ppc64, s390 oder s390x.

Installieren über eine TGZ-Datei

  1. Erstellen Sie ein Verzeichnis, in dem die Java-Paketdateien gespeichert werden sollen. Bei den Beispielen im vorliegenden Handbuch wird davon ausgegangen, dass Sie sie im Verzeichnis /opt/ibm/java2-i386-50/ installiert haben. Ersetzen Sie /opt/ibm/java2-i386-50/ im übrigen Handbuch durch das Verzeichnis, in dem Sie Java installiert haben.
  2. Geben Sie an einer Shelleingabeaufforderung tar -zxvf <TGZ-Datei> ein. Beispiel:
    |tar -zxvf ibm-java2-sdk-50-linux-<Architektur>.tgz
    oder
    |tar -zxvf ibm-java2-jre-50-linux-<Architektur>.tgz

    |Dabei steht <Architektur> für Ihre Architektur: |i386, x86_64, ppc, ppc64, s390 oder s390x.

Konfigurieren von SDK und Runtime Environment for Linux

Festlegen der Umgebungsvariablen PATH

Beachten Sie, dass alle vorhandenen ausführbaren Java-Dateien in dem von Ihnen verwendeten Pfad überschrieben werden, wenn Sie die Umgebungsvariable PATH wie unten beschrieben ändern.

Nach der Installation von SDK können Sie ein Tool ausführen, indem Sie an einer Eingabeaufforderung den Namen des Tools zusammen mit einem Dateinamen als Argument eingeben.

Geben Sie den Pfad für ein Tool immer so an, dass der Pfad vor dem Toolnamen steht. Wenn beispielsweise SDK for Linux im Verzeichnis /opt/ibm/java2-i386-50/bin installiert ist, können Sie eine Datei mit dem Namen MeineDatei.java kompilieren, indem Sie Folgendes an einer Shelleingabeaufforderung eingeben:

  /opt/ibm/java2-i386-50/bin/javac MeineDatei.java

Gehen Sie wie folgt vor, um die Umgebungsvariable PATH zu ändern:

  1. Editieren Sie die Shellstartdatei im Ausgangsverzeichnis (normalerweise .bashrc, je nach der von Ihnen verwendeten Shell), und fügen Sie der Umgebungsvariablen PATH die absoluten Pfade hinzu. Beispiel:
    export PATH=/opt/ibm/java2-i386-50/bin:/opt/ibm/java2-i386-50/jre/bin:$PATH

  2. Melden Sie sich erneut an, oder führen Sie das aktualisierte Shell-Script aus, um die neue Einstellung der Umgebungsvariablen PATH zu aktivieren.

Festlegen der Umgebungsvariablen CLASSPATH

Die Umgebungsvariable CLASSPATH teilt den SDK-Tools (z. B. java, javac und javadoc) die Speicherposition der Java-Klassenbibliotheken mit.

Sie müssen die Umgebungsvariable CLASSPATH nur festlegen, wenn eine der folgenden Aussagen zutrifft:

Geben Sie zum Anzeigen des aktuellen Werts der Umgebungsvariablen CLASSPATH Folgendes an einer Shelleingabeaufforderung ein:

echo $CLASSPATH

Wenn Sie Anwendungen entwickeln und ausführen wollen, die unterschiedliche Laufzeitumgebungen verwenden, wie z. B. andere Versionen, die separat installiert wurden, müssen Sie CLASSPATH (und PATH) für jede Anwendung explizit festlegen. Wenn Sie mehrere Anwendungen gleichzeitig ausführen und unterschiedliche Laufzeitumgebungen verwenden wollen, muss jede Anwendung in einer separaten Shell ausgeführt werden.

Wenn Sie nur jeweils eine Version von Java ausführen wollen, können Sie mit Hilfe eines Shell-Scripts zwischen den verschiedenen Laufzeitumgebungen umschalten.


Anmerkung:
(Nur für chinesische Benutzer von Linux IA, 32 Bit) Auf Grund der Inkonsistenz der Verschlüsselungen von Schriftarten auf dem Red Hat Advanced Server ist es bei der Installation für eine Umgebung, in der Chinesisch die voreingestellte Sprache sein soll, von Vorteil, bei der Installation Englisch als voreingestellte Sprache festzulegen und sie nach Abschluss der Installation in Chinesisch zu ändern. Andernfalls werden chinesische Zeichen möglicherweise nicht angezeigt.

Deinstallieren von SDK und Runtime Environment for Linux

Der Prozess, den Sie zum Entfernen von SDK und Runtime Environment for Linux verwenden, ist vom verwendeten Installationstyp abhängig. Anweisungen hierzu finden Sie im Abschnitt Deinstallieren des RPM-Pakets (Red Hat Package Manager) oder Deinstallieren des komprimierten TAR-Pakets (Tape Archive).

Deinstallieren des RPM-Pakets (Red Hat Package Manager)

Gehen Sie zum Deinstallieren von SDK oder Runtime Environment for Linux folgendermaßen vor, falls Sie das installierbare RPM-Paket installiert haben:

  1. Geben Sie an einer Shelleingabeaufforderung Folgendes ein,
    1. wenn Sie überprüfen möchten, welche RPM-Pakete Sie installiert haben:
      rpm -qa | grep -i java
    2. Daraufhin wird eine Liste aller IBM Java-Pakete angezeigt, die Sie installiert haben. Beispiel:
      ibm-java2-<Architektur>-jre-5.0-0.0.<Architektur>
      ibm-java2-<Architektur>-sdk-5.0-0.0.<Architektur>
      
    3. Über diese Ausgabe erfahren Sie, welche Pakete Sie mit dem Befehl rpm -e deinstallieren können. Beispiel:
      rpm -e ibm-java2-<Architektur>-jre-5.0-0.0.<Architektur>
      rpm -e ibm-java2-<Architektur>-sdk-5.0-0.0.<Architektur>
    Sie können auch ein grafisches Tool verwenden, wie beispielsweise kpackage oder yast2.
  2. Entfernen Sie das Verzeichnis, in dem Sie SDK und Runtime Environment installiert haben, aus der Anweisung PATH.
  3. (nur Linux IA (32 Bit) und PPC32) Wenn Sie das Java-Plug-in installiert haben, entfernen Sie die Java-Plug-in-Dateien aus dem Web-Browser-Verzeichnis.

Deinstallieren des komprimierten TAR-Pakets (Tape Archive)

Gehen Sie zum Deinstallieren von SDK oder Runtime Environment for Linux folgendermaßen vor, wenn Sie das komprimierte TAR-Paket extrahiert haben:

  1. Entfernen Sie die SDK- oder Runtime Environment-Dateien aus dem Verzeichnis, in dem Sie SDK oder Runtime Environment installiert haben.
  2. Entfernen Sie das Verzeichnis, in dem Sie SDK oder Runtime Environment installiert haben, aus der Anweisung PATH.
  3. Melden Sie sich erneut an, oder führen Sie das aktualisierte Shell-Script aus, um die neue Einstellung der Umgebungsvariablen PATH zu aktivieren.
  4. (nur Linux IA (32 Bit) und AMD64/EM64T) Wenn Sie das Java-Plug-in installiert haben, entfernen Sie die Java-Plug-in-Dateien aus dem Web-Browser-Verzeichnis.

Verwenden von Runtime Environment

Mit dem Tool java wird durch Starten von Java Runtime Environment und Laden einer angegebenen Klasse eine Java-Anwendung gestartet.

JVM sucht in den drei folgenden Positionsgruppen nach der ursprünglichen Klasse (und anderen verwendeten Klassen): im Klassenpfad des Bootprogramms, in den installierten Erweiterungen und im Benutzerklassenpfad. Die nach dem Klassennamen oder JAR-Dateinamen angegebenen Argumente werden an die Hauptfunktion übermittelt.

Der Befehl javaw ist identisch mit dem Befehl java, außer dass beim Verwenden des Befehls javaw kein zugeordnetes Konsolfenster angezeigt wird. Verwenden Sie den Befehl javaw, wenn kein Fenster mit einer Eingabeaufforderung angezeigt werden soll. Der Startbefehl javaw zeigt im Falle eines fehlgeschlagenen Starts ein Dialogfenster mit Fehlerinformationen an.

Die Befehle java und javaw haben folgende Syntax:

java [ Optionen ] Klasse [ Argumente ... ]
java [ Optionen ] -jar Datei.jar [ Argumente ... ]
javaw [ Optionen ] Klasse [ Argumente ... ]
javaw [ Optionen ] -jar Datei.jar [ Argumente ... ]

Elemente in eckigen Klammern sind optional.

Optionen
Befehlszeilenoptionen.
Klasse
Der Name der Klasse, die aufgerufen werden soll.
Datei.jar
Der Name der JAR-Datei, die aufgerufen werden soll. Sie wird nur mit der Option -jar verwendet.
Argumente
Die Argumente, die an die Funktion main weitergeleitet werden.

Wenn die Option -jar angegeben wurde, enthält die benannte JAR-Datei Klassen- und Ressourcendateien für die Anwendung, wobei die Systemstartklasse über den Manifestheader für die Hauptklasse angegeben wird.

Optionen

Das Startprogramm verfügt über mehrere Standardoptionen, die in der aktuellen Laufzeitumgebung und auch in zukünftigen Releases unterstützt werden. Daneben gibt es mehrere vom Standard abweichende Optionen. Die Standardoptionen wurden für die beste allgemeine Verwendung ausgewählt. Gehen Sie deshalb bei Änderungen vorsichtig vor.

Angeben von Java-Optionen und Systemmerkmalen

Sie können Java-Optionen und Systemmerkmale auf drei verschiedene Arten angeben. Diese sind im Folgenden aufgelistet (nach Priorität):

  1. Durch Angeben der Option oder des Merkmals in der Befehlszeile. Beispiel:java -Dmysysprop1=tcpip -Dmysysprop2=wait -Xdisablejavadump MeineJavaKlasse.
  2. Durch Erstellen einer Datei, die die Optionen enthält, und Angeben der Datei in der Befehlszeile mit -Xoptionsfile=<Dateiname>.
  3. Durch Erstellen einer Umgebungsvariablen namens IBM_JAVA_OPTIONS mit den Optionen, z. B. export IBM_JAVA_OPTIONS="-Dmysysprop1=tcpip -Dmysysprop2=wait -Xdisablejavadump".

Die Optionen, die in der Befehlszeile ganz rechts stehen, haben Vorrang vor den Optionen, die ganz links stehen. Wenn Sie z. B. die Optionen -Xint -Xjit meineKlasse angeben, hat -Xjit Vorrang.

Standardoptionen

Vom Standard abweichende Optionen

Bei den unten aufgelisteten -X-Optionen handelt es sich um Optionen, die vom Standard abweichen und jederzeit ohne vorherige Ankündigung geändert werden können.

In Optionen, die den Parameter <Größe> enthalten, müssen Sie der Zahl ein "k" oder "K" für Kilobyte, ein "m" oder "M" für Megabyte oder ein "g" oder "G" für Gigabyte voranstellen.

Abrufen der IBM Build- und Versionsnummer

Geben Sie den folgenden Befehl an einer Shelleingabeaufforderung ein, um die IBM Build- und Versionsnummer abzurufen:

java -version

Globalisierung des Befehls 'java'

Mit dem Befehl java und mit anderen Java-Startbefehlen (wie beispielsweise javaw) kann ein Klassenname mit beliebigen Zeichen angegeben werden, die im Zeichensatz der aktuellen Ländereinstellung enthalten sind.

Mit Hilfe von Java-Escapezeichenfolgen können Sie auch alle im Klassennamen und in den Argumenten enthaltenen Unicode-Zeichen angeben. Für diesen Vorgang müssen Sie die Option -Xargencoding angeben. Verwenden Sie zum Angeben eines Unicode-Zeichens Escapezeichenfolgen im Format \u####. Dabei ist # eine Hexadezimalziffer (0-9, A-F).

Wenn Sie angeben möchten, dass der Klassenname und die Befehlsargumente im UTF8-Code verschlüsselt sind, verwenden Sie -Xargencoding:utf8 oder -Xargencoding:latin für die ISO8859_1-Verschlüsselung.

Wenn Sie beispielsweise eine Klasse mit dem Namen "HelloWorld" angeben möchten und für die beiden Großbuchstaben die Unicode-Verschlüsselung verwenden, müssen Sie den folgenden Befehl ausführen:

java -Xargencoding '\u0048ello\u0057orld'

Mit den Befehlen java und javaw werden übersetzte Ausgabenachrichten angezeigt. Diese Nachrichten unterscheiden sich je nach der Ländereinstellung, in der Java ausgeführt wird. Die ausführlichen Fehlerbeschreibungen und andere Debuginformationen, die vom Befehl java zurückgegeben werden, werden in Englisch angezeigt.

JIT-Compiler (Just-In-Time)

Der IBM JIT-Compiler (Just-In-Time) generiert dynamisch Maschinencode für häufig verwendete Bytecodesequenzen in Java-Anwendungen und Java-Applets, während diese ausgeführt werden. |Der JIT-Compiler Version 5.0 bietet neue Optimierungen als Ergebnis der Compiler-Forschung, verbessert Optimierungen, die in vorherigen Versionen des JIT-Compilers implementiert wurden, und bietet bessere Hardware-Nutzung.

IBM SDK und Runtime Environment enthalten den JIT-Compiler, der standardmäßig in Benutzeranwendungen und in SDK-Tools aktiviert ist. In der Regel besteht keine Notwendigkeit, den JIT-Compiler explizit aufzurufen. Die Kompilierung des Java-Bytecodes in Maschinencode erfolgt transparent. Wenn jedoch ein Problem mit Runtime Environment bei der Ausführung einer Java-Anwendung oder eines Java-Applets auftritt, können Sie den JIT-Compiler inaktivieren, um das Problem leichter eingrenzen zu können. Der JIT-Compiler sollte nur vorübergehend inaktiviert werden, da er für eine adäquate Leistung erforderlich ist.

Inaktivieren des JIT-Compilers

Zum Inaktivieren des JIT-Compilers haben Sie drei Möglichkeiten:

Beide Befehlszeilenoptionen überschreiben die Umgebungsvariable JAVA_COMPILER.

Aktivieren des JIT-Compilers

Setzen Sie zum expliziten Aktivieren des JIT-Compilers die Umgebungsvariable JAVA_COMPILER auf "jitc", oder verwenden Sie die Option -D, um das Merkmal java.compiler auf "jitc" zu setzen. Sie können in der JVM-Befehlszeile auch die Option -Xjit verwenden (und die Option -Xint weglassen), um den JIT-Compiler zu aktivieren.

Wenn die Umgebungsvariable JAVA_COMPILER oder das Merkmal java.compiler auf "" (leere Zeichenfolge) gesetzt ist, bleibt der JIT-Compiler inaktiviert. Geben Sie unset JAVA_COMPILER an der Shelleingabeaufforderung ein, um die Einstellung der Umgebungsvariablen ordnungsgemäß aufzuheben.

Prüfen, ob der JIT-Compiler aktiviert ist

Wenn Sie prüfen wollen, ob der JIT-Compiler aktiviert ist, geben Sie an der Eingabeaufforderung Folgendes ein:

java -version

Wenn der JIT-Compiler derzeit nicht verwendet wird, wird folgende Nachricht angezeigt:

(JIT disabled)

Wenn der JIT-Compiler verwendet wird, wird folgende Nachricht angezeigt:

(JIT enabled)

Weitere Informationen zum JIT-Compiler finden Sie im Handbuch Diagnostics Guide.

Angeben der Garbage-Collection-Richtlinie

Der Garbage-Collector verwaltet den von Java und von den Anwendungen verwendeten Speicher, die mit VM ausgeführt werden.

Sobald der Garbage-Collector eine Speicheranforderung empfängt, wird hierfür nicht verwendeter Freispeicher vorgesehen. Dies wird auch als "Zuordnung" bezeichnet. Der Garbage-Collector prüft außerdem, ob Speicherbereiche vorhanden sind, auf die nicht mehr verwiesen wird, und gibt sie zur erneuten Verwendung frei. Dies wird auch als "Erfassung" bezeichnet.

Die Erfassungsphase kann durch einen Fehler bei der Hauptspeicherzuordnung ausgelöst werden, der dann auftritt, wenn für Speicheranforderungen kein weiterer Speicherbereich mehr vorhanden ist. Sie kann aber auch über einen expliziten System.gc()-Aufruf ausgelöst werden.

Die Garbage-Collection kann erhebliche Auswirkungen auf die Anwendungsleistung haben. IBM VM stellt daher verschiedene Methoden zur Verfügung, über die die Ausführung der Garbage-Collection optimiert werden kann. Dadurch verringern sich die Auswirkungen auf Ihre Anwendungen.

Ausführliche Informationen zur Garbage-Collection finden Sie im Handbuch Diagnostics Guide.

Optionen der Garbage-Collection

Die Option -Xgcpolicy gibt die Garbage-Collection-Richtlinie an.

-Xgcpolicy nimmt die Werte optthruput (Standardwert und empfohlener Wert), optavgpause|, subpool| (nur PPC und zSeries) oder gencon an. Die Option steuert das Verhalten der Garbage-Collection, so dass zwischen dem Durchsatz der Anwendung und des Gesamtsystems und den durch die Garbage-Collection verursachten Pausezeiten abgewogen werden kann.

Das Format der Option und der zugehörigen Werte lautet wie folgt:

-Xgcpolicy:optthruput

-Xgcpolicy:optavgpause

-Xgcpolicy:gencon

|

-Xgcpolicy:subpool (nur PPC und zSeries)

Pausezeit

Wenn eine Anwendung wegen des verfügbaren Freispeichers nicht sofort ein Objekt erstellen kann, ist der Garbage-Collector für die Erkennung von Objekten ohne Verweis (Garbage) zuständig sowie für deren Löschung und für die Wiederherstellung eines Freispeicherstatus, mit dem sofortige und nachfolgende Zuordnungsanforderungen schnell beantwortet werden können. Solche Garbage-Collection-Zyklen ergeben gelegentliche unerwartete Pausen bei der Ausführung des Anwendungscodes. Wenn sich die Größe und Komplexität der Anwendungen erhöht und wenn die Freispeicher entsprechend umfangreicher werden, tendiert diese Pausezeit der Garbage-Collection dazu, größer zu werden. Der Standardwert -Xgcpolicy:optthruput für die Garbage-Collection bietet Anwendungen einen sehr hohen Durchsatz, verursacht jedoch gelegentliche Pausen. Diese Pausen können wenige Millisekunden bis zu mehreren Sekunden dauern, je nachdem, wie groß der Freispeicher und das Garbagevolumen ist.

Verringerung der Pausezeit

JVM verwendet zwei Verfahren zur Verringerung von Pausezeiten:

Die Befehlszeilenoption -Xgcpolicy:optavgpause fordert die Verwendung der gleichzeitig ablaufenden Garbage-Collection an, um die Pausezeit der Garbage-Collection (GC) erheblich zu verringern. Die gleichzeitig ablaufende GC verringert die Pausezeit, indem die Ausführung einiger GC-Aktivitäten zur gleichen Zeit wie die normale Programmausführung erfolgt. Dabei wird die durch die Erfassung des Freispeichers verursachte Unterbrechung minimiert. Die Option -Xgcpolicy:optavgpause begrenzt außerdem den Effekt eines höheren Freispeicherumfangs während der Garbage-Collection-Pause. Die Option -Xgcpolicy:optavgpause ist für Konfigurationen mit großen Freispeichern am nützlichsten. Die Verringerung der Pausezeit hat möglicherweise einen reduzierten Anwendungsdurchsatz zur Folge.

Während der gleichzeitig ablaufenden Garbage-Collection wird viel Zeit für die Identifizierung von Objekten mit einer relativ langen Lebensdauer verwendet, die nicht erfasst werden können. Wenn sich die GC nur auf Objekte konzentriert, die höchstwahrscheinlich wiederverwendbar sind, können Sie die Pausezeit für einige Anwendungen weiter verringern. Bei der GC nach Objektalter wird dies erreicht, indem der Freispeicher in zwei "Generationen" aufgeteilt wird, nämlich in die Bereiche "Junge Objekte" und "Alte Objekte". Die Objekte werden abhängig von ihrem Alter in einen dieser Bereiche gestellt. Der Bereich "Junge Objekte" ist der kleinere der beiden Bereiche und enthält jüngere Objekte. Der Bereich "Alte Objekte" ist größer und enthält ältere Objekte. Objekte werden zuerst dem Bereich "Junge Objekte" zugeordnet. Wenn sie lang genug überleben, werden Sie schließlich in den Bereich "Alte Objekte" umgestuft.

Die GC nach Objektalter basiert darauf, dass die meisten Objekte nur eine kurze Lebensdauer haben. Die GC nach Objektalter verringert Pausezeiten, indem sie sich auf das Zurückgewinnen von Speicher im Bereich "Junge Objekte" konzentriert, da dieser Bereich über den meisten wiederverwendbaren Speicherplatz verfügt. Im Gegensatz zu gelegentlichen aber übermäßig langen Pausezeiten beim Erfassen des gesamten Freispeichers wird der Bereich "Junge Objekte" regelmäßiger erfasst. Außerdem sind Pausezeiten verhältnismäßig kurz, wenn der Bereich klein genug ist. Die GC nach Objektalter hat jedoch den Nachteil, dass der Bereich "Alte Objekte" mit der Zeit voll wird, wenn zu viele Objekte eine zu lange Lebensdauer haben. Verwenden Sie eine Kombination aus der gleichzeitig ablaufenden GC und der GC nach Objektalter, um in dieser Situation die Pausezeit zu minimieren. Die Option -Xgcpolicy:gencon fordert die kombinierte Verwendung der gleichzeitig ablaufenden GC und der GC nach Objektalter an, um die GC-Pausezeit zu verringern.

Umgebungen mit sehr vollen Freispeichern

Wenn der Java-Freispeicher nahezu voll ist und sehr wenig zurückzufordernder Garbagespeicher vorhanden ist, werden Anforderungen für neue Objekte möglicherweise nicht schnell beantwortet, da kein Speicherbereich sofort verfügbar ist. Bei der Ausführung mit nahezu vollem Freispeicher kann die Anwendungsleistung geringer werden, unabhängig davon, welche der oben genannten Optionen Sie verwenden. Wenn weiterhin Freispeicher angefordert wird, empfängt die Anwendung eine Ausnahmebedingung wegen ungenügender Speicherkapazität und JVM wird beendet, es sei denn, die Ausnahmebedingung wird abgefangen und bearbeitet. Zu diesem Zeitpunkt erstellt JVM eine Diagnosedatei mit dem Namen "javadump". In diesen Situationen sollten Sie entweder die Freispeichergröße mit der Option -Xmx erhöhen oder die Anzahl der verwendeten Anwendungsobjekte verringern. Weitere Informationen finden Sie im Handbuch Diagnostics Guide.

Signalverarbeitung durch JVM

Wenn ein für Java Virtual Machine (JVM) wichtiges Signal gesendet wird, wird eine Signalroutine aufgerufen. Diese Signalroutine legt fest, ob das Signal für einen Java- oder Nicht-Java-Thread aufgerufen wurde.

Wurde das Signal für einen Java-Thread aufgerufen, steuert JVM die Signalverarbeitung. Wenn eine Anwendungsroutine für dieses Signal installiert ist, und Sie die Befehlszeilenoption -Xnosigchain nicht angegeben haben, wird die Anwendungsroutine für dieses Signal aufgerufen, nachdem JVM die Verarbeitung abgeschlossen hat.

Wurde das Signal für einen Nicht-Java-Thread aufgerufen und wurde zuvor mit der Anwendung, mit der JVM installiert wurde, eine eigene Routine für das Signal installiert, übernimmt diese Signalroutine die Steuerung. Wenn das Signal jedoch von JVM oder der Java-Anwendung angefordert wird, wird es ignoriert, oder die Standardaktion wird ausgeführt.

JVM führt für Signale bei Ausnahmebedingungen und für Fehlersignale eine der folgenden Aktionen aus:

Informationen zum Schreiben eines Startprogramms, das die oben aufgeführten Hooks angibt, finden Sie unter der folgenden Adresse: http://www-106.ibm.com/developerworks/java/library/i-signalhandling/. Dieser Abschnitt wurde für Java Version 1.3.1 geschrieben, gilt jedoch auch für spätere Versionen.

Bei Interruptsignalen beginnt JVM ebenfalls eine Sequenz für einen kontrollierten Systemabschluss, der jedoch in diesem Fall wie eine normale Beendigung behandelt wird. Hierbei führt JVM die folgenden Aktionen aus:

Der Systemabschluss entspricht dem Systemabschluss, der über einen Aufruf der Java-Methode System.exit() eingeleitet wurde.

Weitere von JVM verwendete Signale werden für die interne Steuerung verwendet und führen nicht zur Beendigung von JVM. Das einzige wichtige Steuerungssignal ist SIGQUIT, durch das ein Java-Speicherauszug generiert wird.

Von JVM verwendete Signale

In Tabelle 1 sind die von JVM verwendeten Signale aufgeführt. Die Signale werden in der Tabelle nach Typ oder Verwendung wie folgt zusammengefasst:

Tabelle 1. Von JVM verwendete Signale
Signalname Signaltyp Beschreibung Inaktiviert durch -Xrs
SIGBUS Ausnahmebedingung Falscher Zugriff auf den Speicher (falsche Datenanordnung) Ja
SIGSEGV Ausnahmebedingung Falscher Zugriff auf den Speicher (es wurden Daten in einen Speicherbereich geschrieben, auf den nicht zugegriffen werden kann). Ja
SIGILL Ausnahmebedingung Nicht zulässige Anweisung (es wurde versucht, eine unbekannte Maschineninstruktion aufzurufen). Nein
SIGFPE Ausnahmebedingung Ausnahmebedingung bei der Gleitkommaverarbeitung (Division durch null). Ja
SIGABRT Fehler Abnormale Beendigung. JVM setzt dieses Signal ab, sobald ein JVM-Fehler festgestellt wird. Ja
SIGINT Interrupt Interaktiver Abruf (Strg-C). JVM wird normal beendet. Ja
SIGTERM Interrupt Beendigungsanforderung. JVM wird normal beendet. Ja
SIGHUP Interrupt Auflegen. JVM wird normal beendet. Ja
SIGQUIT Steuerzeichen Ein Beendigungssignal für ein Terminal. JVM verwendet dieses Signal zum Ausführen von Java-Speicherauszügen. Ja
|SIGTRAP (5) |Steuerzeichen |Vom JIT-Compiler verwendet. |Ja
|__SIGRTMAX - 2 |Steuerzeichen |Von SDK verwendet. |Nein
|SIGCHLD |Steuerzeichen |Von SDK für die interne Steuerung verwendet. |Nein

Mit Hilfe der Option -Xrs (Reduzierung der Verwendung von Signalen) können Sie verhindern, dass JVM die meisten Signale verarbeitet. Weitere Informationen hierzu finden Sie auf der Sun-Website zum Startprogramm für Java-Anwendungen unter http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/java.html.

Die Signale 1 (SIGHUP), 2 (SIGINT), 4 (SIGILL), 7 (SIGBUS), 8 (SIGFPE), 11 (SIGSEGV) und 15 (SIGTERM) für JVM-Threads führen zur Beendigung von JVM. Daher sollte eine Anwendungssignalroutine bei diesen Signalen keine Wiederherstellung versuchen, es sei denn, JVM wird nicht mehr benötigt.

Verbinden eines nativen Codetreibers mit der Signalverkettungsbibliothek

Runtime Environment enthält eine Signalverkettungsfunktion. Die Signalverkettung ermöglicht eine effizientere Interaktion von JVM mit nativem Code, der eigene Signalroutinen installiert.

Mit der Signalverkettungsfunktion kann eine Anwendung mit der gemeinsam genutzten Bibliothek libjsig.so verbunden werden und diese Bibliothek vor den Systembibliotheken geladen werden. Mit Hilfe der Bibliothek libjsig.so wird sichergestellt, dass Aufrufe (wie z. B. signal(), sigset() und sigaction()) abgefangen werden, so dass die JVM-Signalroutinen nicht durch die zugehörigen Signalroutinen ersetzt werden. Stattdessen werden die neuen Signalroutinen durch diese Aufrufe gesichert oder nach den durch JVM installierten Signalroutinen hinzugefügt. Wenn diese Signale zu einem späteren Zeit gesendet werden und nicht an JVM gerichtet sind, werden die vorinstallierten Signalroutinen aufgerufen.

Führen Sie die folgenden Schritte aus, um libjsig.so zu verwenden:

Wenn Sie Signalroutinen installieren, die sigaction() verwenden, werden einige sa_flags nicht überwacht, wenn JVM das Signal verwendet. Dabei handelt es sich um folgende Markierungen:

Die Bibliothek libjsig.so verdeckt auch JVM-Signalroutinen vor der Anwendung. Daher geben Aufrufe wie signal(), sigset() und sigaction(), die nach dem Starten von JVM ausgeführt werden, keinen Verweis mehr auf die JVM-Signalroutine, sondern auf eine beliebige vor dem Starten von JVM installierte Routine zurück.

Verwenden der Funktion 'floating stacks'

Bei bestimmten Linux-Distributionen (z. B. Red Hat) ist eine GLIBC-Funktion mit dem Namen "floating stacks" aktiviert. Auf Grund von Einschränkungen des Linux-Kernels kann JVM auf SMP-Hardware mit aktivierter Funktion "floating stacks" nicht ausgeführt werden, sofern der Kernel-Level unter 2.4.10 ist. In dieser Umgebung muss die Funktion "floating stacks" inaktiviert werden, bevor JVM oder eine beliebige Anwendung, die JVM startet, gestartet wird. Verwenden Sie unter Red Hat den folgenden Befehl, um die Funktion "floating stacks" zu inaktivieren, indem Sie eine Umgebungsvariable wie folgt exportieren:

export LD_ASSUME_KERNEL=2.2.5

Auf einem Linux-System ohne aktivierte Funktion "floating stacks" wird unabhängig von der Einstellung für -Xss eine Minimalgröße von 256 KB für native Stacks für die einzelnen Threads bereitgestellt. Auf einem Linux-System mit aktivierter Funktion "floating stacks" werden die Werte für -Xss berücksichtigt. Wenn Sie also ein Linux-System ohne die aktivierte Funktion "floating stacks" migrieren, müssen alle Werte für -Xss groß genug sein, und es darf kein Minimum von 256 KB erforderlich sein.

Umwandeln von XML-Dokumenten

In IBM SDK sind der XSLT4J-Prozessor und der XML4J-Parser enthalten, die der Spezifikation JAXP 1.3 entsprechen. Mit Hilfe dieser Tools können Sie XML-Dokumente unabhängig von einer bestimmten Implementierung zur XML-Verarbeitung syntaktisch analysieren und umwandeln. Mit der Funktion "Factory Finders" zum Suchen nach den Implementierungen SAXParserFactory, DocumentBuilderFactory und TransformerFactory kann Ihre Anwendung zwischen unterschiedlichen Implementierungen umschalten, ohne dass hierfür Code geändert werden muss.

|Die in IBM SDK enthaltene XML-Technologie ähnelt Apache Xerces Java und Apache Xalan Java. Weitere Informationen finden Sie unter http://xml.apache.org/xerces2-j/ und http://xml.apache.org/xalan-j/.

Der XSLT4J-Prozessor bietet Ihnen die Möglichkeit, zwischen dem ursprünglichen XSLT Interpretive-Prozessor und dem neuen XSLT Compiling-Prozessor zu wählen. Der Interpretive-Prozessor wurde speziell für Tools- und Debuggingumgebungen entwickelt. Er unterstützt die XSLT-Erweiterungsfunktionen, die vom XSLT Compiling-Prozessor nicht unterstützt werden. Der XSLT Compiling-Prozessor wurde dagegen für hochleistungsfähige Laufzeitumgebungen entwickelt. Er generiert aus einem XSL-Style-Sheet eine Umwandlungsroutine (oder Translet). Dadurch wird die Interpretation von Style-Sheet-Anweisungen von der zugehörigen ausführbaren Anwendung für XML-Daten getrennt.

Der XSLT Interpretive-Prozessor ist der Standardprozessor. Zur Auswahl des XSLT Compiling-Prozessors stehen folgende Möglichkeiten zur Verfügung:

Zur Implementierung von Merkmalen in der Datei jaxp.properties müssen Sie die Datei jaxp.properties.sample in die Datei jaxp.properties unter /opt/ibm/java2-i386-50/ kopieren. Diese Datei enthält außerdem ausführliche Informationen zur Vorgehensweise bei der Ermittlung der Implementierungen, die für TransformerFactory, SAXParserFactory und DocumentBuilderFactory verwendet werden sollen.

Zur Verbesserung der Leistung bei der Umwandlung von StreamSource-Objekten mit dem XSLT Compiling-Prozessor müssen Sie die Klasse com.ibm.xslt4j.b2b2dtm.XSLTCB2BDTMManager als Provider des Services org.apache.xalan.xsltc.dom.XSLTCDTMManager angeben. Führen Sie zur Ermittlung des Service-Providers jeden der nachfolgend aufgeführten Schritte durch, bis org.apache.xalan.xsltc.dom.XSLTCDTMManager gefunden wird:

  1. Überprüfen Sie die Einstellung für das Systemmerkmal org.apache.xalan.xsltc.dom.XSLTCDTMManager.
  2. Überprüfen Sie den Wert für das Systemmerkmal org.apache.xalan.xsltc.dom.XSLTCDTMManager in der Datei /opt/ibm/java2-i386-50/lib/xalan.properties.
  3. Überprüfen Sie, ob in der Datei META-INF/services/org.apache.xalan.xsltc.dom.XSLTCDTMManager ein Klassenname aufgeführt ist.
  4. Verwenden Sie den Standard-Service-Provider org.apache.xalan.xsltc.dom.XSLTCDTMManager.

Der XSLT Compiling-Prozessor erkennt den Service-Provider für den Service org.apache.xalan.xsltc.dom.XSLTCDTMManager beim Erstellen eines Objekts mit dem Namen javax.xml.transform.TransformerFactory. Alle Objekte mit dem Namen javax.xml.transform.Transformer oder javax.xml.transform.sax.TransformerHandler, die mit Hilfe dieses TransformerFactory-Objekts erstellt werden, verwenden denselben Service-Provider. Sie können Service-Provider nur ändern, indem Sie eine der oben aufgeführten Einstellungen ändern und anschließend ein neues TransformerFactory-Objekt erstellen.

Verwenden einer älteren Version von Xerces oder Xalan

Wenn Sie mit einer älteren Version von Tomcat arbeiten, gilt möglicherweise die folgende Einschränkung.

Wenn Sie im Überschreibungsverzeichnis eine älteren Version von Xerces (vor Version 2.0) oder Xalan (vor Version 2.3) verwenden, wird beim Aufrufen der Anwendung möglicherweise eine Ausnahmebedingung für Nullzeiger angezeigt. Diese Ausnahmebedingung tritt auf, da bei älteren Versionen die Datei jaxp.properties nicht ordnungsgemäß verarbeitet werden kann.

Gehen Sie wie folgt vor, um diesen Fehler zu umgehen:

Verwenden von SDK zur Entwicklung von Java-Anwendungen

In den folgenden Abschnitten erhalten Sie Informationen zur Verwendung von SDK for Linux zur Entwicklung von Java-Anwendungen. Einzelheiten zu den verfügbaren Tools finden Sie im Abschnitt SDK-Tools.

Debugging in Java-Anwendungen

Zur Fehlerbehebung in Java-Programmen können Sie den Java-Debugger (JDB) oder andere Debugger verwenden, die über die JPDA (Java Platform Debugger Architecture) kommunizieren, die in SDK for Linux enthalten ist.

Java-Debugger (JDB)

Der Java-Debugger (JDB) ist in SDK for Linux enthalten. Dieser Debugger wird über den Befehl jdb aufgerufen. Er wird JVM über die JPDA zugeordnet. Gehen Sie zur Fehlerbehebung in Java-Anwendungen wie folgt vor:

  1. Starten Sie JVM unter Angabe folgender Optionen:
    java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=<Port>
         MeineAnwendung <Argumente zu MeineAnwendung>
  2. Daraufhin startet JVM. Vor dem Starten der Java-Anwendung wird die Ausführung jedoch ausgesetzt. Sie können den Debugger in einer separaten Sitzung über folgenden Befehl JVM zuordnen:
    jdb -attach <Portnummer>
    Der Debugger wird daraufhin JVM zugeordnet, und Sie können eine Reihe von Befehlen zur Überprüfung und Steuerung der Java-Anwendung ausführen. Mit dem Befehl run können Sie die Java-Anwendung beispielsweise ausführen.

Wenn Sie weitere Informationen zu JDB-Optionen aufrufen möchten, geben Sie Folgendes ein:

jdb -help

Gehen Sie wie folgt vor, um weitere Informationen zu JDB-Befehlen anzuzeigen:

  1. Geben Sie jdb ein.
  2. Geben Sie bei der JDB-Eingabeaufforderung help ein.

Sie können JDB außerdem für die Fehlerbehebung in Java-Anwendungen auf fernen Maschinen verwenden. JPDA verwendet ein TCP/IP-Socket für die Verbindung mit der fernen JVM.

  1. Starten Sie JVM wie oben beschrieben.
  2. Ordnen Sie den Debugger mit folgendem Befehl dem fernen System zu:
    jdb -attach <Systemname oder IP-Adresse>:<Portnummer>

Wenn Sie eine Debugsitzung über das Transportprotokoll dt_socket aufrufen, müssen Sie sicherstellen, dass die angegebenen Ports verfügbar sind.

|Die JVMDI (Java Virtual Machine Debugging Interface) wird in diesem Release nicht unterstützt. Sie wurde durch die JVMTI (Java Virtual Machine Tool Interface) ersetzt.

Weitere Informationen zu JDB und JPDA sowie deren Verwendung finden Sie auf den folgenden Websites:


Ermitteln, ob eine Anwendung auf JVM im 32-Bit- oder 64-Bit-Modus ausgeführt wird

Einige Java-Anwendungen müssen in der Lage sein zu ermitteln, ob sie auf JVM im 32-Bit- oder 64-Bit-Modus ausgeführt werden. Falls Ihre Anwendung beispielsweise über eine Bibliothek mit nativem Code verfügt, muss die Bibliothek für Plattformen, die sowohl den 32-Bit- als auch den 64-Bit-Betriebsmodus unterstützen, separat im 32-Bit- und im 64-Bit-Format kompiliert werden. In diesem Fall muss die Anwendung während der Laufzeit die richtige Bibliothek laden, da der 32-Bit- und der 64-Bit-Code nicht miteinander kombiniert werden können.

Mit Hilfe des Systemmerkmals com.ibm.vm.bitmode können Anwendungen den Modus ermitteln, in dem JVM ausgeführt wird. Es werden folgende Werte zurückgegeben:

Mit dem folgenden Aufruf können Sie das Systemmerkmal com.ibm.vm.bitmode innerhalb des Anwendungscodes überprüfen:

System.getProperty("com.ibm.vm.bitmode");

Schreiben von JNI-Anwendungen

Gültige JNI-Versionsnummmern, die über native Programme im API-Aufruf JNI_CreateJavaVM() angegeben werden können, lauten wie folgt:

Über diese Versionsnummer wird lediglich die Version der zu verwendenden nativen JNI-Schnittstelle festgelegt. Die tatsächliche JVM-Version, die erstellt wird, wird über die J2SE-Bibliotheken angegeben (Version 5.0). Die JNI-Schnittstellen-API hat keine Auswirkungen auf die Sprachenspezifikation, die über JVM, die APIs der Klassenbibliothek oder einen anderen Bereich mit JVM-Funktionen implementiert wird. Weitere Informationen hierzu finden Sie unter http://java.sun.com/j2se/1.5.0/docs/guide/jni.

Falls für Ihre Anwendung zwei JNI-Bibliotheken erforderlich sind (für 32 und 64 Bit), verwenden Sie das Systemmerkmal com.ibm.vm.bitmode, um festzustellen, ob derzeit eine 32-Bit- oder 64-Bit-JVM ausgeführt wird, und wählen Sie dann die geeignete Bibliothek aus.

Verwenden Sie zum Kompilieren und Verknüpfen einer nativen Anwendung mit IBM 5.0 SDK folgenden Befehl:

gcc -I/opt/ibm/java2-i386-50/include -L/opt/ibm/java2-i386-50/jre/bin/j9vm 
-ljvm -ldl -lpthread <JNI-Programmdateiname>

Die Option -ljvm gibt an, dass libjvm.so die gemeinsam genutzte Bibliothek ist, über die JVM implementiert wird. Die Option -lpthread gibt an, dass die Unterstützung für native Pthreads aktiviert ist. Falls Sie keine Verbindung zur Pthread-Bibliothek hergestellt haben, tritt beim Ausführen des JNI-Programms möglicherweise ein Segmentierungsfehler (Signal SIGSEGV) auf.

Anmerkung:
Version 1.1 der JNI (Java Native Interface) wird nicht unterstützt.
| | |

Unterstützung für die Wiederherstellung von blockierten Verbindungen auf Threadebene

|

Dem Paket com.ibm.jvm wurden zur Unterstützung für die Wiederherstellung von blockierten Verbindungen auf Threadebene vier neue IBM spezifische SDK-Klassen hinzugefügt. Die neuen Klassen befinden sich in der Datei |core.jar.

|

Diese Klassen ermöglichen die Aufhebung der Blockierung von Threads, die im Netzbetrieb oder bei Synchronisationsaufrufen auftrat. Wenn eine Anwendung diese Klassen nicht verwendet, muss sie den gesamten Vorgang beenden, anstatt ein einzelnes blockiertes Thread zu unterbrechen.

|

Die folgenden Klassen sind verfügbar:

|
|
InterruptibleContext() (allgemein zugängliche Schnittstelle)
|
Definiert die beiden Methoden isblocked() und unblock(). Die drei weiteren Klassen implementieren InterruptibleContext. |
|
InterruptibleLockContext() (öffentliche Klasse)
|
Eine Dienstprogrammklasse für die Unterbrechung von Synchronisationsaufrufen. |
|
InterruptibleIOContext() (öffentliche Klasse)
|
Eine Dienstprogrammklasse für die Unterbrechung von Netzaufrufen. |
|
InterruptibleThread() (öffentliche Klasse)
|
Eine Dienstprogrammklasse zur Erweiterung von java.lang.Thread, um die Wiederverwendung von ausführbaren Methoden, die unterbrochen werden können, zu ermöglichen. Sie verwendet Instanzen der Klassen InterruptibleLockContext und InterruptibleIOContext, um die erforderlichen Methoden isblocked() und unblock() auszuführen, unabhängig davon, ob ein Synchronisations- oder Netzbetriebsprozess den Thread blockiert. |
|
|

Die beiden Klassen InterruptibleLockContext und InterruptibleIOContext funktionieren durch Verweis auf den aktuellen Thread. Wenn Sie die Klasse InterruptibleThread nicht verwenden, müssen Sie daher zum Verwenden dieser neuen Klassen eine eigene Klasse bereitstellen, durch die java.lang.Thread erweitert wird.

|

Die Javadoc-Komponente für diese Klassen wird mit SDK in der Datei docs/apidoc.zip mitgeliefert.

Arbeiten mit Applets

Mit Applet Viewer können Sie mit Hilfe des Applet-Tags mindestens ein Applet ausführen, das durch Verweise auf einer Webseite (HTML-Datei) aufgerufen wird. Applet Viewer findet die APPLET-Tags in der HTML-Datei und führt die Applets, wie durch die Tags angegeben, in separaten Fenstern aus.

Da Applet Viewer für das Anzeigen von Applets konzipiert wurde, kann eine Webseite, die viele HTML-Tags enthält, mit Applet Viewer nicht vollständig angezeigt werden. Mit Applet Viewer kann lediglich eine syntaktische Analyse der APPLET-Tags und nicht der anderen auf der Webseite enthaltenen HTML-Tags durchgeführt werden.

Ausführen von Applets mit Applet Viewer

Geben Sie zum Ausführen eines Applets mit Applet Viewer Folgendes an einer Shelleingabeaufforderung ein:

   appletviewer Name

Name steht für Folgendes:

Geben Sie z. B. zum Aufrufen von Applet Viewer über eine HTML-Datei, die ein Applet aufruft, an einer Shelleingabeaufforderung Folgendes ein:

  appletviewer $HOME/Dateiname.html

Dateiname ist dabei der Name der HTML-Datei.

Beispielsweise ist http://java.sun.com/applets/NervousText/Beispiel1.html die URL einer Webseite, die ein Applet aufruft. Geben Sie zum Aufrufen von Applet Viewer auf dieser Webseite an einer Shelleingabeaufforderung Folgendes ein:

appletviewer http://java.sun.com/applets/NervousText/Beispiel1.html

Applet Viewer erkennt die Option charset des Tags <META> nicht. Wenn die Datei, die Applet Viewer lädt, nicht als Systemstandard codiert ist, wird möglicherweise eine E/A-Ausnahmebedingung angezeigt. Verwenden Sie beim Ausführen des Befehls appletviewer die Option -encoding, um die Ausnahmebedingung zu vermeiden. Beispiel:

appletviewer -encoding JISAutoDetect Beispiel.html

Debugging von Applets mit Applet Viewer

Mit Hilfe der Option -debug von Applet Viewer können Sie Fehler in Applets beheben. Beim Debugging von Applets wird empfohlen, Applet Viewer über das Verzeichnis aufzurufen, in dem die HTML-Datei enthalten ist, die das Applet aufruft. Beispiel:

cd demo/applets/TicTacToe
../../bin/appletviewer -debug Beispiel1.html

Dokumentation zum Debugging von Applets finden Sie mit Hilfe des Applet Viewer auf der Website von Sun: http://java.sun.com.

| | |

Konfigurieren einer Speicherzuordnung von großen Seiten

|

Sie können die Unterstützung für große Seiten auf Systemen aktivieren, die dies unterstützen. |Starten Sie dazu Java unter Angabe der Option -Xlp.

|

Große Seiten werden in erster Linie verwendet, um |Leistungssteigerungen in Anwendungen zu erzielen, die große |Speichermengen zuordnen und häufig auf diesen Speicher zugreifen. |Die Leistungssteigerungen durch die Verwendung großer Seiten werden |hauptsächlich durch die geringe Anzahl Fehlschläge im Translation |Lookaside Buffer (TLB) erzielt. Der TLB ordnet einen größeren Bereich an virtuellem Speicher zu, |und daraus ergeben sich die Leistungssteigerungen.

|

Die Unterstützung für große Seiten muss im Kernel verfügbar und aktiviert sein, |damit Java große Seiten verwenden kann.

|

Stellen Sie zum Konfigurieren einer Speicherzuordnung von großen |Seiten zunächst sicher, dass der aktive Kernel große Seiten |unterstützt. Überprüfen Sie, ob die Datei /proc/meminfo die folgenden Zeilen enthält:

|
HugePages_Total:     <Anzahl Seiten>
|HugePages_Free:      <Anzahl Seiten>
|Hugepagesize:        <Seitengröße in KB>

Die Anzahl verfügbarer Seiten und deren Größe |ist je nach Distribution unterschiedlich.

|

Falls die Unterstützung für große Seiten nicht im Kernel verfügbar ist, |sind die entsprechenden Zeilen nicht in der Datei /proc/meminfo vorhanden. In diesem Fall müssen Sie einen neuen Kernel installieren, der große Seiten unterstützt.

|

Falls die Unterstützung für große Seiten zwar verfügbar, jedoch nicht aktiviert ist, |hat HugePages_Total den Wert 0. Dann muss der zuständige Administrator die Unterstützung für große Seiten aktivieren. Weitere Anweisungen hierzu finden Sie im Handbuch zum Betriebssystem.

|

Damit JVM große Seiten verwendet, muss auf Ihrem System eine ausreichende Anzahl zusammenhängender großer Seiten verfügbar sein. Sollte es nicht möglich sein, große Seiten zuzuordnen, selbst wenn genügend Seiten |verfügbar sind, hängen die großen Seiten möglicherweise nicht zusammen. Beim Konfigurieren der Anzahl großer Seiten während des Systemstarts |werden diese als zusammenhängende Seiten erstellt.

|

Die Zuordnung großer Seiten ist nur möglich, wenn JVM über Rootberechtigung verfügt. Zur Verwendung großer Seiten können Sie entweder Java als Root |ausführen oder das SUID-Bit des Java-Programms festlegen.

CORBA-Unterstützung

Java 2 Platform, Standard Edition (J2SE) unterstützt mindestens die Spezifikationen, die in den offiziellen Spezifikationen für die CORBA-Unterstützung in J2SE (V1.5) enthalten sind. In einigen Fällen unterstützt IBM J2SE ORB neuere Versionen der Spezifikationen.

Unterstützung für GIOP 1.2

Wie in Kapitel 13 und 15 der Spezifikation CORBA 2.3.1 (OMG-Dokument formal/99-10-07) beschrieben, unterstützt SDK alle GIOP-Versionen. Sie können dieses Dokument unter der folgenden Adresse abrufen:

http://www.omg.org/cgi-bin/doc?formal/99-10-07

Bidirektionales GIOP wird nicht unterstützt.

Unterstützung für portierbare Abfangprozesse

Wie von der OMG (Object Management Group) im Dokument ptc/01-03-04 beschrieben, unterstützt SDK portierbare Abfangprozesse. Sie können dieses Dokument unter der folgenden Adresse abrufen:

http://www.omg.org/cgi-bin/doc?ptc/01-03-04

Portierbare Abfangprozesse sind Hooks in den ORB (Object Request Broker), über die ORB-Services den normalen Ausführungsablauf des ORBs unterbrechen können.

Unterstützung für den Interoperable Naming Service

Wie von der OMG im Dokument ptc/00-08-07 beschrieben, unterstützt SDK den Interoperable Naming Service. Sie können dieses Dokument unter der folgenden Adresse abrufen:

http://www.omg.org/cgi-bin/doc?ptc/00-08-07

Der Standardport, der vom Transient Name Server (Befehl tnameserv) verwendet wird, wenn der Parameter ORBInitialPort nicht angegeben ist, wurde von 900 in 2809 geändert. Dies ist die Portnummer, die zusammen mit der IANA (Internet Assigned Number Authority) für einen CORBA Naming Service registriert wird. Programme, die von dieser Standardeinstellung abhängig sind, müssen möglicherweise aktualisiert werden, um mit dieser Version arbeiten zu können.

Der Ausgangskontext, der vom Transient Name Server zurückgegeben wird, lautet jetzt org.omg.CosNaming.NamingContextExt. Bereits vorhandene Programme, die den Verweis auf den Kontext org.omg.CosNaming.NamingContext eingrenzen, funktionieren weiterhin und müssen nicht erneut kompiliert werden.

Der ORB unterstützt die über die Interoperable Naming Service-Spezifikation definierten Parameter -ORBInitRef und -ORBDefaultInitRef, und die Operation ORB::string_to_object unterstützt jetzt die über die Interoperable Naming Service-Spezifikation definierten Formate für ObjectURL-Zeichenfolgen (corbaloc: und corbaname:).

Die OMG gibt die Methode ORB::register_initial_reference an, um einen Service mit dem Interoperable Naming Service zu registrieren. Diese Methode ist jedoch in der Sun Java Core-API der Version 5.0 nicht verfügbar. Programme, die in der aktuellen Version einen Service registrieren müssen, müssen diese Methode in der internen IBM ORB-Implementierungsklasse aufrufen. Dies gilt beispielsweise beim Registrieren des Services "MeinService":

((com.ibm.CORBA.iiop.ORB)orb).register_initial_reference("MeinService",
serviceRef); 

Dabei ist orb eine Instanz von org.omg.CORBA.ORB, die von ORB.init() zurückgegeben wird, und serviceRef ein CORBA-Objekt, das mit dem ORB verbunden ist. Dies ist ein vorläufiger Mechanismus, der mit zukünftigen Versionen nicht kompatibel ist und nicht auf ORBs anderer Hersteller portiert werden kann.

Systemmerkmale für die ORB-Tracefunktion

Durch eine Laufzeitfunktion zur Fehlerbehebung wird die Servicefreundlichkeit verbessert. Diese Funktion kann für die Problemdiagnose verwendet werden, oder sie wird vom IBM Kundendienst benötigt. Die Tracefunktion wird von drei Systemmerkmalen gesteuert.

Geben Sie z. B. Folgendes ein, um ein Trace für Ereignisse und formatierte GIOP-Nachrichten durchzuführen:

 java -Dcom.ibm.CORBA.Debug=true  
		-Dcom.ibm.CORBA.CommTrace=true MeineAnwendung   

Aktivieren Sie die Tracefunktion nicht für normale Operationen, da dies zu Leistungseinbußen führen kann. Obwohl Sie die Tracefunktion inaktiviert haben, funktioniert FFDC (First Failure Data Capture) weiterhin, so dass nur schwer wiegende Fehler dokumentiert werden. Wenn eine Debugausgabedatei generiert wird, prüfen Sie sie in Bezug auf dieses Problem. Z. B. hat der Server möglicherweise seinen Betrieb eingestellt, ohne dass ORB.shutdown() ausgeführt wurde.

Der Inhalt und das Format der Traceausgabe können von Version zu Version variieren.

Systemmerkmale zur Optimierung des ORB

Mit den folgenden Merkmalen können Sie den ORB optimieren:

Java 2-Sicherheitsberechtigungen für den ORB

Bei der Ausführung eines Java 2-Sicherheitsmanagers kann das Aufrufen einiger Methoden in den CORBA-API-Klassen Berechtigungsprüfungen verursachen, die wiederum zu einer Ausnahmebedingung SecurityException führen. Zu den hiervon betroffenen Methoden gehören:

Tabelle 2. Methoden, auf die sich das Ausführen eines Java 2-Sicherheitsmanagers auswirkt
Klasse/Schnittstelle Methode Erforderliche Berechtigung
org.omg.CORBA.ORB

init

java.net.SocketPermission resolve

org.omg.CORBA.ORB

connect

java.net.SocketPermission listen

org.omg.CORBA.ORB

resolve_initial_references

java.net.SocketPermission connect

org.omg.CORBA.
portable.ObjectImpl

_is_a

java.net.SocketPermission connect

org.omg.CORBA.
portable.ObjectImpl

_non_existent

java.net.SocketPermission connect

org.omg.CORBA.
portable.ObjectImpl

OutputStream _request (String, boolean)

java.net.SocketPermission connect

org.omg.CORBA.
portable.ObjectImpl

_get_interface_def

java.net.SocketPermission connect

org.omg.CORBA.
Request

invoke

java.net.SocketPermission connect

org.omg.CORBA.
Request

send_deferred

java.net.SocketPermission connect

org.omg.CORBA.
Request

send_oneway

java.net.SocketPermission connect

javax.rmi.
PortableRemoteObject

narrow

java.net.SocketPermission connect

Falls Ihr Programm eine der aufgeführten Methoden verwendet, müssen Sie sicherstellen, dass die erforderlichen Berechtigungen vorliegen.

ORB-Implementierungsklassen

Die ORB-Implementierungsklassen in diesem Release lauten:

Hierbei handelt es sich um die Standardwerte. Es wird jedoch empfohlen, diese Merkmale nicht direkt festzulegen bzw. nicht direkt auf die Implementierungsklassen zu verweisen. Aus Gründen der Portierbarkeit sollte ausschließlich auf die CORBA-API-Klassen und nicht auf die Implementierungsklassen verwiesen werden. Diese Werte werden in zukünftigen Releases möglicherweise geändert.

RMI-IIOP

Java Remote Method Invocation (RMI) bietet ein einfaches Verfahren für die verteilte Java-Programmierung. RMI-IIOP (RMI over IIOP) arbeitet auf der Grundlage des Standard-IIOP-Protokolls (IIOP - Internet Inter-ORB Protocol) der CORBA (Common Object Request Broker Architecture) und ermöglicht so Erweiterungen der Java-RMI bei Datenübertragungen. Dadurch sind direkte Interaktionen mit beliebigen anderen CORBA-Object-Request-Brokern (ORBs) möglich, unabhängig davon, ob diese in Java oder einer anderen Programmiersprache implementiert wurden.

Folgende Dokumentation steht zur Verfügung:

Implementieren des Steuerroutinenpools für RMI-Verbindungen

Thread-Pooling für Steuerroutinen von RMI-Verbindungen wird nicht standardmäßig aktiviert.

Wenn Sie das Verbindungspooling aktivieren wollen, das in der RMI-TCPTransport-Ebene implementiert ist, legen Sie die folgende Option fest:

-Dsun.rmi.transport.tcp.connectionPool=true (oder einen Wert ungleich null) 

Diese Runtime Environment-Version verfügt über keine Einstellungen, die Sie verwenden können, um die Anzahl Threads im Verbindungspool zu begrenzen.

Weitere Informationen finden Sie auf der Java-Website von Sun: http://java.sun.com.

Erweiterte BiDirectional-Unterstützung

IBM SDK umfasst erweiterte BiDirectional-Unterstützung. Weitere Informationen erhalten Sie unter http://www-106.ibm.com/developerworks/java/jdk/bidirectional/index.html. Die Javadoc-Komponente für das BiDirectional-Paket wird mit SDK in der Datei docs/apidoc.zip mitgeliefert.

Funktionale Erweiterungen für BigDecimal

| |

Über Java 5.0 wurde die IBM BigDecimal-Klasse von Sun als java.math.BigDecimal übernommen. com.ibm.math.BigDecimal wird von IBM nicht mehr gepflegt und ist daher veraltet. Es wird empfohlen, für die Verwendung von java.math.BigDecimal bereits vorhandenen Java-Code zu migrieren.

|

Die neue Klasse java.math.BigDecimal verwendet dieselben Methoden wie die Vorversion |und wie com.ibm.math.BigDecimal. Der bereits vorhandene Code, der java.math.BigDecimal verwendet, funktioniert weiterhin ordnungsgemäß.

|

Wenn Sie bereits vorhandenen Java-Code migrieren wollen, um die Klasse java.math.BigDecimal zu verwenden, ändern Sie die Importanweisung am Anfang Ihrer Java-Datei von import com.ibm.math.*; in import java.math,*;.

Unterstützung des Euro-Symbols

Für IBM SDK und Runtime Environment gilt ab dem 1. Januar 2002 für die Länder der Europäischen Währungsunion der Euro als Standardwährung.

Wenn Sie die frühere nationale Währung verwenden möchten, geben Sie in der Java-Befehlszeile -Duser.variant=PREEURO an.

Wenn Sie mit der britischen, dänischen oder schwedischen Ländereinstellung arbeiten und den Euro als Währung verwenden möchten, geben Sie in der Java-Befehlszeile -Duser.variant=EURO an.

Verwenden der Java Communications API (JavaComm)

Das Paket mit der Java Communications API (JavaComm) ist ein optional erhältliches Paket, das zusammen mit Runtime Environment for Linux auf IA32-, PPC32-/PPC64- und AMD64/EM64T-Plattformen eingesetzt werden kann. JavaComm kann unabhängig von SDK oder Runtime Environment installiert werden.

Mit Hilfe der JavaComm API sind Java-Anwendungen in der Lage, Übertragungen über den seriellen Anschluss und den Parallelanschluss für Technologien, wie z. B. Voicemail, Fax und Smartcards, unabhängig von der jeweiligen Plattform durchzuführen. Nach dem Schreiben von Übertragungen über den seriellen Anschluss oder den Parallelanschluss für Ihre Anwendung können Sie die entsprechenden Dateien in Ihre Anwendung aufnehmen.

Die Java Communications API unterstützt serielle EIA-232-Anschlüsse (EIA - Electronic Industries Association) bzw. RS232-Anschlüsse sowie IEEE 1284-Parallelanschlüsse (IEEE - Institute of Electrical and Electronics Engineers). Sie wird auf Systemen mit IBM Runtime Environment Version 5.0 unterstützt.

Bei Verwendung der Java Communications API haben Sie folgende Möglichkeiten:

Installieren der Java Communications API

Sie sollten vor der Installation der Java Communications API sicherstellen, dass eine Kopie von SDK oder Runtime Environment installiert ist.

Wenn Sie bei der ursprünglichen Installation von Java das RPM-Paket verwendet haben, müssen Sie die Java Communications API über die RPM-Datei installieren. Gehen Sie zur Installation der Java Communications API über ein RPM-Paket folgendermaßen vor:

  1. Rufen Sie eine Shelleingabeaufforderung auf, und stellen Sie sicher, dass Sie als Root angemeldet sind.
  2. Installieren Sie die RPM-Datei der Java Communications API mit dem Befehl rpm -ivh. Beispiel:
    rpm -ivh ibm-java2-<Architektur>-javacomm-5.0-0.0.<Architektur>.rpm

    Die Java Communications API wird in der Verzeichnisstruktur /opt/ibm/java2-i386-50/ installiert.

Gehen Sie zur Installation der Java Communications API über eine Datei mit der Erweiterung .tgz folgendermaßen vor:

  1. Stellen Sie die Archivdatei der Java Communications API, ibm-java2-javacomm-50-linux-<Architektur>.tgz, in das Verzeichnis, in dem das Verzeichnis IBMJava2-50 enthalten ist.
  2. Dekomprimieren Sie diese Datei über eine Shelleingabeaufforderung in dem Verzeichnis, in dem die Datei mit der Erweiterung .tgz enthalten ist:
    tar -xvzf ibm-java2-javacomm-50-linux-<Architektur>.tgz
    

    Die Dateien der Java Communications API werden daraufhin in die Unterverzeichnisse des vorhandenen Verzeichnisses IBMJava2-50 extrahiert.

Speicherposition der Java Communications API-Dateien

Die Java Communications API-Dateien werden in folgenden Verzeichnissen installiert:

Falls Sie bei der Installation das Standardverzeichnis verwendet haben, befindet sich die Datei comm.jar im Verzeichnis /opt/ibm/java2-i386-50/jre/lib/ext.

Wenn Sie das Paket in einem anderen Verzeichnis installiert haben, werden die Dateien in dieselbe Verzeichnisstruktur gestellt, an Stelle von /opt/ibm/java2-i386-50/ wird jedoch das Verzeichnis verwendet, in dem Sie die Java Communications API installiert haben.

Konfigurieren der Java Communications API

Nach der Installation der Java Communications API müssen Sie folgende Schritte durchführen:

Ändern des Zugriffsmodus für den seriellen Anschluss und den Parallelanschluss

Nach der Installation der Java Communications API müssen Sie den Zugriffsmodus für den seriellen Anschluss und den Parallelanschluss so ändern, dass die Benutzer auf diese Einheiten zugreifen können. Sie müssen den Benutzern Schreib-/Lesezugriff auf die erforderlichen Einheiten einräumen. Melden Sie sich dazu als Root an, und verwenden Sie einen der folgenden Befehle:

    chmod 666
/dev/ttyS0    (wird auch als serieller Anschluss COM1 bezeichnet) 
    chmod 666 /dev/lp0      (wird auch als Parallelanschluss LPT1 bezeichnet)
    chmod 666 /dev/ttyS1    (wird auch als serieller Anschluss COM2 bezeichnet)
    chmod 666 /dev/ttyS2    (wird auch als serieller Anschluss COM3 bezeichnet)
    chmod 666 /dev/ttyS3    (wird auch als serieller Anschluss COM4 bezeichnet)

Mit diesen Befehlen wird allen Benutzern auf dem System Schreib-/Lesezugriff erteilt.

Alternativ können auch die Berechtigungen 660 vergeben und bestimmte Benutzer zu der Gruppe hinzugefügt werden, in der sich die Einheiten befinden. Auf einem SUSE-System befinden sich die Einheiten z. B. in der Gruppe uucp. Wenn die Benutzer daher in diese Gruppe aufgenommen werden, erhalten sie Zugriff auf die Einheiten.

Ändern Sie bei Bedarf den Zugriffsmodus anderer Anschlüsse.

Angeben von Einheiten in der Datei javax.comm.properties

Über die Datei javax.comm.properties können Sie die Präfixe der Einheiten angeben, die der Java Communications API zur Verfügung stehen. Außerdem können Sie angeben, ob es sich um parallele oder serielle Einheiten handelt. Die Anschlussnummern werden allen Einheiten nacheinander zugeordnet. Wenn Sie z. B. /dev/ttyS=PORT_SERIAL angeben und die Einheiten /dev/ttyS0 und /dev/ttyS1 vorhanden sind, werden diese COM1 bzw. COM2 zugeordnet.

Zur Verwendung der seriellen USB-Anschlüsse müssen Sie das Kommentarzeichen in der Zeile mit der Angabe /dev/ttyUSB=PORT_SERIAL in der Datei javax.comm.properties entfernen. Sollten die Einheiten /dev/ttyUSB0 und /dev/ttyUSB1 vorhanden, COM1 und COM2 aber bereits zugeordnet sein, werden die seriellen USB-Einheiten den nächsten Anschlüssen, COM3 und COM4, zugeordnet.

Aktivieren von seriellen Anschlüssen auf IBM ThinkPads

Bei den meisten ThinkPads sind die seriellen Anschlüsse standardmäßig im BIOS inaktiviert. Derzeit besteht keine Möglichkeit, die Anschlüsse unter Linux zu aktivieren (mit dem Paket tpctl können die Anschlüsse nicht aktiviert werden, wenn sie im BIOS inaktiviert sind).

Zum Aktivieren der Anschlüsse im BIOS müssen Sie die DOS-Version des ThinkPad-Konfigurationsprogramms verwenden. Dieses Programm steht auf der Download-Site für IBM ThinkPads zur Verfügung. Für die Verwendung des ThinkPad-Konfigurationsprogramms benötigen Sie eine startfähige DOS-Diskette. Beachten Sie, dass das ThinkPad-Konfigurationsprogramm - je nach den verwendeten Installationsoptionen - möglicherweise als Teil der ThinkPad-Dienstprogramme unter Windows installiert wurde. In diesem Fall können Sie es über eine Eingabeaufforderung unter Windows aufrufen.

Das unter Windows verfügbare ThinkPad-Konfigurationsprogramm bietet Optionen zum Aktivieren oder Inaktivieren der seriellen Anschlüsse und Parallelanschlüsse. Dadurch werden allerdings nicht die Einstellungen im BIOS geändert. Wenn Sie mit diesem Programm daher unter Windows arbeiten, sind die Anschlüsse verfügbar. Sobald Ihre Maschine allerdings unter Linux erneut gestartet wird, werden die Anschlüsse nicht aktiviert.

Einschränkung beim Drucken mit der Java Communications API

Bei Druckvorgängen über die Java Communications API müssen Sie auf dem Drucker möglicherweise die Tasten für Seitenvorschub oder Weiter oder eine ähnliche Funktion drücken.

Deinstallieren der Java Communications API

Die Vorgehensweise zur Deinstallation der Java Communications API hängt davon ab, ob Sie das installierbare RPM-Paket (Red Hat Package Manager) oder das komprimierte TAR-Paket (Tape Archive) installiert haben.

Deinstallieren des RPM-Pakets (Red Hat Package Manager)

Gehen Sie zum Deinstallieren der Java Communications API folgendermaßen vor, falls Sie das installierbare RPM-Paket installiert haben:

  1. Geben Sie an einer Shelleingabeaufforderung Folgendes ein:

        rpm -e ibm-java2-<Architektur>-javacomm-5.0-0.0     

    Wahlweise können Sie auch ein grafisches Tool, wie z. B. kpackage oder yast2, verwenden.

  2. Sollten in dem Verzeichnis, in dem Sie die Java Communications API installiert haben, keine anderen Tools enthalten sein, die Sie benötigen, entfernen Sie dieses Verzeichnis aus der Anweisung PATH.

Deinstallieren des komprimierten TAR-Pakets (Tape Archive)

Löschen Sie zum Deinstallieren der Java Communications API, falls Sie das komprimierte TAR-Paket installiert haben, die folgenden Dateien aus dem Verzeichnis, in dem sie installiert wurden:

Dokumentation zur Java Communications API

Dokumentation zu APIs und Beispiele zur Java Communications API finden Sie auf der Sun-Website unter folgender Adresse: http://java.sun.com

Implementieren von Java-Anwendungen

(Nur Linux IA (32 Bit) und PPC32) Verwenden des Java-Plug-ins

Bei dem Java-Plug-in handelt es sich um ein Web-Browser-Plug-in. Durch Verwendung des Java-Plug-ins können Sie die Standard-JVM Ihres Web-Browsers umgehen und zum Ausführen von Applets oder Beans im Browser die gewünschte Laufzeitumgebung verwenden.

Sie müssen warten, bis die Applets vollständig geladen wurden, um zu vermeiden, dass sich der Browser "aufhängt". Wenn Sie beispielsweise die Knöpfe Zurück und Weiter verwenden, während ein Applet geladen wird, können die HTML-Seiten unter Umständen nicht geladen werden.

Das Java-Plug-in ist auf der Website von Sun unter http://java.sun.com/j2se/1.5.0/docs/guide/plugin/developer_guide/ dokumentiert.

Unterstützte Browser

|Für Linux PPC32 wird Mozilla 1.6 als Browser unterstützt.

|Informationen zu Linux IA32 finden Sie |in Tabelle 3.

|Tabelle 3. Vom Java-Plug-in unterstützte Browser unter Linux IA32
|Distribution |Netscape-Standardversion |Von Netscape unterstützte Versionen |Mozilla-Standardversion |Von Mozilla unterstützte Versionen
|Red Hat Enterprise Linux 3.0 |- |7.x |1.4.2 |1.4.1, 1.4.2, 1.7.8, Firefox 1.0.x
|Red Hat Enterprise Linux 4.0 |4.8 |7.x |1.7.3 |1.4.1, 1.4.2, 1.7.8, Firefox 1.0.x
|SUSE Linux Enterprise Server 9.0 |- |7.x |1.6 |1.4.1, 1.4.2, 1.6, 1.7.8, Firefox 1.0.x
|

Installieren und Konfigurieren des Java-Plug-ins

|Mehrere Versionen des Java-Plug-ins werden mit SDK geliefert. Sie können die korrekte Version für Ihren Browser auswählen. Am häufigsten werden folgende Versionen verwendet:

| |
libjavaplugin_oji.so
|
Das allgemeinste Plug-in. Es basiert auf der Initiative Open JVM Integration von Mozilla und wird für die meisten Mozilla-Produkte und von Mozilla abgeleiteten Produkte, einschließlich Firefox, verwendet. |
|
libjavaplugin_ojigtk2.so
|
Dasselbe Plug-in wie oben, jedoch mit dem GTK2-Toolkit kompiliert. |

|Im Folgenden finden Sie Anweisungen zum Installieren des Plug-ins auf einigen gängigen Browsern.

|Sie müssen das Plug-in symbolisch verlinken, statt es zu kopieren, so dass es JVM finden kann.

Mozilla

|Nur Mozilla ab Version 1.4 wird unterstützt.

Gehen Sie wie folgt vor, um das Java-Plug-in allen Benutzern zur Verfügung zu stellen:

  1. Melden Sie sich als Root an.
  2. Wechseln Sie in das Plug-ins-Verzeichnis für Mozilla (dieses Verzeichnis kann bei einigen Linux-Distributionen anders lauten).
    cd /usr/local/mozilla/plugins/
  3. |Erstellen Sie einen symbolischen Link zu libjavaplugin_oji.so. |
    ln -s /opt/ibm/java2-i386-50/jre/bin/libjavaplugin_oji.so .

Sie müssen das Plug-in symbolisch verlinken, statt es zu kopieren, so dass es JVM finden kann.

| | |

Firefox

|

Gehen Sie wie folgt vor, um das Java-Plug-in allen Benutzern zur Verfügung zu stellen:

|
    |
  1. Melden Sie sich als Root an.
  2. |

  3. Wechseln Sie in das Plug-ins-Verzeichnis für Firefox (dieses Verzeichnis kann bei einigen |Linux-Distributionen anders lauten). |
    cd /usr/local/mozilla-firefox/plugins/
  4. |
  5. |Erstellen Sie einen symbolischen Link zu libjavaplugin_oji.so. |
    ln -s /opt/ibm/java2-i386-50/jre/bin/libjavaplugin_oji.so .
    |

Sie müssen das Plug-in symbolisch verlinken, statt es zu kopieren, so dass es JVM finden kann.

Netscape 7.1 und höher

Zum Installieren und Konfigurieren des Java-Plug-ins für Netscape müssen Sie einen symbolischen Link von der Bibliotheksdatei /opt/ibm/java2-i386-50/jre/bin/javaplugin_oji.so zum Plug-ins-Verzeichnis Ihres Browsers definieren (/Installationspfad Ihres Browsers/plugins).

  1. Melden Sie sich als Root an.
  2. Wechseln Sie in das Plug-ins-Verzeichnis für Netscape (dieses Verzeichnis kann bei einigen Linux-Distributionen anders lauten).
    cd /usr/local/netscape/plugins/
  3. Erstellen Sie einen symbolische Link zu javaplugin_oji.so.
    ln -s /opt/ibm/java2-i386-50/jre/bin/javaplugin_oji.so .

Sie müssen das Plug-in symbolisch verlinken, statt es zu kopieren, so dass es JVM finden kann.

Allgemeine Dokumentobjektmodellunterstützung (Document Object Model, DOM)

Auf Grund von Einschränkungen bei bestimmten Browsern können Sie möglicherweise nicht alle Funktionen des Pakets org.w3c.dom.html implementieren.

Verwenden von DBCS-Parametern

Das Java-Plug-in unterstützt Doppelbytezeichen (z. B. Traditionelles Chinesisch BIG-5, Koreanisch, Japanisch) als Parameter für die Tags <APPLET>,<OBJECT> und <EMBED>. Sie müssen die richtige Zeichencodierung für das HTML-Dokument auswählen, damit das Java-Plug-in den Parameter syntaktisch analysieren kann. Geben Sie die Zeichencodierung für das HTML-Dokument mit Hilfe des Tags <META> im Abschnitt <HEAD> wie folgt an:

<meta http-equiv="Content-Type" content="text/html; charset=big5">

In diesem Beispiel wird dem Browser mitgeteilt, dass er die HTML-Datei mit Hilfe der Zeichencodierung für Chinesisch BIG-5 syntaktisch analysieren soll. Alle Parameter werden ordnungsgemäß an das Java-Plug-in weitergeleitet. Einige der älteren Browserversionen erkennen diesen Tag möglicherweise nicht richtig. In diesem Fall können Sie erzwingen, dass der Browser diesen Tag ignoriert. Sie müssen die Codierung jedoch möglicherweise manuell ändern.

Sie können angeben, welche Codierung Sie verwenden möchten, um die HTML-Datei syntaktisch zu analysieren:

(nur Linux IA (32 Bit), PPC32 und PPC64) Verwenden von Java Web Start

Mit Hilfe von Java Web Start können Sie Java-Anwendungen implementieren. Web Start bietet dem Benutzer die Möglichkeit, Anwendungen direkt über das Internet aufzurufen und zu verwalten. Über Java Web Start können Sie Anwendungen auf einfache Weise über das Internet starten. Dabei haben Sie die Gewissheit, dass Sie mit der neuesten Version arbeiten. Installations- oder Upgradeprozeduren sind daher nicht mehr erforderlich. Bei der Arbeit mit Java Web Start muss keine Software heruntergeladen und installiert werden, so dass komplexe Installationsoptionen umgangen werden.

|Neben den unter http://java.sun.com/j2se/1.5.0/docs/guide/javaws/developersguide/syntax.html#resources dokumentierten Argumenten des Attributs java-vm-args unterstützt Web Start -Xgcpolicy zum Festlegen der Garbage-Collection-Richtlinie.

Weitere Informationen zu Browsern, die Web Start unterstützen, finden Sie im Abschnitt Unterstützte Browser.

Weitere Informationen zu Web Start finden Sie unter http://java.sun.com/products/javawebstart und http://java.sun.com/j2se/1.5.0/docs/guide/javaws/index.html. Weitere Informationen zur Implementierung von Anwendungen finden Sie unter http://java.sun.com/j2se/1.5.0/docs/guide/deployment/index.html.

Ausführen von Java Web Start

Java Web Start Version 5.0 wird automatisch installiert, wenn Sie Java mit Hilfe der RPM- oder TGZ-Pakete installieren.

|Wenn Sie Java aus dem TGZ-Paket extrahieren, führen Sie das Shell-Script jre/lib/javaws/updateSettings.sh aus, um die Dateien .mailcap und .mime.types auf Ihrem System zu aktualisieren.

Sie können Web Start auf drei Arten aufrufen:

  1. Wählen Sie auf einer Webseite einen Link aus, der auf eine JNLP-Datei verweist.
  2. Geben Sie an einer Shelleingabeaufforderung den Befehl javaws <URL> ein, wobei <URL> die Speicherposition einer JNLP-Datei ist.
  3. |Falls Sie Java Web Start bereits zum Öffnen der Anwendung verwendet haben, führen Sie javaws im Verzeichnis JRE/bin aus, um Java Application Cache Viewer zu starten.

Sobald eine Anwendung heruntergeladen wurde, wird sie im Cache der Java-Anwendung zwischengespeichert. Wenn erneut auf die Anwendung zugegriffen wird, lädt Java Web Start eine neuere Version der Anwendung herunter, sofern diese verfügbar ist. Andernfalls wird die im Cache vorhandene Version verwendet.

Beim Auftreten eines Fehlers in einer JNLP-Datei (z. B. ein ungültiger Befehlsname) schlägt Web Start fehl, ohne dass eine Fehlernachricht angezeigt wird.

Ausliefern von Java-Anwendungen

Bei einer Java-Anwendung kann im Gegensatz zu einem Java-Applet kein Web-Browser für Installations- und Laufzeitservices verwendet werden. Bei der Auslieferung einer Java-Anwendung kann im Softwarepaket beispielsweise Folgendes enthalten sein:

Zum Ausführen der Anwendung benötigt der Benutzer Runtime Environment for Linux. In SDK for Linux ist Runtime Environment enthalten. Sie können jedoch nicht davon ausgehen, dass SDK for Linux auf den Systemen aller Benutzer installiert ist.

Die Lizenz für SDK for Linux berechtigt nicht dazu, Dateien aus SDK zusammen mit der Anwendung weiter zu verteilen. Sie müssen sicherstellen, dass auf dem Zielsystem eine lizenzierte Version von SDK for Linux installiert ist.

| | |

Gemeinsame Nutzung von Klassendaten auf verschiedenen JVMs

|

IBM Virtual Machine (VM) ermöglicht die gemeinsame Nutzung von Boot- und Anwendungsklassen auf verschiedenen VMs, indem diese als gemeinsam genutzter Speicher in einen Cache gestellt werden. Durch die gemeinsame Nutzung von Klassen verringert sich die gesamte virtuelle Speicherbelegung, wenn mehrere VMs einen Cache gemeinsam nutzen. Außerdem verkürzt sich hierdurch der Systemstart von VM, nachdem der Cache erstellt wurde. Der Cache für gemeinsam genutzte Klassen ist unabhängig von den aktiven VMs und besteht über die Laufzeit der VM hinaus, über die der Cache gestartet wurde.

| |

Übersicht über die gemeinsame Nutzung von Klassen

|

Mit IBM SDK können Sie so viele Klassen wie möglich gemeinsam nutzen. Dieser Vorgang läuft für den Benutzer transparent ab.

| |

Cache-Inhalte

|

Der Cache für gemeinsam genutzte Klassen enthält |schreibgeschützte statische Klassendaten und Metadaten, die die |Klassen beschreiben. Alle VMs können die Daten im Cache lesen oder |aktualisieren. VMs, die den Cache gemeinsam nutzen, müssen |dieselbe Version aufweisen. Bei der Bearbeitung von Laufzeitbytecodes müssen Sie sorgfältig vorgehen. (Siehe |hierzu die Informationen im Abschnitt Änderungen bei Laufzeitbytecodes.)

| |

Dynamisches Aktualisieren des Caches

|

Da der Cache für gemeinsam genutzte Klassen über die |Laufzeit von VMs hinaus besteht, wird er dynamisch |aktualisiert, um alle Änderungen wiederzugeben, die |möglicherweise an JARs oder Klassen auf dem Dateisystem |vorgenommen wurden. Durch die dynamische Aktualisierung |erscheint der Cache für die Anwendung transparent, die den Cache |nutzt.

| |

Aktivieren der gemeinsamen Nutzung von Klassen

|

Sie können die gemeinsame Nutzung von Klassen mit Hilfe der |Option -Xshareclasses beim Starten von VM |aktivieren. VM stellt dadurch eine Verbindung zu einem |vorhandenen Cache her oder erstellt einen neuen Cache, falls noch |keiner vorhanden ist. Alle über VM geladenen Boot- und Anwendungsklassen werden standardmäßig gemeinsam genutzt. Benutzerdefinierte Klassenladeprogramme nutzen den Cache automatisch gemeinsam, wenn sie das Klassenladeprogramm der Anwendung erweitern. Sie müssen die zusammen mit VM verfügbare Java Helper API verwenden, um auf den Cache zugreifen zu können. (Siehe hierzu die Informationen im Abschnitt Anpassen benutzerdefinierter Klassenladeprogramme an gemeinsam genutzte Klassen.)

| |

Cache-Sicherheit

|

Der Zugriff auf den Cache für gemeinsam genutzte Klassen wird durch Berechtigungen des Betriebssystems und Java-Sicherheitsberechtigungen begrenzt. Der Cache für gemeinsam genutzte Klassen wird standardmäßig mit Benutzerzugriff erstellt, außer wenn die Befehlszeilenunteroption groupAccess verwendet wird. Nur ein Klassenladeprogramm, in dem die gemeinsame Nutzung von Klassen registriert ist, kann Klassen zum Cache für gemeinsam genutzte Klassen hinzufügen. Wenn ein Java-Sicherheitsmanager installiert ist, muss Klassenladeprogrammen, mit Ausnahme von Klassenladeprogrammen des Standardbootprogramms, von Anwendungen und Erweiterungen, die Berechtigung zur gemeinsamen Nutzung von Klassen erteilt werden, indem der Datei java.policy die Klasse SharedClassPermission hinzugefügt wird. (Siehe |hierzu die Informationen im Abschnitt Verwenden von SharedClassPermission.) |Die Laufzeitberechtigung "createClassLoader" beschränkt die Erstellung neuer Klassenladeprogramme und daher auch den Zugriff auf den Cache.

| |

Lebensdauer des Caches

|

Auf einem System können mehrere Caches vorhanden sein. Sie |werden nach Namen als Unteroption des Befehls |-Xshareclasses angegeben. VM kann nur mit jeweils einem Cache verbunden werden. Die Cachegröße wird beim |Systemstart über den Befehl -Xscmx<n>[k|m|g] |angegeben, und die Größe ist dann für die gesamte Lebensdauer des |Caches festgelegt. Caches bestehen solange, bis sie |explizit über eine Unteroption des Befehls |-Xshareclasses gelöscht werden oder das System erneut gestartet wird.

| |

Cache-Dienstprogramme

|

Alle Cache-Dienstprogramme sind Unteroptionen des |Befehls -Xshareclasses. Mit |-Xshareclasses:help können Sie eine Liste der |verfügbaren Unteroptionen anzeigen.

| |

Verwenden von Befehlszeilenoptionen für die gemeinsame Nutzung von Klassen

|

Die gemeinsame Nutzung von Klassen wird mit Hilfe der Befehlszeilenoptionen -Xshareclasses und -Xscmx aktiviert und konfiguriert.

| | |

Erstellen, Belegen, Überwachen und Löschen eines Caches

|

Zum Aktivieren der gemeinsamen Nutzung von Klassen müssen Sie |die Angabe -Xshareclasses[:name=<Name>] in |der Befehlszeile Ihrer Anwendung hinzufügen. VM stellt |dann entweder eine Verbindung zu einem vorhandenen Cache mit dem |angegebenen Namen her oder erstellt einen neuen Cache mit diesem |Namen. Wenn ein neuer Cache erstellt wurde, wird dieser mit allen |Boot- und Anwendungsklassen gefüllt, die geladen wurden, bis der Cache voll wird. Sollten |zwei oder mehr VMs gleichzeitig gestartet werden, schreiben diese |gleichzeitig Daten in den Cache.

|

Wenn Sie überprüfen möchten, ob der Cache erstellt wurde, führen |Sie den Befehl java -Xshareclasses:listAllCaches aus. Sie müssen den Befehl java -Xshareclasses:[name=<Name>],printStats ausführen, um anzuzeigen, wie viele Klassen und Klassendaten gemeinsam genutzt werden. (Diese Dienstprogramme können entweder nach der Beendigung der |Anwendungs-VM oder in einem anderen Befehlsfenster ausgeführt werden.)

|

Wenn Sie Klassen anzeigen möchten, die in den Cache |geladen oder im Cache gespeichert wurden, fügen Sie in der |Befehlszeile Ihrer Anwendung -Xshareclasses:[name=<Name>],verbose |hinzu.

|

Zum Löschen des zuvor erstellten Caches führen Sie den Befehl |java -Xshareclasses:[name=<Name>],delete aus. Caches müssen normalerweise nur dann gelöscht werden, wenn sie |zahlreiche veraltete Klassen enthalten bzw. wenn der Cache voll |ist und Sie einen größeren Cache erstellen möchten.

|

Es wird empfohlen, die Cachegröße für Ihre spezielle Anwendung zu optimieren, da die Standardeinstellung sehr wahrscheinlich nicht die optimale Größe angibt. Am besten ermitteln Sie die optimale Cachegröße, indem Sie einen großen Cache (mit -Xscmx) angeben, die Anwendung ausführen und dann mit printStats ermitteln, wie viele Klassendaten gespeichert wurden. Addieren Sie für alle Fälle einen kleinen Betrag zu dem in printStats angezeigten Wert hinzu. Da Klassen jederzeit während der Lebensdauer von VM geladen werden können, empfiehlt es sich, diese Analyse nach Beendigung der Anwendung durchzuführen. Da jedoch ein voller Cache keine negativen Auswirkungen auf die Leistung oder Funktionalität von VMs hat, die mit diesem Cache verbunden sind, können Sie auch eine kleinere als die erforderliche Cachegröße auswählen.

|

Wenn ein Cache voll wird, wird eine entsprechende Nachricht in der Befehlszeile aller VMs angezeigt, die diesen Cache verwenden. Diese VMs laden dann weitere Klassen in ihren eigenen Prozessspeicher. Die in einem vollen Cache enthaltenen |Klassen können weiterhin gemeinsam genutzt werden, der volle |Cache ist jedoch schreibgeschützt und kann nicht mit neuen |Klassen aktualisiert werden.

| |

Leistung und Speicherbelegung

|

Die gemeinsame Nutzung von Klassen empfiehlt sich |insbesondere auf Systemen, auf denen mit mehreren VMs |gearbeitet wird, die ähnlichen Code ausführen. Diese Systeme profitieren von der |geringeren virtuellen Speicherbelegung. Außerdem ist die gemeinsame Nutzung von Klassen auf Systemen sinnvoll, auf denen VMs häufig |gestartet und heruntergefahren werden. Auf diesen Systemen |verkürzt sich dadurch der Zeitraum für den Systemstart.

|

Der Aufwand für das Erstellen und Belegen eines neuen Caches |ist minimal. Wenn Sie die gemeinsame Nutzung von Klassen verwenden, aber nur eine einzige VM starten, dauert der Startvorgang 0 bis 5 % länger als der Startvorgang einer VM, die die gemeinsame Nutzung von Klassen nicht verwendet. Wenn Sie die gemeinsame Nutzung von Klassen verwenden und zwei VMs starten, lädt die zweite VM 10 bis 40 % schneller als eine VM, die die gemeinsame Nutzung von Klassen nicht verwendet. Dies hängt vom Betriebssystem |und der Anzahl geladener Klassen ab. Bei mehreren gleichzeitig ablaufenden VMs ergeben sich größere Verkürzungen bei der Startzeit.

|

Wenn bei der Ausführung Ihrer Anwendung die gemeinsame |Nutzung von Klassen aktiviert ist, können Sie mit Hilfe von |Betriebssystemtools die Verringerung der virtuellen Speicherbelegung anzeigen.

| |

Einschränkungen und besondere Aspekte bei der gemeinsamen Nutzung von Klassen

| |

Grenzwerte für die Cachegröße

|

Der Cache für gemeinsam genutzte Klassen wird mit dem Mechanismus 'System V IPC' für gemeinsam genutzten Speicher zugewiesen.

|

Die maximale theoretische Cachegröße beträgt 2 GB. Die Cachegröße, die Sie angeben können, wird durch den auf dem System verfügbaren physikalischen Speicher und den Umlagerungsspeicher begrenzt.

|

Da der virtuelle Adressraum eines Prozesses vom Cache für gemeinsam genutzte Klassen und dem Java-Freispeicher gemeinsam genutzt wird, verringert sich bei Erhöhung der maximalen Größe des Java-Freispeichers die Größe des Caches für gemeinsam genutzte Klassen, den Sie erstellen können.

|

Die Cachegröße ist durch die Einstellungen für |SHMMAX begrenzt, da hiermit der |gemeinsam genutzte Speicher begrenzt wird, der |zugeordnet werden kann. Diese Einstellungen sind in der Datei |/proc/sys/kernel/shmmax enthalten. Der Wert für SHMMAX |wird normalerweise auf 30 MB festgelegt.

| |

Änderungen bei Laufzeitbytecodes

|

Damit VMs, die einen JVMTI-Agenten verwenden, mit dem Bytecode |geändert werden kann, die gemeinsame Nutzung von Klassen |ermöglicht wird, muss in der Befehlszeile die Unteroption |modified=<Geänderter Kontext> verwendet werden (siehe oben). Bei dem geänderten Kontext handelt es sich um einen benutzerdefinierten Deskriptor, der die Art der durchgeführten Änderung beschreibt. Alle VMs, die einen bestimmten geänderten Kontext |verwenden, müssen den Bytecode für jede Klasse in einer berechenbaren, |wiederholt anwendbaren Weise ändern, so dass die im Cache gespeicherten, |geänderten Klassen die erwarteten Änderungen aufweisen, |wenn sie von einer anderen VM geladen werden. Der Grund dafür, |dass alle Änderungen berechenbar sein müssen, besteht darin, dass |Klassen, die aus dem Cache für gemeinsam genutzte Klassen geladen |wurden, nicht über den Agenten erneut geändert werden können. Geänderter |und nicht geänderter Bytecode kann im selben Cache gespeichert |werden. Weitere Informationen hierzu finden Sie im Handbuch |Diagnostics Guide.

| |

Betriebssystemeinschränkungen

|

Bei Betriebssystemen, die sowohl |32-Bit-Anwendungen als auch 64-Bit-Anwendungen ausführen können, ist |die gemeinsame Nutzung von Klassen zwischen VMs mit 32 Bit und 64 Bit |nicht zulässig. |Mit der Unteroption listAllCaches werden je |nach Adressmodus der verwendeten VM 32-Bit- oder 64-Bit-Caches |aufgelistet.

|

Der Cache für gemeinsam genutzte Klassen benötigt |Plattenspeicherplatz zum Speichern von ID-Informationen zu den Caches auf dem System. Diese Informationen sind im Verzeichnis |/tmp/javasharedresources enthalten. Wenn das Verzeichnis mit |den ID-Informationen gelöscht wird, kann VM die gemeinsam |genutzten Klassen auf dem System nicht identifizieren und muss den Cache erneut |erstellen. Mit dem Befehl ipcs können Sie |die von VM oder einer Anwendung verwendeten Speichersegmente |anzeigen.

|

Benutzer, die JVM ausführen, müssen zur Verwendung |eines Caches für gemeinsam genutzte Klassen in derselben Gruppe |sein. Die Berechtigungen für den Zugriff auf einen Cache für gemeinsam genutzte Klassen werden vom Betriebssystem umgesetzt. Falls kein Cachename angegeben wird, wird der |Benutzername an den Standardnamen angehängt, damit mehrere Benutzer |auf demselben System standardmäßig eigene Caches erstellen.

| |

Verwenden von SharedClassPermission

|

Wenn ein Sicherheitsmanager zusammen mit der gemeinsamen Nutzung von Klassen verwendet wird und die ausgeführte Anwendung ihre eigenen Klassenladeprogramme verwendet, müssen diesen Klassenladeprogrammen Berechtigungen zur gemeinsamen Nutzung von Klassen erteilt werden, bevor sie Klassen gemeinsam nutzen können. Fügen Sie der Datei java.policy Berechtigungen zur gemeinsamen Nutzung von Klassen unter Verwendung des Klassennamens des Klassenladeprogramms (Platzhalterzeichen sind zulässig) und "read", "write" oder "read,write" zur Angabe der erteilten Zugriffsberechtigung hinzu. |Beispiel:

|
permission com.ibm.oti.shared.SharedClassPermission "com.abc.customclassloaders.*", "read,write";

Wenn ein Klassenladeprogramm nicht die korrekten Berechtigungen hat und versucht, Klassen gemeinsam zu nutzen, wird die Ausnahmebedingung AccessControlException ausgelöst. Sie können die Berechtigungen der Klassenladeprogramme für das Standardbootprogramm, für Anwendungen oder Erweiterungen nicht ändern oder verringern.

| |

Anpassen benutzerdefinierter Klassenladeprogramme an gemeinsam genutzte Klassen

|

Die meisten Java-Anwendungen verwenden die Klassenladeprogramme |von VM oder verfügen über benutzerdefinierte Klassenladeprogramme, |die eine Erweiterung zu java/net/URLClassLoader darstellen. Anwendungen, |die diese Klassenladeprogramme verwenden, können automatisch Boot- und Anwendungsklassen gemeinsam nutzen. Benutzerdefinierte Klassenladeprogramme, die keine Erweiterung |zu java/net/URLClassLoader darstellen, müssen bearbeitet werden, um |mit der gemeinsamen Nutzung von Klassen arbeiten zu können. Allen benutzerdefinierten Klassenladeprogrammen müssen Berechtigungen zur gemeinsamen Nutzung von Klassen erteilt werden, wenn ein Sicherheitsmanager verwendet wird. Weitere Informationen hierzu finden Sie im Abschnitt Verwenden von SharedClassPermission. IBM |bietet mehrere Java-Schnittstellen für verschiedene Typen von |benutzerdefinierten Klassenladeprogrammen, mit denen die |Programme im Cache für gemeinsam genutzte Klassen nach Klassen suchen |und diese speichern können. Diese Klassen befinden sich im Paket "com.ibm.oti.shared". Die Javadoc-Komponente für dieses Paket wird mit SDK in der Datei docs/apidoc.zip mitgeliefert. Weitere Informationen zur Verwendung |dieser Schnittstellen finden Sie im Handbuch Diagnostics |Guide.

Service und Unterstützung für unabhängige Softwareanbieter

Falls Sie berechtigt sind, Serviceleistungen für den Programmcode des Programms 'IBM Solutions Developer Program' in Anspruch zu nehmen, gehen Sie hierbei wie gewohnt vor, oder rufen Sie das Programm im Internet unter folgender Adresse auf: http://www-1.ibm.com/partnerworld/.

Wenn Sie einen Servicevertrag (z. B. für IBM Personal Systems Support Line oder für einen vergleichbaren, in Ihrem Land verfügbaren Service) unterzeichnet haben, ist in den Vertragsbedingungen dieses Servicevertrags festgelegt, welche Services Sie - falls verfügbar - gemäß dem o g. Programm in Anspruch nehmen dürfen.

Eingabehilfen

Die Benutzerhandbücher, die zusammen mit SDK und Runtime Environment geliefert werden, wurden mit Hilfe von Sprachausgabeprogrammen getestet. Sie können ein Sprachausgabeprogramm, wie z. B. Home Page Reader oder das JAWS-Sprachausgabeprogramm, zusammen mit diesen Benutzerhandbüchern verwenden.

Verwenden Sie zum Ändern der Schriftgrößen in den Benutzerhandbüchern die Funktion, die in Ihrem Browser enthalten ist. Sie finden diese Funktion normalerweise im Menü Ansicht.

Benutzer, die über die Tastatur navigieren müssen, finden unter "Swing Key Bindings" (http://www-128.ibm.com/developerworks/java/jdk/additional/) eine Beschreibung von nützlichen Tastatureingaben für Swing-Anwendungen.

iKeyman-Eingabehilfen

|Zusätzlich zur GUI verfügt das iKeyman-Tool über das Befehlszeilentool IKEYCMD, das dieselben Funktionen wie die iKeyman-GUI aufweist. Mit IKEYCMD können Sie Schlüssel, Zertifikate und Zertifikatsanforderungen verwalten. Sie können IKEYCMD über native Shell-Scripts und Programme aufrufen, die verwendet werden sollen, wenn Anwendungen benutzerdefinierte Schnittstellen zu Zertifikaten und wichtigen Verwaltungstasks hinzufügen müssen. IKEYCMD kann für alle Typen, die zurzeit von iKeyman unterstützt werden, Schlüsseldateien erstellen. IKEYCMD kann auch Zertifikatsanforderungen erstellen, CA-signierte Zertifikate importieren und selbstsignierende Zertifikate verwalten.

Geben Sie zum Ausführen eines IKEYCMD-Befehls Folgendes ein:

java [-Dikeycmd.properties=<Merkmaldatei>]com.ibm.gsk.ikeyman.ikeycmd
<Objekt> <Aktion> [Optionen]

Dabei gilt Folgendes:

<Objekt>
steht für Folgendes:
-keydb
Aktionen, die für die Schlüsseldatenbank ausgeführt werden (eine CMS-Schlüsseldatei, eine WebDB-Schlüsselringdatei oder SSLight-Klasse).
-cert
Aktionen, die für ein Zertifikat in einer Schlüsseldatenbank ausgeführt werden sollen.
-certreq
Aktionen, die für eine Zertifikatsanforderung in einer Schlüsseldatenbank ausgeführt werden sollen.
-version
Zeigt Versionsinformationen für IKEYCMD an.
-help
Zeigt einen Hilfetext für die IKEYCMD-Aufrufe an.
<Aktion>
|Die Aktion, die für das Objekt ausgeführt werden soll. Wenn Sie die verfügbaren Aktionen für ein Objekt anzeigen wollen, rufen Sie IKEYCMD auf, wobei nur das Objekt als Argument übergeben wird. In der kontextbezogenen Hilfe werden die verfügbaren Aktionen für dieses Objekt angezeigt.
-Dikeycmd.properties
Gibt den Namen einer optionalen Merkmaldatei an, die für diesen Java-Aufruf verwendet werden soll. Die Standardmerkmaldatei ikeycmd.properties wird als Musterdatei zur Verfügung gestellt, die geändert und von einer beliebigen Java-Anwendung verwendet werden kann.
Anmerkung:
Die Objekt- und Aktionsschlüsselwörter müssen in der angegebenen Reihenfolge aufgeführt sein. Optionen sind jedoch nicht positionsgebunden und können in beliebiger Reihenfolge aufgeführt werden, sofern sie als Option und Operandenpaar angegeben werden.

Weitere Informationen finden Sie im Handbuch "iKeyman User Guide" unter http://www.ibm.com/developerworks/java/jdk/security/index.html.

Verschieben des Eingabefokus von JComboBox-Komponenten in Swing per Tastatur

Beim Blättern in der Dropdown-Liste einer JComboBox-Komponente mit den Cursortasten kann der Wert mit Hilfe des Knopfs oder des editierbaren Felds des Kombinationsfelds nicht geändert werden, solange ein Element ausgewählt ist. Mit diesem für dieses Release gewünschten Verhalten verbessern sich Eingabehilfen und Benutzerfreundlichkeit, da sichergestellt wird, dass das Verschieben des Eingabefokus per Tastatur dem Verschieben des Eingabefokus per Maus entspricht.

(nur Linux IA (32 Bit), PPC32 und PPC64) Web Start-Eingabehilfen

In IBM Java Web Start V5.0 wurden im Vergleich zum vorherigen Release Eingabehilfen und Benutzerfreundlichkeit verbessert. Dazu gehören z. B. eine bessere Unterstützung für Sprachausgabeprogramme und eine bessere Navigation über die Tastatur.

Sie können die Befehlszeile nur zum Starten einer Java-Anwendung verwenden, die für Web Start aktiviert ist. Zum Ändern von Einstellungsoptionen müssen Sie die Konfigurationsdatei .java/.deployment/.deployment.properties im Ausgangsverzeichnis des Benutzers editieren. Sichern Sie die Datei, bevor Sie sie editieren. Nicht alle Einstellungen, die in Java Application Cache Viewer festgelegt werden können, sind in der Konfigurationsdatei verfügbar.

Bekannte Einschränkungen

In den folgenden Abschnitten werden bekannte Einschränkungen von SDK und Runtime Environment for Linux erläutert.

Einschränkungen, die für alle Linux-Plattformen gelten (wenn nicht anders angegeben)

Einschränkungen für Linux IA (32 Bit)

Einschränkungen für Linux AMD64

Einschränkungen für Linux PPC (32 Bit) und (64 Bit)

Einschränkungen für Linux PPC (64 Bit)

Einschränkungen für Linux zSeries (64 Bit)

Die folgenden Einschränkungen gelten für Benutzer der chinesischen und taiwanesischen Version unter Linux zSeries (64 Bit):

Einschränkungen für Linux zSeries (31 und 64 Bit)

Kommentare zu diesem Handbuch

Wenn Sie Ihren Kommentar zur Zweckmäßigkeit oder zu anderen Eigenschaften dieses Benutzerhandbuchs mitteilen möchten, können Sie sich über eine der im Folgenden aufgeführten Möglichkeiten an uns wenden. Beachten Sie, dass diese Mitteilungswege nicht eingerichtet wurden, um technische Fragen zu beantworten. Sie sind nur für Kommentare zur Dokumentation bestimmt. Senden Sie Ihre Kommentare an folgende Adresse:

Das Kleingedruckte. Wenn Sie eine Nachricht an IBM senden, erklären Sie sich einverstanden, dass alle in Ihrer Nachricht enthaltenen Informationen, einschließlich der Rückmeldedaten, wie beispielsweise Fragen, Kommentare, Anregungen o. Ä., nicht vertraulich behandelt werden und dass IBM keinerlei Verpflichtungen in Bezug auf diese Informationen hat und diese uneingeschränkt abdrucken, verwenden, veröffentlichen und an andere weitergeben kann. Des Weiteren kann IBM in diesen Informationen enthaltene Ideen, Konzepte oder Angaben zu Know-how oder technischen Verfahren uneingeschränkt und für beliebige Zwecke verwenden, u. a. für die Entwicklung, die Produktion und das Marketing von Produkten, die diese Informationen enthalten.

Bemerkungen

Die vorliegenden Informationen wurden für Produkte und Services entwickelt, die auf dem deutschen Markt angeboten werden. Möglicherweise bietet IBM die in dieser Dokumentation beschriebenen Produkte, Services oder Komponenten in anderen Ländern nicht an. Informationen über die gegenwärtig im jeweiligen Land verfügbaren Produkte und Services sind beim IBM Ansprechpartner erhältlich. Hinweise auf IBM Lizenzprogramme oder andere IBM Produkte bedeuten nicht, dass nur Programme, Produkte oder Services von IBM verwendet werden können. An Stelle der IBM Produkte, Programme oder Services können auch andere ihnen äquivalente Produkte, Programme oder Services verwendet werden, solange diese keine gewerblichen oder anderen Schutzrechte der IBM verletzen. Die Verantwortung für den Betrieb von Fremdprodukten, Fremdprogrammen und Fremdservices liegt beim Kunden.

Für in diesem Handbuch beschriebene Erzeugnisse und Verfahren kann es IBM Patente oder Patentanmeldungen geben. Mit der Auslieferung dieses Handbuchs ist keine Lizenzierung dieser Patente verbunden. Lizenzanforderungen sind schriftlich an folgende Adresse zu richten (Anfragen an diese Adresse müssen auf Englisch formuliert werden):

Trotz sorgfältiger Bearbeitung können technische Ungenauigkeiten oder Druckfehler in dieser Veröffentlichung nicht ausgeschlossen werden. Die Angaben in diesem Handbuch werden in regelmäßigen Zeitabständen aktualisiert. Die Änderungen werden in Überarbeitungen oder in Technical News Letters (TNLs) bekannt gegeben. IBM kann jederzeit ohne Vorankündigung Verbesserungen und/oder Änderungen an den in dieser Veröffentlichung beschriebenen Produkten und/oder Programmen vornehmen.

Verweise in diesen Informationen auf Websites anderer Anbieter dienen lediglich als Benutzerinformationen und stellen keinerlei Billigung des Inhalts dieser Websites dar. Das über diese Websites verfügbare Material ist nicht Bestandteil des Materials für dieses IBM Produkt. Die Verwendung dieser Websites geschieht auf eigene Verantwortung.

Werden an IBM Informationen eingesandt, können diese beliebig verwendet werden, ohne dass eine Verpflichtung gegenüber dem Einsender entsteht.

Lizenznehmer des Programms, die Informationen zu diesem Produkt wünschen mit der Zielsetzung: (i) den Austausch von Informationen zwischen unabhängigen, erstellten Programmen und anderen Programmen (einschließlich des vorliegenden Programms) sowie (ii) die gemeinsame Nutzung der ausgetauschten Informationen zu ermöglichen, wenden sich an folgende Adresse:

Die Bereitstellung dieser Informationen kann unter Umständen von bestimmten Bedingungen - in einigen Fällen auch von der Zahlung einer Gebühr - abhängig sein.

Die Lieferung des in der Informationsdatei aufgeführten Lizenzprogramms sowie des zugehörigen Lizenzmaterials erfolgt im Rahmen der Allgemeinen Geschäftsbedingungen der IBM oder einer äquivalenten Vereinbarung.

Alle in diesem Dokument enthaltenen Leistungsdaten stammen aus einer gesteuerten Umgebung. Die Ergebnisse, die in anderen Betriebsumgebungen erzielt werden, können daher erheblich von den hier erzielten Ergebnissen abweichen. Einige Daten stammen möglicherweise von Systemen, deren Entwicklung noch nicht abgeschlossen ist. Eine Gewährleistung, dass diese Daten auch in allgemein verfügbaren Systemen erzielt werden, kann nicht gegeben werden. Darüber hinaus wurden einige Daten unter Umständen durch Extrapolation berechnet. Die tatsächlichen Ergebnisse können abweichen. Benutzer dieses Dokuments sollten die entsprechenden Daten in ihrer spezifischen Umgebung prüfen.

Alle Informationen zu Produkten anderer Anbieter stammen von den Anbietern der aufgeführten Produkte, deren veröffentlichten Ankündigungen oder anderen allgemein verfügbaren Quellen. IBM hat diese Produkte nicht getestet und kann daher keine Aussagen zu Leistung, Kompatibilität oder anderen Merkmalen machen. Fragen zu den Leistungsmerkmalen von Produkten anderer Anbieter sind an den jeweiligen Anbieter zu richten.

Marken

IBM, iSeries, pSeries und zSeries sind in gewissen Ländern Marken oder eingetragene Marken der International Business Machines Corporation.

Intel ist in gewissen Ländern eine Marke der Intel Corporation.

Java und alle Java-basierten Marken und Logos sind in gewissen Ländern Marken oder eingetragene Marken von Sun Microsystems, Inc.

Linux ist in gewissen Ländern eine Marke von Linus Torvalds.

Andere Namen von Unternehmen, Produkten oder Dienstleistungen können Marken oder Dienstleistungsmarken anderer Unternehmen sein.

Dieses Produkt basiert auch teilweise auf der Arbeit zum Projekt FreeType. Weitere Informationen zu Freetype finden Sie unter http://www.freetype.org.

Dieses Produkt enthält Software, die von der Apache Software Foundation (http://www.apache.org/) entwickelt wurde.