与 JMS 异步的 Web 服务


概述

本教程使用 JMS 队列通过 Web 服务“发送”XML 消息并使用 JMS 主题 “接收”XML 消息。Web 服务仅使用一个终端执行这两种操作。JMS provider是 Oracle9iDatabase 高级队列。

Web 服务客户机向 JMS Web 服务终端发送 XML 元素,此终端将 XML 加入到队列 QUEUE1。接着,消息驱动组件处理并转换 QUEUE1 中的消息,并在主题 TOPIC1 中发布该消息。然后,客户机使用 JMS Web 服务接收来自 TOPIC1 的转换后的消息。

阅读并了解背景

开始学习本教程之前,应先了解以下几个主题:

a. 消息驱动组件
b. Java 消息处理服务
c. 使用 JMS 的 Web 服务

如果您是第一次接触 Web 服务,则可能需要首先查看 Web 服务中心的 Web 服务初学者部分。

软件要求

开始学习本教程之前,您应确保已按照 Oracle9i JDeveloper 9.0.3 Web 服务快速入门安装中的说明安装了 Oracle9i JDeveloper。

本教程需要 Oracle9iDatabase 版本 9.0.1.4。通过下载 Metalink 补丁集 2517300,可以将任何 9.0.1.x 数据库更新到 9.0.1.4。如果您使用的是 Oracle9i Release 2,则必须将该数据库更新到 9.2.0.2(补丁集 2632931)。

本教程是使用 Oracle9i JDeveloper 9.0.3 开发的。

使用 Oracle9i Application Server 的 Web 服务命令行实用程序的本教程替换版本可以在 zip 文件 \webservices\demo\demo.zip(适用于独立下载的 Oracle9iAS Containers for J2EE)或此处找到。

教程步骤

1. 下载并解压缩此示例的源代码。此代码预先配置在 Oracle9iJDeveloper 工作区和项目中的。

2. 确保已按照 Oracle9i JDeveloper 9.0.3 Web 服务快速入门安装中的说明设置了 Oracle9iAS Containers for J2EE。

3. 通过双击 \jdev\bin\jdevw.exe 文件启动 Oracle9i JDeveloper,其中 是安装 Oracle9i JDeveloper 的位置。

4. 确保已按照 OTN Oracle9iAS 9.0.3 Web 服务快速入门安装中的说明在 Oracle9i JDeveloper 中设置了 Oracle9i Application Server 的应用程序服务器连接。本教程假定已按照这些说明在端口 8888 上设置了 HTTP 监听程序和网站。



5. 选择菜单文件->打开。导航至已解压缩源代码的目录并单击文件 JMS.jws,然后单击打开按钮。



6. 在项目 Setup.jpr 中,定位 SQL 文件 admin.sql— 它位于 \jms\project2\admin.sql. 中的文件系统中。使用 SQLPlus 可以运行此脚本,必须使用数据库帐户 SYS 在您的数据库中设置 Oracle9i 高级队列基础架构。

从 Oracle9iDatabase 安装中启动 SQLPlus 并执行 admin.sql 脚本。






7. admin.sql 脚本已在您的数据库中设置了新的用户 JEMUSER。接下来,使用 JEMUSER 帐户按顺序运行下列 .sql 文件。

- jemuser.sql
- createTopicandQueueTable.sql
- createTopicandQueue.sql
- viewtables.sql

使用 SQLPlus 命令行或使用 Oracle9i JDeveloper 均可完成此操作。如果选择了通过 SQL*Plus 进行加载的命令行方法,请跳至步骤 10。

8. 使用帐户 JEMUSER 在 Oracle9i JDeveloper 中创建您的 Oracle9i Database 的数据库连接。admin.sql 使用的用于创建 JEMUSER 的缺省口令是 JEMPASSWD

a. 用鼠标右键单击数据库连接节点并选择新建连接



b. 单击下一步按钮跳过 splash 屏幕。

c. 输入连接名称并选择 Oracle JDBC连接类型。单击下一步按钮。





d. 输入您的数据库的用户名口令,单击部署口令并单击下一步按钮。





e. 输入您的数据库的驱动程序主机名JDBC 端口SID 信息并单击下一步按钮。





f. 单击测试连接按钮,以确保您的连接信息正确。然后,单击完成按钮。


9. 要在 JDeveloper 中设置 SQL*Plus 连接,请选择菜单工具->首选项并在首选项导航器中选择数据库连接。然后输入 SQLPlus.exeSQLPlusw.exe 的位置并单击确定按钮。




10. 在 jemuser.sqlcreateTopicandQueueTable.sql、createTopicandQueue.sqlviewtables.sql 中按顺序分别用鼠标右键单击并选择 SQL*Plus 中运行-><您的 JEMUSER 数据库连接>。这将启动 SQL*Plus 并将 PL/SQL 加载到 JEMUSER 架构中。



11. 运行最后一个脚本 viewtables.sql 之后,您应看到在 QLPlus 中返回的 4 行数据。


