WEB开发网
开发学院数据库DB2 应用开发: Java:热力不断 阅读

应用开发: Java:热力不断

 2008-12-15 16:37:46 来源:WEB开发网   
核心提示: CREATE PROCEDURE 语句的语法在 publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp?topic=/com.ibm.db2.udb.admin.doc/doc/r0008328.htm 中有说明,在 清单 7 显示的例子

CREATE PROCEDURE 语句的语法在 publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp?topic=/com.ibm.db2.udb.admin.doc/doc/r0008328.htm 中有说明。

在 清单 7 显示的例子中,首先创建一个 QUERYORG 存储过程,对应的 EXTERNAL NAME 为 ‘QUERYORG:Query.query’。接着创建一个 QUERYSTAFF 存储过程,对应的 EXTERNAL NAME 为 ‘QUERYSTAFF:Query.query’。按照这样的顺序创建存储过程后,DB2 可能会为第二个存储过程装载错误的类。在这种情况下,当调用 QUERYSTAFF 存储过程时,会得到意外的结果。

当在 DB2 UDB V8 SAMPLE 数据库上运行 QUERYSTAFF 过程时,实际上运行的是 QUERYORG。输出经过了截尾处理,因为 QUERYSTAFF 的输出参数被定义为 CHAR(9),由于 QUERYORG 的输出被定义为 CHAR(14),因此前者不足以容纳后者。清单 8、9 和 10 演示了这个问题。清单 8 显示了在 DB2 V8 中 QUERYSTAFF 的不正确的输出。清单 9 显示了 QUERYORG 的输出。清单 10 显示了 QUERYSTAFF 过程的正确输出。

之所以会出现这样的问题,是因为 DB2 V8 会忽略 CREATE PROCEDURE 语句中指定的 JAR ID,而首先找到实现 QUERYORG 过程的 Query.class。然而,当我们调用 QUERYSTAFF 时,我们是想装载第二个 Query.class,这个类属于 QUERYSTAFF 过程。

在 DB2 UDB V8 中,对于这个问题有两种解决办法:一种办法是将其中一个受影响的类重命名,使得每个类有一个惟一的类名,另一种办法是为每个数据库创建一个不同的实例。

DB2 9 中的 Java 类装载器

在 DB2 9 中,Java 类装载器经过了重新设计。现在,每当请求选择和装载一个类时,都要提供一个 JAR ID 和类 ID,类装载器将尝试在指定 JAR 文件中寻找类;因此,它总是装载正确的类。此外,如果指定一个 JAR ID,类搜索的性能也将得到提高,因为 DB2 9 只需搜索属于指定 JAR 文件的类。

在 DB2 9 中,可以使用 CREATE PROCEDURE 语句的 EXTERNAL NAME 子句指定 JAR ID、类 ID 和方法 ID,就像在 DB2 V8 中一样。当发出 CREATE PROCEDURE 语句时,类和方法不必已经存在。但是,在调用该存储过程时,类和方法必须已经存在,并能够被数据库服务器访问。否则,就会出现错误(SQLSTATE 42884)。如果指定一个 JAR ID,那么当发出 CREATE PROCEDURE 语句时,该 JAR 文件必须已经存在。如果没有指定 JAR ID,那么 DB2 9 就维持 DB2 V8 中那样的不确定装载行为。

如果使用 DB2 9,并重复上述步骤来创建和运行 QUERYSTAFF 及 QUERYORG,那么您将发现,使用不正确的类的问题不复存在了。这是因为 Java 类装载器现在会考虑 JAR ID。如果在 EXTERNAL NAME 子句中指定 QUERYSTAFF:Query.query,DB2 9 将装载 sqllib/function/jar/<Schema>/QueryStaff.jar 中的 Query.class,并运行属于 QueryStaff.jar 的 query() 方法。DB2 9 并不是简单地装载它碰到的第一个 Query.class。清单 11 显示了使用 DB2 9 时的结果。

通过将类文件打包到一个 JAR 文件中,并使用 CREATE PROCEDURE 语句的 EXTERNAL NAME 子句指定 JAR ID,尽量利用新的、增强的类装载器。如果 Java 例程已经在一个 JAR 文件中,但是没有在 CREATE PROCEDURE 语句中指定 JAR ID,那么可以使用 ALTER PROCEDURE 或 ALTER FUNCTION 语句增加或修改 JAR ID 字段。

进一步学习

在本文中,我介绍了 DB2 9 的很多 Java 应用程序支持特性。

上一页  1 2 3 4 5 

Tags:应用开发 Java 热力

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接