Wenn ein benutzerdefinierter Knoten in Java als PAR-Datei verpackt ist, wird er in einem separaten Klassenladeprogramm geladen.
Das Klassenladeprogramm lädt jede Klasse, die in der implementierten PAR-Datei verpackt ist. Diejenigen Klassen, die in der JAR-Datei abgelegt sind, setzen alle Klassen im gemeinsamen Klassenverzeichnis bzw. in der Umgebungsvariable CLASSPATH außer Kraft. Wenn die implementierte PAR-Datei mehr als einen Knotentyp enthält, haben die Knoten dasselbe Klassenladeprogramm. Deshalb sollten benutzerdefinierte Knoten mit gemeinsamen statischen Daten in einer einzigen PAR-Datei verpackt werden.
Benutzerdefinierte Knoten in Java, die als einfache JAR-Dateien verpackt sind, werden in demselben Klassenladeprogramm geladen. Die Klassen sowie die Speicherposition, aus der sie geladen werden, werden in den Benutzertrace geschrieben. Somit können Sie anhand dieser Informationen prüfen, ob die korrekten Klassen geladen werden.
Der Broker verwendet folgenden Klassenladeprogramm-Baum:
Vom Shared-Klassenladeprogramm werden auch Kontextklassen geladen. Für die Suche nach Klassen werden CLASSPATH sowie das Verzeichnis Arbeitspfad/shared-classes/ verwendet.
Das Broker-Klassenladeprogramm und das Shared-Klassenladeprogramm sind untergeordnete Elemente des Common-Klassenladeprogramms. Deshalb sind die Inhalte des Shared-Klassenladeprogramms für das Broker-Klassenladeprogramm nicht sichtbar. Folgende Ressourcen dürfen nicht in diesem Verzeichnis gespeichert werden:
In einer PAR-Datei verpackte benutzerdefinierte Knoten
In einer JAR-Datei verpackte benutzerdefinierte Knoten
Der Endorsed-Standards-Überschreibungsmechanismus erlaubt es, die folgenden Standard-Pakete in der Java-Laufzeitumgebung zu überschreiben:
Um diese Pakete im Broker zu überschreiben, legen Sie die JAR-Dateien für die API-Standards im /lib-Verzeichnis der PAR-Datei ab.
Beim Eruieren eines JNDI-Kontextes wird das Context-Klassenladeprogramm verwendet. Wenn der Eruierungsvorgang Klassen benutzt, die mit dem benutzerdefinierten Knoten zusammen verpackt sind, dann muss das Context-Klassenladeprogramm mit dem Klassenladeprogramm übereinstimmen, das zum Laden des benutzerdefinierten Knotens verwendet wird. Um sicher zu stellen, dass jeder Thread dasselbe Klassenladeprogramm benutzt, kann folgender Code in die Klasse des benutzerdefinierten Knotens aufgenommen werden:
Thread.currentThread.setContextClassLoader(this.getClass().getClassLoader());