Klassenlader suchen und laden Klassendateien. Damit eine implementierte Anwendung
ordnungsgemäß ausgeführt werden kann, müssen die Klassenlader für die Anwendung und die Anwendungsmodule
so konfiguriert sein, dass die Anwendung die Dateien und Ressourcen, die sie benötigt, finden kann. Die
Diagnose von Fehlern bei Klassenladern kann kompliziert und zeitintensiv sein.
Um Fehler schneller diagnostizieren und beheben zu können, können Sie mit der
Anzeigefunktion für Klassenlader in der Administrationskonsole die Klassenlader und die
von den einzelnen Klassenladern geladenen Klassen untersuchen.
Vorbereitende Schritte
Dieser Artikel setzt voraus, dass Sie eine Anwendung in einem vom Produkt unterstützten Server installiert haben und die von der Anwendung oder
den Anwendungsmodulen verwendeten Klassenlader untersuchen möchten. Die Module können Webmodule (.war-Dateien) oder EJB-Module (.jar-Dateien) sein.
Mit der Anzeigefunktion für Klassenlader können Sie die Klassenlader in einer Laufzeitumgebung untersuchen.
Dieser
Artikel setzt voraus, dass Sie die Anzeigefunktion für Klassenlader aktiviert haben.
Klicken Sie auf , aktivieren Sie den Service, und starten Sie den Server erneut.
Informationen zu diesem Vorgang
Die Laufzeitumgebung von WebSphere Application Server verwendet in der angegebenen Reihenfolge die folgenden Klassenlader zum Suchen und Laden neuer Klassen für eine Anwendung:
- Die von der JVM erstellten Klassenlader für Bootstrap, Erweiterungen und Klassenpfad.
- Ein Klassenlader für WebSphere-Erweiterungen.
- Ein oder mehrere Klassenlader für Anwendungsmodule, die Elemente der im Server ausgeführten
Unternehmensanwendungen laden.
- Null oder mehrere Klassenlader für Webmodule

