Native Bibliotheken in gemeinsam genutzten Bibliotheken konfigurieren

Native Bibliotheken sind plattformspezifische Dateien. Dazu gehören Dateien mit den Erweiterungen .dll und .so sowie *SRVPGM-Objekte, die in gemeinsam genutzten Bibliotheken konfiguriert werden können. Native Bibliotheken sind für einen Anwendungsklassenlader sichtbar, wenn die gemeinsam genutzte Bibliothek einer Anwendung zugeordnet ist. Native Bibliotheken sind für den Klassenlader eines Anwendungsservers sichtbar, wenn die gemeinsam genutzte Bibliothek einem Anwendungsserver zugeordnet ist.

Vorbereitende Schritte

Wenn Sie eine gemeinsam genutzte Bibliothek entwerfen, müssen Sie in Bezug auf die Unterstützung nativer Java-Bibliotheken Folgendes berücksichtigen:
  • Die Java Virtual Machine (JVM) bestimmt, dass jeweils ein bestimmter Klassenlader eine bestimmte native Bibliothek lädt.
  • Es ist keine Anwendungsprogrammierschnittstelle (API) vorhanden, um eine native Bibliothek aus einem Klassenlader zu entladen.

    Native Bibliotheken werden von der JVM entladen, wenn der Klassenlader, der die Bibliothek gefunden hat, von der Garbage-Collection für den Heapspeicher erfasst wird.

  • Klassenlader für Anwendungsserver laden anders als native JVM-Klassenlader nur native gemeinsam genutzte Bibliotheken, die die Standarderweiterung des Betriebssystems für die aktuelle Plattform verwenden. Unter AIX, müssen native gemeinsam genutzte Bibliotheken beispielsweise die Erweiterung .a haben, wenn sie von Klassenladern des Anwendungsservers geladen werden. Der JVM-Klassenlader lädt Dateien mit der Erweiterung .a oder .so.

    [AIX]Java Web Start kann nur native gemeinsam genutzte Bibliotheken mit der Dateierweiterung ".so" laden. Benennen Sie alle nativen gemeinsam genutzten Bibliotheken so um, dass sie die Dateierweiterung ".so" haben, bevor Sie sie für die Implementierung mit Java Web Start in eine JAR-Datei (Java-Archiv) packen.

  • Klassenlader für Anwendungsserver bleiben für die Lebensdauer des Anwendungsservers bestehen.
  • Klassenlader für Anwendungen bleiben bestehen, bis eine Anwendung gestoppt oder dynamisch erneut geladen wird.

    Wenn eine gemeinsam genutzte Bibliothek, die mit dem Pfad der nativen Bibliothek konfiguriert ist, einer Anwendung zugeordnet wird, kann die Anwendung, wenn sie erneut gestartet oder dynamisch erneut geladen wird, mit einem UnsatisfiedLinkError fehlschlagen, der anzeigt, dass die Bibliothek bereits geladen ist. Der Fehler tritt auf, weil die Anwendung beim Neustart die Klasse der gemeinsam genutzten Bibliothek aufruft, die dann die native Bibliothek erneut lädt. Die native Bibliothek ist jedoch noch im Speicher geladen, da der Anwendungsklassenlader, der die native Bibliothek zuvor geladen hat, noch nicht von der Garbage-Collection erfasst wurde.

  • Nur der JVM-Klassenlader kann eine abhängige native Bibliothek laden.

    Beispiel: Wenn NativeBibl1 von NativeBibl2 abhängig ist, muss NativeBibl2 für den JVM-Klassenlader erkennbar sein. Der Pfad mit NativeLib2 muss im Java-Bibliothekspfad, der mit der Umgebungsvariablen LIBPATH definiert wird, angegeben werden.

    [z/OS]Die Eigenschaft LIBPATH (java.library.path) wird mit der Umgebungsvariablen Prozessname_region_libpath konfiguriert, z. B. control_region_libpath, server_region_libpath oder adjunct_region_libpath. Anweisungen zum Definieren der Region-LIBPATH-Variablen enthält der Artikel Werte der in BBOM0001I-Nachrichten referenzierten Variablen ändern.

    Wenn eine native Bibliothek, die in einer gemeinsam genutzten Bibliothek konfiguriert ist, von anderen nativen Bibliotheken abhängig ist, müssen die abhängigen Bibliotheken im LIBPATH der JVM, auf der der Anwendungsserver sich befindet, konfiguriert sein, damit diese Bibliothek geladen werden kann.

Informationen zu diesem Vorgang

Wenn Sie bei der Konfiguration einer gemeinsam genutzten Bibliothek auf einer Seite mit Einstellungen für die gemeinsam genutzte Bibliothek einen Wert für Pfad der nativen Bibliothek angeben, werden die nativen Bibliotheken in diesem Pfad nicht von den Klassenladern der Anwendung in WebSphere Application Server oder der gemeinsam genutzten Bibliothek erkannt, sofern die Klasse, die die native Bibliothek lädt, nicht selbst vom selben Klassenlader geladen wurde.

