sqlj.alter_java_path

使用 sqlj.alter_java_path( ) 指定当例程管理器解析用 Java 语言编写的 UDR 的 JAR 文件的相关的 Java 类时使用 jar 文件路径
sqlj.alter_java_path
参数 描述 限制 语法
class_id 包含实现 UDR 的方法的 Java™ 类 Java 必须在 jar_id 指定的 JAR 文件中存在。标识符不能超过 255 个字节。 特定于语言
package_id 包含 Java 类的包的名称 package_id.class_id 的完整限定标识符不能超过 255 个字符 特定于语言

您指定的 JAR ID (即要更改 JAR 文件路径的 JAR 标识和 JAR ID 的解析)必须都已使用 sqlj.install_jar 过程安装过。当调用使用 Java 语言编写的 UDR 时,例程管理器尝试加载 UDR 驻留的 Java 类。此时,它必须解析此 Java 类对其它 Java 类所做的引用。

这些类引用的三种类型是:
  1. 引用 JVPCLASSPATH 配置参数指定的 Java 类(例如 java.util.Vector 的 Java 系统类)
  2. 引用与 UDR 位于同一 JAR 文件中的类
  3. 引用包含 UDR 的 JAR 文件之外的类。

例程管理隐式解析之前列表中的类型 1 和类型 2。要解析类型 3 的引用,它检查 JAR 文件路径中所有最近调用 sqlj.alter_java_path( ) 指定的 JAR 文件。

如果例程管理器不能解析类引用,它会发出异常。例程管理器在执行类型 1 和类型 2 解析之后检查 JAR 文件路径以进行类引用。

如果希望从 JAR 文件路径指定的 JAR 文件加载 Java™ 类,请确保 Java 类存在于 JVPCLASSPATH 配置参数中。否则,系统装入程序会首先采用此 Java 类,这可能导致加载不是您期望的类。

假设 sqlj.install_jar( ) 过程和 CREATE FUNCTION 已经如前面部分所述的执行。以下 SQL 语句调用 course_jar JAR 文件中的 sql_explosive_reaction( ) 函数:
EXECUTE PROCEDURE alter_java_path("course_jar", 
          "(professor/*, prof_jar)");
          EXECUTE FUNCTION sql_explosive_reaction(10000);

例程管理器尝试加载 Chemistry 类。它使用调用 sqlj.alter_java_path( ) 指定的路径来解析任何类引用。因此,它检查 prof_jar 标识的 JAR 文件的 professor 包中的类。

如果启用了 IFX_EXTEND_ROLE 配置参数(缺省设置),那么只有 DBSA 或持有 EXTEND 角色的用户可以执行 sqlj.alter_java_path( ) 过程。当 IFX_EXTEND_ROLE 被禁用时,任何用户都可以执行 sqlj.alter_java_path( )。(但是不管 IFX_EXTEND_ROLE 如何设置,您必须拥有数据库的 Resource 特权或 DBA 特权,并且还必须拥有 Java 语言的 Usage 特权,才能创建或删除 Java UDR。)

1 请参阅 Jar 名称