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 » SQL Anywhere サーバ プログラミング » データベースにおける Java

 

Java VM でのシャットダウンフック

データベース内の Java サポートを提供するときに使用する SQL Anywhere Java VM クラスローダは、アプリケーションがシャットダウンフックをインストールすることを許可しています。これらのシャットダウンフックは、アプリケーションが JVM ランタイムでインストールするシャットダウンフックに非常によく似ています。データベース内の Java サポートを使用している接続が STOP JAVA 文を実行するか、または切断した場合、その接続用のクラスローダは、アンロードの前に、その接続用にインストールされているすべてのシャットダウンフックを実行します。データベース内にすべての Java クラスをインストールする通常のデータベース内の Java アプリケーションに対しては、シャットダウンフックのインストールが必須ではないことに注目してください。クラスローダシャットダウンフックは、十分な注意を払って使用する必要があり、Java を停止中の特定の接続用に割り付けられたシステム全体のリソースをクリーンアップするためにのみ使用すべきです。また、jdbc:default 接続はクラスローダシャットダウンフックが呼び出される前にすでに閉じられているので、シャットダウンフック内では jdbc:default JDBC 要求は許可されません。

SQL Anywhere Java VM クラスローダのあるシャットダウンフックをインストールするには、アプリケーションが Java コンパイラクラスパス内に sajvm.jar を含める必要があり、また、次に似たコードを実行する必要があります。

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

SDHookThread クラスは標準 Thread クラスを拡張したものであり、前述のコードは現在の接続用のクラスローダによってロードされたクラスから実行される必要があります。データベース内にインストールされたクラスと、その後に外部環境呼び出し経由で呼び出されたクラスは、どれも正しい SQL Anywhere Java VM クラスローダによって自動的に実行されます。

SQL Anywhere Java VM クラスローダリストからシャットダウンフックを削除するには、アプリケーションで次に似たコードを実行する必要があります。

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

前述のコードは、現在の接続用のクラスローダによってロードされたクラスから実行される必要があります。