Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SAP Sybase SQL Anywhere 16.0 (Deutsch) » SQL Anywhere Server - Programmierung » Java in der Datenbank

 

Shutdown-Hooks in der Java VM

Der Java VM ClassLoader von SQL Anywhere, der zur Bereitstellung von Unterstützung für JAVA in der Datenbank dient, ermöglicht es Anwendungen, Shutdown-Hooks zu installieren. Diese Shutdown-Hooks sind denjenigen ähnlich, die Anwendungen zusammen mit der JVM Runtime installieren. Wenn eine Verbindung, die die Unterstützung für Java in der Datenbank nutzt, eine STOP JAVA-Anweisung ausführt oder getrennt wird, führt der ClassLoader für die Verbindung vor dem Entladen alle Shutdown-Hooks aus, die für die betreffende Verbindung installiert wurden. Bei regulären JAVA-Daten in den Datenbankanwendungen, die alle Java-Klassen in der Datenbank installieren, sollte die Installation der Shutdown-Hooks nicht erforderlich sein. Die ClassLoader-Shutdown-Hooks dürfen nur mit großer Vorsicht verwendet werden und nur dazu, systemweite Ressourcen zu bereinigen, die für die jeweilige Verbindung zugewiesen wurden, die Java stoppt. Außerdem sind jdbc:default-JDBC-Anforderungen in Shutdown-Hooks nicht zulässig, da die jdbc:default-Verbindung bereits geschlossen ist, bevor der ClassLoader-Shutdown-Hook aufgerufen wird.

Damit Sie einen Shutdown-Hook mit dem Java VM ClassLoader von SQL Anywhere installieren können, muss sich die Datei sajvm.jar im Classpath des Java-Compilers befinden und sie muss Code ähnlich dem folgenden ausführen:

SDHookThread hook = new SDHookThread( ... );
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
((ianywhere.sa.jvm.SAClassLoader)classLoader).addShutdownHook( hook );

Die SDHookThread-Klasse erweitert die Standard-Thread-Klasse und der obige Code muss von einer Klasse ausgeführt werden, die vom ClassLoader für die aktuelle Verbindung geladen wurde. Jede Klasse, die innerhalb der Datenbank installiert ist und später über einen externen Umgebungsaufruf aufgerufen wird, wird automatisch von der richtigen Java VM ClassLoader-Instanz für SQL Anywhere ausgeführt.

Um einen shutdown-Hook aus der Liste von Java VM ClassLoader für SQL Anywhere zu entfernen, muss eine Anwendung Code ausführen, der folgendem Beispiel ähnelt:

ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
((ianywhere.sa.jvm.SAClassLoader)classLoader).removeShutdownHook( hook );

Der obige Code muss von einer Klasse ausgeführt werden, die von ClassLoader für die aktuelle Verbindung geladen wurde.