12. 编辑 \j2ee\config\data-sources.xml 以安装以下数据源,对 URL(用户名和口令对应于在步骤 0 中创建的用户)进行适当的更改:

class="com.evermind.sql.DriverManagerDataSource"
name="OracleDS"
location="jdbc/wsDemoEmulatedOracleCoreDS"
xa-location="jdbc/xa/wsDemoEmulatedOracleXADS"
ejb-location="jdbc/wsDemoEmulatedDS"
connection-driver="oracle.jdbc.driver.OracleDriver"
username="jemuser"
password="jempasswd"
url="jdbc:oracle:thin:@127.0.0.1:1521:O901"
inactivity-timeout="30"
/>


13. 编辑 \j2ee\config\application.xml 以安装以下资源提供者:


OJMS/AQ
value="jdbc/wsDemoEmulatedDS">


将这些设置放到 元素中。

14. 重新启动 Oracle9iAS Containers for J2EE。

15. 返回到 Oracle9iJDeveloper 并查看项目 JMSWebService.jpr

注意消息驱动组件 (MDB) MessageDrivenEJBBean。这是预先配置的消息驱动组件,设计用于从队列 QUEUE1 中选择消息并使用 XSL 进行转换,然后在 TOPIC1 中发布结果。用于处理消息的代码可以在 onMessage 方法中的 java 类 MessageDrivenEJBBean.java 中找到。





通过用鼠标右键单击 Oracle9i JDeveloper 中的 orion-ejb-jar.xml 文件并选择设置,可以查看消息驱动组件的配置。



16. 通过用鼠标右键单击 mdb.deploy 并选择 Oracle9iAS 将消息驱动组件部署到 Oracle9iAS。


17. 在“对象库”中,选择 Web 服务->JMS Web 服务并单击确定按钮。



18. 单击下一步按钮,跳过 splash 屏幕。

19. 在 JMS Web 服务向导的步骤 1(共 4 步)中,在 Web 服务名称字段中输入 JMSWebService 并对可用的 JMS 操作选择 Both。单击下一步


20. 在 JMS Web 服务向导的步骤 2(共 4 步)中,选择 JMS 目标的类型 Queue。对 JMS 连接工厂,从下拉列表框中选择 jms/theNewQueueConnectionFactory。对 JMS 目标,输入 jms/theNewQueue。对其余选项,采取缺省值并单击下一步




21. 在 JMS Web 服务向导的步骤 3(共 4 步)中,单击选项接收操作使用单独的 JMS 目标。对接收操作的 JMS 目标的类型,选择 Topic。对接收操作的 JMS 连接工厂,选择 jms/logTopicConnectionFactory。对接收操作的 JMS 目标,选择 jms/logTopic。单击下一步


22. 在 JMS Web 服务向导的步骤 4(共 4 步)中,采取缺省值或根据您的配置调整这些设置,然后单击完成





23. 用鼠标右键单击文件 WebServices.deploy 并选择 Oracle9iAS。这样会将 JMS SOAP servlet 部署到 Oracle9i Application Server。



24. 通过转到终端主页并确认是否存在发送和接收操作来确认是否已成功部署 Web 服务。本教程提供的缺省项目的终端页是 http://127.0.0.1:8888/emp/JMSWebService



25. 从 Oracle9i JDeveloper 对象库中,选择 Web 服务->Web 服务 Stub/Skeleton 并单击确定按钮。





26. 通过单击“下一步”按钮跳过此向导的 splash 页。

27. 单击下拉列表框并选择 JMSWebService.wsdl 文件。这是通过运行 Oracle9iJDeveloper Web 服务向导生成的 WSDL 文件。选择生成客户端 Stub 选项和在 Stub 中生成主要方法选项。

通过将此 Stub/Skeleton 向导指向 Web 服务 URI 并添加参数 ?WSDL,还可以从 Oracle9i Application Server 生成 WSDL。可以在此处输入的 URL(假定已使用本教程中的缺省值)将为:

http://127.0.0.1:8888/emp/JMSWebService?WSDL




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



29. 双击生成的 Java 类 JMSWebServiceStub.java 并查看源代码,尤其是 sendreceive 方法,这些方法对作为 Web 服务的基础来往于 JMS 队列的 SOAP 消息进行编组和取消编组。

30. 查找注释行:

// Add your own code here.

31. 添加下列代码:


// Construct an XML document using the helper class Employee
Element elAdd = Employee.getEmployeeElement("Bob","1234","assistant manager");

System.out.println("Doing the Send Operation ..on Element");

((XMLElement)elAdd).print(System.out);
stub.send(elAdd);

System.out.println("Doing the Receive operation ..");

Element e = (Element)stub.receive().elementAt(0);

if (e != null) {
System.out.println("Element received is:");
((XMLElement)e).print(System.out);
}


32. 如果运行成功,将显示发送 JMS Web 服务消息已通过消息驱动组件得到转换, 元素从“助理管理器”更新到“高级管理器”,并接着通过接收 JMS Web 服务操作返回。




这样就完成了与 JMS 异步的 Web 服务教程。

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