Jeder Klassenlader ist ein Kind des übergeordneten Klassenladers. Das heißt, die Klassenlader für Anwendungsmodule sind dem
Klassenlader für WebSphere-Erweiterungen untergeordnet, und dieser ist wiederum dem
Java-Klassenlader für Klassenpfade untergeordnet. Immer wenn Klassen geladen müssen, delegiert der
Klassenlader normalerweise die Anforderung an seinen übergeordneten Klassenlader. Wenn keiner der
übergeordneten Klassenlader die Klasse findet, versucht der ursprüngliche Klassenlader die Klasse zu laden. Anforderungen können nur an einen übergeordneten Klassenlader übertragen werden, nicht an
einen untergeordneten.
Sobald eine Klasse vom Klassenlader
geladen wurde, verwenden alle neuen Klassen, die er zu laden versucht, wieder denselben Klassenlader,
oder Sie gehen in der Präzedenzliste nach oben, bis die Klasse gefunden wird.
Wenn
die Klassenlader, die die Artefakte einer Anwendung laden, nicht richtig konfiguriert
sind, löst die JVM möglicherweise eine Ausnahme beim Laden von Klassen aus, wenn diese
Anwendung gestartet oder ausgeführt wird.
Im Artikel Ausnahmen beim Laden von Klassen werden die Typen von Ausnahmen beschrieben, die aufgrund nicht korrekt konfigurierter
Klassenlader auftreten können, und zeigt Methoden auf, anhand derer Sie mit der Anzeigefunktion
für Klassenlader Klassenladerkonfigurationen korrigieren können.
Die folgenden Ausnahmen können auftreten:
Verwenden Sie die Anzeigefunktion für Klassenlader, um Klassenlader zu untersuchen
und Fehler in Anwendungs- und Klassenladerkonfigurationen zu korrigieren.
Vorgehensweise
- Überprüfen Sie die Baumstrukturansicht, in der alle installierten Anwendungen und die zugehörigen Module aufgelistet werden.
Die Module können Webmodule (Dateien mit der Erweiterung .war) oder EJB-Module
(Dateien mit der Erweiterung .jar) sein.
Klicken Sie auf , um die Seite
Topologie der Unternehmensanwendungen aufzurufen.
- Untersuchen Sie die Hierarchie der Klassenladerdelegierung.
Wählen Sie auf der Seite
"Topologie der Unternehmensanwendungen" ein Modul aus, um die Seite
"Anzeigefunktion für Klassenlader" aufzurufen.
Auf dieser Seite werden die Klassenlader aufgelistet, die für die web und EJB-Module in einer installierten
Unternehmensanwendung sichtbar sind. Auf dieser Seite können Sie feststellen, welche Klassenlader
Dateien eines Moduls geladen haben. Außerdem unterstützt Sie diese Seite bei der Diagnose von Fehlern für Klassenlader.
Die Delegierungshierarchie wird durch den Delegierungsmodus für Klassenlader oder
die Klassenladerreihenfolge bestimmt, die für eine Anwendung bzw. ein Webmodul angegeben ist.
Die gültigen Werte sind Mit dem übergeordneten Klassenlader geladene Klassen zuerst
und Mit dem lokalen Klassenlader geladene Klassen zuerst (übergeordneter zuletzt). Nähere Informationen
finden Sie im Artikel Klassenlader
konfigurieren.
- Exportieren Sie Informationen zu Klassenladern.
- Klicken Sie auf der Seite Anzeigefunktion
für Klassenlader auf Exportieren.
- Sie können einen Browser oder Editor öffnen, um die Klassenladerinformationen anzuzeigen, oder
die Informationen im XML-Format auf der Platte speichern.
- Klicken Sie auf OK, und geben Sie die vom System angeforderten zusätzlichen Informationen an.
- Zeigen Sie die Informationen zu den Klassenladern, die für das Modul sichtbar sind, in HTML-Tabellenformat an.
Klicken Sie auf der Seite Anzeigefunktion
für Klassenlader auf Tabellenansicht. Auf der Seite "Tabellenansicht" werden die folgenden Informationen angezeigt:
Tabelle 1. Seite "Tabellenansicht". Informationen zu KlassenladerattributenKlassenladerattribut |
Beschreibung |
Delegierung |
Gibt an, ob der Klassenlader das Laden des Moduls an seinen übergeordneten
Klassenlader delegiert. Der Wert true gibt an, dass der Klassenlader der übergeordneten
Anwendung verwendet wird (Mit dem übergeordneten Klassenlader geladene Klassen zuerst). Der Wert
false gibt an, dass der Klassenlader des Moduls verwendet wird
(Mit dem lokalen Klassenlader geladene Klassen zuerst (übergeordneter zuletzt)). Nähere Informationen
finden Sie im Artikel Klassenlader
konfigurieren. |
Klassenpfad |
Listet die Pfade auf, über die der Klassenlader nach Klassen und Ressourcen sucht. |
Klassen |
Listet die Namen der Klassen auf, die von diesem Klassenlader in die JVM geladen werden. |
Die Option Tabellenansicht gibt keinen Wert zurück, wenn
Fehler aufgrund mangelnden Speichers generiert werden. Die Fehler aufgrund mangelnden
Speichers können auf ein Speicherleck zurückzuführen sein. Wenn Sie Informationen über
Klassenlader in einer Tabelle prüfen möchten, lösen Sie das Problem des mangelnden
Speichers, und klicken Sie dann erneut auf Tabellenansicht.
- Suchen Sie die Klassenlader.
Klicken Sie auf der Seite "Anzeigefunktion für Klassenlader"
auf
Suchen, um die Seite
Suchen
aufzurufen, auf der Sie die Klassenlader für Folgendes suchen können:
- Bestimmte Zeichenfolgen
- Bestimmte .jar-Dateien
- Namen von Dateien in einem bestimmten Verzeichnis
- Namen von Dateien, die von einem bestimmten Klassenlader geladen werden
Bei der Suche wird zwischen Groß- und Kleinschreibung unterschieden. Der Artikel
Ausnahmen beim Laden von Klassen beschreibt verschiedene Verwendungsverfahren
für die Seite "Suchen".
- Konfigurieren Sie die Klassenlader. Sie können Klassenlader für Folgendes
konfigurieren:
Die Klassenladerkonfiguration bestimmt, welcher Klassenlader die Klassen und Ressourcendateien für eine Anwendung oder ein Webmodul
lädt. Zu den Einstellungen der Klassenlader der Anwendung und des WAR-Moduls
gehören Reihenfolge der Klassenlader und Klassenladerrichtlinie für WAR-Dateien.
Die gültigen Werte sind Mit dem übergeordneten Klassenlader geladene Klassen zuerst
und Mit dem lokalen Klassenlader geladene Klassen zuerst (übergeordneter zuletzt). Der Standardwert ist
Mit dem übergeordneten Klassenlader geladene Klassen zuerst. Ein
Klassenlader mit dem Modus Mit dem übergeordneten Klassenlader geladene Klassen zuerst
delegiert das Laden einer Klasse oder Ressource an seinen unmittelbar übergeordneten
Klassenlader, bevor er den Klassenpfad durchsucht.
Bei der Behebung von Fehlern
des Klassenladers müssen Sie eventuell Klassen überschreiben, die für einen
übergeordneten Klassenlader
sichtbar sind. Zum Überschreiben dieser Klassen mit anwendungsspezifischen Klassen müssen
Sie die Option Reihenfolge der Klassenlader für den
Klassenlader, der die Anwendungsklassen in
seinem Klassenpfad enthält, auf Mit dem lokalen Klassenlader geladene Klassen zuerst (übergeordneter zuletzt).
Eine Anwendung kann Klassen,
die in einem übergeordneten Klassenlader enthalten sind, überschreiben. Das Überschreiben
kann jedoch eine Ausnahme des Typs ClassCastException oder UnsatisfiedLinkError auslösen,
wenn überschriebene und nicht überschriebene Klassen nebeneinander verwendet werden.
Standardmäßig hat ein Webmodul einen eigenen WAR-Klassenlader, der den Inhalt des
Webmoduls aus den Verzeichnissen WEB-INF/classes und WEB-INF/lib lädt.
Ein Klassenlader für Anwendungsmodule ist einem Klassenlader für WAR-Klassen direkt
übergeordnet. Möchten Sie
sicherstellen, dass der Klassenlader des Webmoduls zuerst diese Pfade nach einer
bestimmten Klasse oder Ressource durchsucht, bevor er die Ladeoperation an den
Klassenlader des Anwendungsmoduls delegiert, setzen Sie den Wert für Reihenfolge der Klassenlader des
Webmoduls auf Mit dem lokalen Klassenlader geladene Klassen zuerst (übergeordneter zuletzt).
Klassenladerrichtlinien
bestimmen die Struktur der Klassenlader der Anwendung und des
WAR-Moduls. Unter den Standardrichtlinien hat jede aktive Anwendungs-EAR seinen eigenen
Klassenlader des Anwendungsmoduls, und jedes Webmodul hat seinen eigenen
Klassenlader des WAR-Moduls. Die Standardrichtlinien stellen die
Java EE-Kompatibilität hinsichtlich der Sichtbarkeit und der Isolation zwischen
Anwendungsartefakten sicher. Es wird empfohlen, die Standardrichtlinien nicht zu ändern,
wenn eine Fehlerbehebung bei Klassenladern durchgeführt wird.
Nächste Schritte
Sollten weiterhin Probleme bei Ihren Klassenladern auftreten, lesen Sie die Artikel
Ausnahmen beim Laden von Klassen und Klassen laden.