如何为 OJMS 配置 OC4J 资源提供程序(使用 application.xml)?

日期:2003 年 6 月 24 日

在阅读此方法文档后,您应该能够

  • 为 OJMS 配置资源提供方。

简介

本文档演示了如何配置资源提供方,以访问数据库中的队列并通过资源提供方将一条消息插入队列。本方法文档通过 application.xml 配置 ResourceProvider。


软件需求

  • 此处可下载 Oracle9i Enterprise Edition Release 9.2.0.2.0 — 产品版本(及更高版本)

  • Oracle9iAS Containers for J2EE (OC4J) Version 9.0.3 或更高版本您可从 Oracle 技术网下载 OC4J。

  • JDK1.3.x 或更高版本。可从此处下载。


说明

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 提示下看到您插入队列的消息。

资源


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