データベース内の 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 ); |
前述のコードは、現在の接続用のクラスローダーによってロードされたクラスから実行される必要があります。
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |