本教程介绍了如何将包含多个 PL/SQL 函数的程序包作为 Web 服务发布。
开始学习本教程之前,您应确保已按照 Oracle9i JDeveloper 9.0.3 Web 服务快速入门安装中的说明安装了 Oracle9i JDeveloper。
本教程还需要有 Oracle8i(8.1.7 或更高版本)或 Oracle9i Database 来安装 PL/SQL 程序包。如果您是第一次接触 Web 服务,则可能需要首先查看 Web 服务中心的 Web 服务初学者部分。本教程不适于个人 Oracle9i.*
接下来,下载并解压缩此示例的源代码。此代码预先配置在 Oracle9iJDeveloper 工作区和项目中。
要快速了解此过程,请观看录象,其中介绍了使用 Oracle9i JDeveloper 的主要步骤。
本教程是使用 Oracle9i JDeveloper 9.0.3 Preview 版开发的。
教程步骤
1. 确保已按照 Oracle9i JDeveloper 9.0.3 Web 服务快速入门安装中的说明启动了 Oracle9iAS Containers for J2EE。
2. 通过双击 \jdev\bin\jdevw.exe 文件启动 Oracle9i JDeveloper,其中 是安装 Oracle9i JDeveloper 的位置。
3. 确保已按照 OTN Oracle9iAS 9.0.3 Web 服务快速入门安装中的说明在 Oracle9i JDeveloper 中设置了 Oracle9i Application Server 的应用服务器连接。本教程假定已按照这些说明在端口 8888 上设置了 HTTP 监听程序和网站。

4. 创建您的 Oracle8i 或 Oracle9i Database 的数据库连接
a. 用鼠标右键单击Database连接节点并选择 New Connection。
b. 单击Next 按钮跳过 splash 屏幕。
c. 输入Connection Name并选择 Oracle JDBC 的Connection Type。单击Next按钮。
d. 输入您的数据库的Username和Password,单击 Deploy Password 并单击Next按钮。

e. 输入您的数据库的Driver、Host Name、JDBC Port、SID 信息并单击Next按钮。
f. 单击 Test Connection 按钮,以确保您的连接信息正确。然后,单击Finish按钮。
5. 选择菜单 File->Open 。导航至已解压缩源代码的目录并单击文件 PLSQL.jws,然后单击Open按钮。

6. 在此项目中定位 SQL 文件 create.sql。此文件包含将要作为 Web 服务发布的示例 PL/SQL 程序包。从命令行使用 Oracle 实用程序 SQL*Plus 可以安装此文件,或通过将 SQL*Plus 设置为与 Oracle9i JDeveloper 一起使用也可以安装此文件。
对于使用 SQL*Plus 手动安装的 SQL 文件,此 SQL 可以在 \plsql\project1\src\client.sql 中找到。如果选择了通过 SQL*Plus 手动加载,请跳至步骤 8。
要在 JDeveloper 中设置 SQL*Plus 连接,请选择菜单 Tools->Preferences 并在首选项导航器中选择 Database Connection。然后输入 SQLPlus.exe 或 SQLPlusw.exe 的位置并单击OK按钮。
7. 用鼠标右键单击 client.sql 并选择 SQL*Plus->。这将启动 SQL*Plus 并将 PL/SQL 加载到在数据库连接中定义的模式中。
8. 用鼠标右键单击项目 PLSQL.jpr 并选择New。

9. 在“对象库”中,选择 Web Services->PL/SQL Web Service 并单击OK按钮。

10. 单击Next按钮,跳过 splash 屏幕。
11. 在 PL/SQL Web 服务发布向导中,选择 Database Connection ,此位置安装了以前加载的 PL/SQL 程序包。然后选择数据库程序包 COMPANY 并单击Next按钮。

12. 选择函数 ADDEMP、GETADDRESS、GETEMP 和 REMOVEEMP 并单击Next按钮。
13. 在“文件位置”屏幕上采取缺省值。此屏幕定义了将要生成 WSDL 的位置、Web 服务的终端以及定义 Web 服务的唯一 URI。
如果已按照 OTN Oracle9iAS 9.0.3 Web 服务快速入门安装中的说明进行设置,则应出现一个名为 Oracle9iAS 的连接,此连接在端口 8888 上设置了 HTTP 监听程序和网站。否则,请在执行此步骤之前设置 Oracle9iAS Server 的连接。

14. 当此向导运行时,将出现“PL/SQL Web 服务生成程序”窗口。当代码生成进程运行时,此窗口的显示会保留数秒。

15. 查看生成的文件,尤其是 Company.wsdl(这是 Web 服务描述语言文件,它说明作为 Web 服务发布的程序)和 web.xml 文件(此文件配置了 servlet 类 oracle.j2ee.ws.StatelessStoredProcRpcWebService,此类根据 COMPANY 程序包中的下层函数来处理传入的 SOAP 消息)。
另外,注意 Company.java 类已创建。此类由实用程序 JPublisher 以及其他支持类生成,如 Address.java 和 Employee.java,它们将 COMPANY 程序包和程序映射为一组 Java 类。如果 COMPANY 程序包发生更改,则应通过 PL/SQL Web 服务向导重新生成这些类。
16. 通过用鼠标右键单击 PLSQL.jpr 并选择 Build 或Rebuild来生成项目。

17. 用鼠标右键单击文件 WebServices.deploy 并选择 Oracle9iAS。这将把 COMPANY 程序包的 SOAP servlet 和 Java 类部署到 Oracle9i Application Server。

18. 部署之后,通过用鼠标右键单击
PLSQL.jpr 节点并选择
New,开始构建用于测试 Web 服务的客户机。
19. 从“对象库”中,选择 Web Services->Web Service Stub/Skeleton 并单击OK按钮。

20. 通过单击Next按钮跳过此向导的 splash 页。
21. 单击下拉列表框并选择 Company.wsdl 文件。这是通过运行 Oracle9iJDeveloper Web 服务向导生成的 WSDL 文件。
通过将此 Stub/Skeleton 向导指向 Web 服务 URI 并添加参数 ?WSDL,还可以从 Oracle9i Application Server 生成 WSDL。可以在此处输入的 URL(假定已使用本教程中的缺省值)将为:
http://127.0.0.1:8888/PLSQL-PLSQL-context-root/oracle9i.CompanyWebService?WSDL
单击Next按钮。

22. 单击生成的树的 Company 节点。此树表示 WSDL 文件中描述的方法,它使 Oracle9iJDeveloper 能够创建向所描述的 Web 服务发送 SOAP 消息的一般 Stub。单击Finish按钮以结束此向导。

23. 查看生成的 Java 类 CompanyStub.java,尤其是 getemp、addemp、removeemp 和 getAddress 方法,这些方法对 Web 服务接收和发送的 SOAP 消息进行列集和散集,在与 PL/SQL 程序包函数会话过程中再依次进行列集和散集。
24. 查看在以下 URL 的 Oracle9i Application Server 上可以找到的服务说明:
http://127.0.0.1:8888/PLSQL-PLSQL-context-root/oracle9i.CompanyWebService(需要进行编辑以符合您的配置)

25. 双击 Java 类 CompanyStub.java 并查找注释行:
| // Add your own code here. |
26. 复制位于注释行后的下列代码行(此代码还可在 sampleclient.txt 文件的 PLSQL.jpr 项目中找到)。注意,如果多次运行此代码,则下层 EMPLOYEE 表将具有唯一性限制,因此,以备将来重新运行此代码,必须执行 stub.removeemp 代码行 — 缺省情况下,包括此代码行。
// Create a new Address Address addr = new Address(); addr.setCity("Redwood Shores"); addr.setStreet("Oracle Parkway"); addr.setZip("94065"); addr.setState("CA");
Employee emp = new Employee(); emp.setEid(new Integer(1234)); emp.setEfirstname("Mike"); emp.setElastname("Lehmann"); emp.setSalary(new Double(500));
// Delete the employee (if already added it) // stub.removeemp(new Integer(1234));
// Add the employee over SOAP stub.addemp(emp);
// Retrieve the employee over SOAP System.out.println(stub.getemp(new Integer(1234)).getElastname()); // Remove the employee (so this code snippet can be re-run stub.removeemp(new Integer(1234));
|
27. 用鼠标右键单击 PLSQL.jpr 并选择 Build Project 或 Rebuild Project 。
28. 用鼠标右键单击 CompanyStub.java 并选择运行 CompanyStub.java。

29. 运行成功后,将在日志窗口中产生如下消息。

30. 要查看客户机与服务器之间的 SOAP 消息,请选择菜单Tools->TCP Packet Monitor。
31. 单击 TCP 监视器上绿色的启动箭头。
32. 返回 CompanyStub.java,通过选择历史记录选项卡中的消息事务处理并单击有关消息内容的数据选项卡,在 TCP 监视器中查看 SOAP 消息。

这样就完成了 PL/SQL Web 服务教程。
* 有关个人 Oracle9i 的版本正在开发中。由Bug 2591731 解决,相关说明可在 Metalink 中找到。