Da eine native Bibliothek nicht mehrmals von einem Klassenlader geladen werden kann, werden native Bibliotheken am besten innerhalb gemeinsam genutzter Bibliotheken, die dem Klassenlader eines Anwendungsservers zugeordnet sind, geladen, da diese Klassenlader für die Lebensdauer des Servers bestehen bleiben.

Vorgehensweise

  1. Implementieren Sie eine statische Methode in der Klasse, die die native Bibliothek lädt.

    Rufen Sie in der Klasse, die die native Bibliothek lädt, System.loadLibrary(native_Bibliothek) in einem statischen Block auf. Beispiel:

    static {System.loadLibrary("native_library");

    native_Bibliothek lädt die statische Initialisierung der Klasse, die beim Laden der Klasse exakt einmal auftritt.

  2. Setzen Sie auf der Seite mit den Einstellungen für die gemeinsam genutzte Bibliothek Werte für Klassenpfad und Pfad der nativen Bibliothek, die die gemeinsam genutzte Bibliothek in die Lage versetzen, die native Bibliothek zu laden.

    Wenn Sie die gemeinsam genutzte Bibliothek einer Anwendung oder einem Modul zuordnen möchten, wählen Sie auch die Option Isolierten Klassenlader für diese gemeinsam genutzte Bibliothek verwenden aus. Wenn Sie diese Einstellung nicht aktivieren, ordnen Sie die gemeinsam genutzte Bibliothek einem Anwendungsserver zu.

  3. Ordnen Sie die gemeinsam genutzte Bibliothek zu.
    • Wenn Sie die Option Isolierten Klassenlader für diese gemeinsam genutzte Bibliothek verwenden nicht aktiviert haben, ordnen Sie die gemeinsam genutzte Bibliothek einem Anwendungsserver zu.

      Wenn Sie eine gemeinsam genutzte Bibliothek dem Klassenlader eines Anwendungsservers und nicht einer Anwendung zuordnen, stellen Sie sicher, dass die gemeinsam genutzte Bibliothek vom Klassenlader des Anwendungsservers exakt einmal geladen wird, obwohl Anwendungen auf dem Server erneut gestartet oder dynamisch erneut geladen werden. Da die native Bibliothek in einem statischen Block geladen wird, wird die native Bibliothek nie mehr als einmal geladen.

    • Wenn Sie die Option Isolierten Klassenlader für diese gemeinsam genutzte Bibliothek verwenden aktiviert haben, ordnen Sie die gemeinsam genutzte Bibliothek einer Anwendung oder einem Modul zu.

      Wenn Sie eine isolierte gemeinsam genutzte Bibliotheksdatei einer Anwendung oder einem Modul zuordnen, werden die von der gemeinsam genutzten Bibliothek dargestellten Klassen in einem gesonderten Klassenlader geladen, der für diese gemeinsam genutzte Bibliothek erstellt wird. Ordnen Sie eine isolierte gemeinsam genutzte Bibliotheksdatei einem Server nicht zu, wenn ein gesonderter Klassenlader für eine gemeinsam genutzte Bibliothek verwendet werden soll. Wenn Sie die gemeinsam genutzte Bibliothek einem Server zuordnen, ignoriert das Produkt die Isolationseinstellung und fügt dem Klassenlader des Anwendungsservers weiterhin Dateien aus der gemeinsam genutzten Bibliothek zu. Ordnen Sie also eine isolierte gemeinsam genutzte Bibliotheksdatei einem Server zu, wird die Datei allen Anwendungen auf dem Server zugeordnet.

      Der für eine isolierte gemeinsam genutzte Bibliothek erstellt Klassenlader wird nicht erneut geladen und bleibt wie ein Serverklassenlader für die gesamte Lebensdauer eines Servers gültig. Für gemeinsam genutzte native Bibliotheken können Sie eine isolierte gemeinsam genutzte Bibliothek verwenden, um Fehler zu vermeiden, die durch das erneute Laden nativer Bibliotheken auftreten.

Nächste Schritte

Um sicherzustellen, dass eine Anwendung eine gemeinsam genutzte Bibliothek verwenden kann, testen Sie die Anwendung, oder untersuchen Sie den Klassenlader in der Anzeigefunktion für Klassenlader. Klicken Sie auf Fehlerbehebung > Anzeigefunktion für Klassenlader > Modulname > Tabellenansicht. Im Klassenpfad des Klassenladers für das Anwendungsmodul werden die von der gemeinsam genutzten Bibliothek verwendeten Klassen aufgelistet.

Symbol, das den Typ des Artikels anzeigt. Taskartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tcws_sharedlib_nativelib
Dateiname:tcws_sharedlib_nativelib.html