如何部署作为 Web 服务返回 Ref Cursors 的 PL/SQL 过程

日期:2002 年 12 月 23 日

完成了此方法指南后,您应该能够:

  • 发布可作为 Web 服务返回 Ref Cursor 的 PL/SQL 函数

  • 使用 JPublisher 创建 PL/SQL 程序包的 Java 文件

使用 Web 服务汇编程序捆绑部署到 OC4J 的类文件

软件需求

  • 已安装示例模式的 Oracle9i Database 版本 9.0.1 或更高版本。您可从 Oracle 技术网下载 Oracle9i Database。

  • Oracle9iAS Containers for J2EE (OC4J)、9.0.2 版或更高版本(可从这里得到)及 JDK 1.2 版或更高版本(可从这里得到)

  • Sun's JDK 1.3_01 版或更高版本,可从这里得到

符号解释

  • <SAMPLE_HOME> — 解压缩 RefCursor.jar 文件的目录。此目录包含 RefCursor 目录
  • <OC4J_HOME> — 安装 OC4J 的目录。例如,如果将 oc4j_extended.zip 解压缩到了 C:\OC4J,则 <OC4J_HOME> 将是C:\OC4J

简介

此文档演示如何发布作为 Web 服务返回 REF CURSOR 的 PL/SQL 函数。Ref Cursor 是一种常用于减少网络通信量的 PL/SQL 数据类型。Ref Cursor 映射为 java.sql.ResultSet。但是 ResultSet目前还不是 Web 服务框架所支持的类型。所以需要将 ResultSet 映射为受支持的 Java 类型。此映射可使用 JPublisher 子类通过将 Ref Cursors (ResultSet) 映射为字符串序列来完成。JPublisher 实用程序随 OC4J 一起提供。
此 Web 服务使用随 Oracle9i 数据库一起提供的示例模式的 HR/HR 用户中的 EMPLOYEES 表。PL/SQL 过程可作为 Web 服务发布,在此过程中,PL/SQL 接受一个员工的名字(名和姓)并将其下属的名字作为 Ref Cursor 返回。要完成此操作,需使用 JPublisher 和 Web 服务汇编程序。

提取源代码

应用程序文件被存储在名为 Refcursor.jar 的档案中。下载该档案,并将其解压缩到方便的目录中 (<SAMPLE_HOME>)。执行以下命令,解压缩文件:

jar xvf Refcursor.jar

档案 RefCursor.jar 解压缩实现示例 RefCursor 目录的文件。压缩文件包含以下文件和目录:

  • src/:包含用于示例的所有 Java 源代码。

    • EmpBase.sqlj由 JPublisher 生成的 SQLJ 文件
    • Emplmp.sqlj所需方法的示例实现文件
    • EmpInter.java 接口的示例实现文件
  • config/:包含配置文件。

    • CreateProcedure.sql 用来创建 EMPDATA 程序包的 sql 脚本
    • config.xml 包含 Web 服务汇编程序输入的 XML 文件
  • doc/

    • refcursor.html仅包含此文档

作为 Web 服务部署 PL/SQL 过程的步骤

以下是作为 Web 服务发布 PL/SQL 过程所需的步骤顺序。
1.

通过执行位于目录 <SAMPLE_HOME>/RefCursor/config 中的文件 CreateProcedure.sql 创建 PL/SQL 过程。

要执行脚本 CreateProcedure.sql,需按 hr/hr 连接到您的数据库,并根据 SQL 提示符运行以下命令

SQL>@<SAMPLE_HOME>/RefCursor/config/CreateProcedure.sql                      
              

此操作将创建一个带有函数 getSubordinates 的新程序包 EmpData 函数。

2.

确保您的 CLASSPATH 中有以下内容,这些内容为 JPublisher 所需,用来编译 SQLJ 文件。

  • SQLJ translator classes (translator.jar present at <OC4J_HOME> \sqlj\lib)
  • SQLJ runtime classes (runtime12ee.jar present at <OC4J_HOME> \sqlj\lib)
  • JDBC classes (classes12dms.jar <OC4J_HOME> \jdbc\lib)
3.

下一步使用 JPublisher 为上面创建的程序包生成 java (SQLJ) 文件。确保 PATH 中有 jpubjpub 位于<OC4J_HOME> \bin 目录中。通过某个方便的目录给出以下命令,以生成 Java 文件。

>jpub -sql=EMPDATA:EmpBase:EmpImp -package=EmpData -user=hr/hr -url=jdbc:oracle:thin:@::

其中:
EMPDATA 数据库中程序包的名称
EmpBase JPub 在此生成其代码的基本类
EmpImp
存放用户指定代码的初始版本的 EmpImp.sqlj

安装数据库的主机名称

数据库的 TNS 监听器端口

数据库名称

此操作将在同一目录中创建 EmpBase.sqlj 和 EmpImp.sqlj。JPublisher 将其代码置于 EmpBase.sqlj 中并创建一个 EmbImp.sqlj 的初始版本,在此,您也可以用自己的代码覆盖 EmpBase.sqlj 中现有的方法。

4.

