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 ClassLoader 允许应用程序安装关闭挂接。这些关闭挂接类似于应用程序随 JVM Runtime 一同安装的关闭挂接。对于在数据库支持中使用 JAVA 的连接,当其执行 STOP JAVA 语句或断开连接时,用于该连接的 ClassLoader 会在卸载之前运行已为该特定连接安装的所有关闭挂接。对于安装了数据库中所有 JAVA 类的数据库应用程序中的常规 Java,不必安装关闭挂接。使用 ClassLoader 关闭挂接时应格外小心,它只能用来清理系统范围内的任何资源,这些资源是为用于停止 Java 的特定连接而分配的。此外,在关闭挂接中不允许 jdbc:default JDBC 请求,因为在调用 ClassLoader 关闭挂接之前,jdbc:default 连接已关闭。

要使用 SQL Anywhere Java VM ClassLoader 安装关闭挂接,应用程序必须将 sajvm.jar 包括在 Java 编译器类路径内,它还必须执行类似于下例的代码:

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

SDHookThread 类扩展了标准 Thread 类,并且上述代码必须由 ClassLoader 为当前连接所装载的类来执行。在数据库内安装且随后通过外部环境调用而调用的任何类都由正确的 SQL Anywhere Java VM ClassLoader 自动执行。

要从 SQL Anywhere Java VM ClassLoader 列表中删除关闭挂接,应用程序需要执行类似于下例的代码:

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

以上代码必须由 ClassLoader 为当前连接所装载的类来执行。