如何为 OJMS 配置 OC4J 资源提供程序(使用 application.xml)?
日期:2003 年 6 月 24 日
在阅读此方法文档后,您应该能够
简介
本文档演示了如何配置资源提供方,以访问数据库中的队列并通过资源提供方将一条消息插入队列。本方法文档通过 application.xml 配置 ResourceProvider。
软件需求
说明
ResourceProvider 接口使您可为 JMS 连接插入第三方消息提供方。对于 Oracle JMS (OJMS) 而言,这将使 EJB、Servlet 及 OC4J 客户端可以访问许多不同的队列实现。利用第三方消息提供方,只有 EJB 可访问队列实现。这些资源作为缺省的 JMS 资源,可在 java:comp/resource/ 下获得。
设置数据库
开始了解错综复杂的 ResourceProvider 之前,首先让我们创建此方法文档所需的数据库队列。通过 sqlplus 连接到数据库,并执行如下操作
-- Create a Queue Table. The payload is SYS.AQ$_JMS_TEXT_MESSAGE.
-- This type can store simple String values.
BEGIN dbms_aqadm.create_queue_table( queue_table=>'RPTable', queue_payload_type=>'SYS.AQ$_JMS_TEXT_MESSAGE', multiple_consumers => false, comment => 'Queue Table For Resource Provider' );
END;
/
-- Create a Queue.
BEGIN dbms_aqadm.create_queue ( queue_name => 'RPQueue', queue_table => 'RPTable'); END; /
-- Start this queue. This enables the queue to receive messages.
EXECUTE dbms_aqadm.start_queue (queue_name=>'RPQueue') /
|
这样就完成了数据库设置。
配置自定义资源提供方
用于 OJMS 的 OC4J 资源提供方是由类 oracle.jms.OjmsContext 实现的。每个 OJMS 资源提供方实例是配置文件中的一个 <resource-provider> XML 元素。要添加自定义的 ,请将如下标记添加到您的 application.xml 文件。如果 OC4J 内部署的某个特定应用程序要在本地获得 ResourceProvider,则将此标记添加到 orion-application.xml 中并将其打包成 ear 文件。
<resource-provider class="oracle.jms.OjmsContext" name="TestRP"> <description> OTN How-to to configure Resource Provider</description> <property
name="url" value="jdbc:oracle:thin:rp/rp@ind712r.idc.oracle.com:1521:otn9i"> </property> </resource-provider>
|
对于上面的标记,请注意下列几点
-
TestRP 是 JNDI 名称,应用程序通过它来识别资源提供方。此名称将以 java:comp/resource/TestRP/ 形式用于在应用程序的 JNDI 中查找资源提供方。
- 用您的数据库连接参数替换属性标记中的值属性。一般的构造为
jdbc:oracle:thin:<db_user>/<db_pwd>@<db_hostname>:<db_port>:<db_sid>
|
这样就完成了资源提供方的配置。
使用自定义资源提供方
要通过 JMS 访问 Oracle JMS 队列,您必须在 Java 客户端(Java 类、EJB、Servlet、JSP 等)执行下列操作
// Get the Initial Context Context jndiContext = new InitialContext();
// LookUp the QueueTable and create the QueueConnectionFactory QueueConnectionFactory queueCF = (QueueConnectionFactory)jndiContext.lookup ("java:comp/resource/TestRP/QueueConnectionFactories/RPTable");
// Lookup the Queue and create its object Queue queue = (Queue)jndiContext.lookup("java:comp/resource/TestRP/Queues/RPQueue");
// Create a Connection to the QueueTable QueueConnection queueConnection = queueCF.createQueueConnection();
// Start the Connection queueConnection.start();
// Create a Session to the queue QueueSession queueSession = queueConnection.createQueueSession (true, Session.AUTO_ACKNOWLEDGE);
// Create an object through which this program enqueues QueueSender sender = queueSession.createSender(queue);
// Create a Text Message to be enqueued Message msg = queueSession.createTextMessage("Did you have your OTN Sample today?");
// Enqueue the message in the queue sender.send(msg);
|
请单击此处查看完整的 JSP,它使用上述代码展示 ResourceProvider 的特性。
执行 JSP
- 将
ResourceProvider.jsp 复制到 <oc4j_home>\j2ee\home\default-web-app\examples 下。<oc4j_home> 是安装 OC4J 的文件夹。例如,对于 Windows,文件夹为 D:\oc4j;对于 Linux 或 Solaris,文件夹为 /home/oc4j。
- 启动 OC4J 服务器。
- 打开浏览器并访问 URL
http://<host_name>:<oc4j_port>/examples/ResourceProvider.jsp。
- 在第一页您将看到一个文本框。请在其中输入一些文本。此文本消息将进入数据库队列。请按下
Enqueue Message 按钮。
- 现在您将看到
Message Enqueued Successfully !!!。这表示您提供的消息已通过 ResourceProvider 成功进入队列。要进行检查,请通过 sqlplus 以数据库用户身份(创建队列处)登录,并运行如下命令
set serveroutput on;
declare deqopt dbms_aq.dequeue_options_t; mprop dbms_aq.message_properties_t; msgid RAW(16); payload SYS.AQ$_JMS_TEXT_MESSAGE;
begin deqopt.navigation := DBMS_AQ.FIRST_MESSAGE; deqopt.wait := 1; dbms_aq.dequeue( queue_name => 'RPQueue', dequeue_options => deqopt, message_properties => mprop, payload => payload, msgid => msgid
); commit;
dbms_output.put_line('The Message Sent to the Queue is: ' || payload.TEXT_VC);
end; /
|
执行上述操作之后,您将在 sql 提示下看到您插入队列的消息。
资源
|