您现在已有了一个可返回 REF CURSOR 的 PL/SQL 方法。JPublisher 会自动将返回类型映射为 java.sql.ResultSet。您将在 EmpBase 类中拥有以下方法:

public java.sql.ResultSet getsubordinates (String firstname,String lastname)

ResultSet 类型不是一个可接受的 Web 服务参数。您需要创建一个函数,将 ResultSet映射为可当作 Web 服务参数接受的类型。您可将 ResultSet 映射为 String[ ]。要做到这一点,您需要使用一种可将 ResultSet 作为 String[ ] 返回的新方法 EmpImp.sqlj,如:

public String[] getSubordinatesNames(String firstName, String lastName)

您现在可以将此映射方法添加到 EmpImp.sqlj 中。另外,保证要有用于调用各个超类型构造符的构造符。

最后,此类应该与随示例 jar 一起提供的 EmpImp.sqlj 相似。

5.

下一步,需要确保在进行 Web 服务所提供的操作时省略 getsubordinates(字符串名)方法,取而代之的是 getSubordinatesNames(字符串名)方法。要达到此目的,需定义一个接口,比如 EmpInter,让它正好包含您要发布的那些方法。
您的接口必须与随示例一起提供的 EmpInter.java 中的某个接口相似。

6.

导航至已创建了 sqlj 和 java 文件的目录。编译 SQLJ 文件和 java 文件以创建这些类文件。确保 PATH 中有 sqlj.exe(位于<OC4J_HOME> \bin 目录中)。

>javac -d .*.java
>sqlj -d .*.sqlj

此操作将创建一个目录 EmpData 并将所有的类文件置于其中。

7.

创建 EmpData 目录的 JAR,比如 EmpData.jar。

>jar cvfM EmpData.jar EmpData
8

现在您可以使用 Web 服务汇编程序来创建可部署的 Web 服务企业应用档案 (EAR) 文件。
WebServicesAssembler.jar 位于 <OC4J_HOME> \webservices\lib 中

您需要通过配置文件 config.xml 提供对 WebServicesAssembler.jar 的输入。示例 config.xml 位于 <SAMPLE_HOME>\RefCursor\config.xml 中。您可以将此 config.xml 和在上一个步骤中创建的 EmpData.jar 复制到 <OC4J_HOME> \webservices\lib 中。

config.xml 包含要部署的 jar、实现服务的类、接口文件、数据源等方面的信息。
提供的数据源如下所示。


jdbc/ora9idb

确保将数据源的名称更改为可连接到示例模式的 HR 用户中的 EMPDATA 程序包的那一个。如果此数据源不存在,您可以通过在<OC4J_HOME> \j2ee\home\config\data-sources.xml 中创建以下条目提供新的数据源名称。

class="oracle.jdbc.pool.OracleDataSource"
name="ora9idb"
location="jdbc/ora9idb"
xa-location="jdbc/xa/ora9idbXADS"
ejb-location="jdbc/ora9idb"
connection-driver="oracle.jdbc.driver.OracleDriver"
username="hr"
password="hr"
url="jdbc:oracle:thin:@::"
inactivity-timeout="30"
/>

注意:要为主机名、端口和 SID 添加有效值

现在给出以下命令以在 <OC4J_HOME> \webservices\lib 中生成 EAR 文件

>java -jar WebServicesAssembler.jar -config config.xml

此操作可创建 EmpData.ear 文件。

9.

将上面创建的 ear 文件复制到:<OC4J_HOME> \j2ee\home\applications 目录。

10.

启动 OC4J 服务器。为此,请转到 <OC4J_HOME> \j2ee\home 文件夹并键入以下内容

>java -jar oc4j.jar
              
11.

使用以下内容从 <OC4J_HOME> \j2ee\home部署 EAR

>java -jar admin.jar ormi://: admin -deploy -file <OC4J_HOME> \webservices\lib\EmpData.ear -deploymentName EmpData

这将使用名称 “EmpData” 部署该应用程序

现在,使用以下命令将该 Web 应用程序绑定到网站,

>java -jar admin.jar ormi://: admin -bindWebApp EmpData EmpData_web http-web-site /PLSQL


其中:
http-web-site 绑定 Web 应用程序的网站
server 该站点的主机/IP
rmi-port 该站点的端口
password OC4J 服务器的管理员口令

12.

您可以通过打开浏览器并转到以下 URL 查看 Web 服务的工作情况

http://:/PLSQL/EmpData

您将看到您的 Web 服务操作列表,并可通过您的浏览器分别测试这些操作。

Web 服务的终点是

http://:/PLSQL/EmpData?WSDL
其中:
server 该站点的主机/IP
http-port 该站点的 Http 端口

总结

通过本文档的学习,您应该知道如何使用 JPublisher 和 Web 服务汇编程序部署可作为 Web 服务返回 ref cursor 的 PLSQL 过程。

参考

1. 有关如何使用 JDeveloper 作为 Web 服务部署 PLSQL 过程的信息,请参见/global/cn/tech/webservices/htdocs/series/plsql/index.html

2. 有关 Oracle9i 数据库和 Web 服务的信息,请参见/global/cn/tech/webservices/database.html


寄送此页面
Printer View 打印机视图