`
蓝色飞扬
  • 浏览: 94923 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

在OC4J下配置JMS & 使用Message-Driven Bean

    博客分类:
  • java
阅读更多

本文转载自:http://harper.ycool.com/post.1021639.html

 

本文涉及的背景知识如下 

1. JNDI (Java Naming and Directory Service )  

2.    JMS (Reference: Java Message Service O’Reilly, Jan 2001 First Ed.)  

3.    EJB (Reference: Mastering Enterprise JavaBean, O’Reilly & Associates, 2001 )  

本文只涉及EJB中的Message-Driven Bean  

4.    OC4J (Oracle Container For J2EE, Oracle公司的J2EE Application Server)

 

Part I Setting up OC4J JMS Service

 

下面是一个示例:

<?xml version="1.0" standalone='yes'?>
<!DOCTYPE jms-server PUBLIC "OC4J JMS server" "http://xmlns.oracle.com/ias/dtds/jms-server-9_04.dtd">

<jms-server port="9127">

   
    <queue name="Jera MessageService Queue" location="jms/JeraMSQueue">
        <description>Queue for Jera MessageService</description>
    </queue>

    <topic name="Demo Topic" location="jms/demoTopic">
        <description>A dummy topic</description>
    </topic>
    
    <log>
        <file path="../log/jms.log"/>
        <!-- Uncomment this if you want to use ODL logging capabilities
        <odl path="../log/jms/" max-file-size="1000" max-directory-size="10000"/>
        -->
    </log>

    <queue-connection-factory location="jms/JeraMSQueueConnectionFactory"/>
   
</jms-server>

 

其中queuetopic tag声明了可以使用的javax.jms.Queuejavax.jms.Topic,queue-connection-factorytopic-connection-factory则声明了可供使用的javax.jms.QueueConnectionFactoryjavax.jms.TopicConnectionFactory.主要需要配置的就是这几个tag. 其中location的属性最为重要,它指明了该对象的JNDI Name.

 

改动完毕后,重启OC4J,便可以用JNDI服务找到这些对象并使用它们.JMS Service配置完成。可以在AS中运行下述代码以验证服务是否成功启动。(如果在运行过程中没有出现Exception,一般可以确定配置成功)

 

           

 

             Context jndiContext = new InitialContext();

 

             QueueConnectionFactory qcf = (QueueConnectionFactory)

 

             jndiContext.lookup("jms/JeraMSQueueConnectionFactory");

 

             QueueConnection connect = qcf.createQueueConnection();

 

             Queue q = (Queue)jndiContext.lookup("jms/JeraMSQueue");

 

             QueueSession session =      connect.createQueueSession(false,Session.AUTO_ACKNOWLEDGE);

 

             QueueSender sender = session.createSender(q);

 

             connect.start();

 

             sender.send(session.createTextMessage("This is a message"));

 

             connect.close();

 

Part II Configuring Message-Driven Bean

 

 

      <message-driven >

 

         <description><![CDATA[<!-- begin-user-doc --> You can insert your documentation for '<em><b>MessageServiceBean</b></em>'.]]></description>

 

         <ejb-name>MessageServiceBean</ejb-name>

 

         <ejb-class>org.harper.frm.core.ejb.msg.MessageServiceBean</ejb-class>

 

         <transaction-type>Container</transaction-type>

 

         <acknowledge-mode>Auto-acknowledge</acknowledge-mode>

 

         <message-driven-destination>

 

            <destination-type>javax.jms.Queue</destination-type>

 

         </message-driven-destination>

 

       </message-driven>

 

  

 

      <!-- Message Driven Beans -->

 

      <message-driven-deployment name="MessageServiceBean"

 

                  destination-location="jms/JeraMSQueue"

 

                  connection-factory-location="jms/JeraMSQueueConnectionFactory">

 

      </message-driven-deployment>

 

 

 

 

 

    protected void doGet(HttpServletRequest request,

            HttpServletResponse response) throws Exception {

        doService(request, response);

    }

    protected void doPost(HttpServletRequest request,

            HttpServletResponse response) throws Exception {

        doService(request, response);

    }

    protected void doService(HttpServletRequest request,

            HttpServletResponse response) throws Exception {

        Context jndiContext = new InitialContext();

        QueueConnectionFactory qcf = (QueueConnectionFactory)

        jndiContext.lookup("jms/JeraMSQueueConnectionFactory");

      QueueConnection connect = qcf.createQueueConnection();

      Queue q = (Queue)jndiContext.lookup("jms/JeraMSQueue");

        QueueSession session = connect.createQueueSession(false,Session.AUTO_ACKNOWLEDGE);

        QueueSender sender = session.createSender(q);

        connect.start();

        sender.send(session.createTextMessage("This is a message"));

        connect.close();  } 


      Message-Driven Bean
onMessage函数如下 

    public void onMessage(javax.jms.Message message) {

        // begin-user-code

        System.out.println("Message Driven Bean got message " + message);

        // TODO:  do business logic here

      // end-user-code

}


      执行后输出结果如下:

“Message Driven Bean got message TextMessage[ID:Oc4jJMS.Message.jiangha.71dc3d:1082ce8377e:-8000.8]”

证明配置成功完成。

 这里的name属性与上面ejb-jar.xml中的ejb-name属性是对应的。 destination-locationconnection-factory-location分别指定了MDB读取Message使用的消息队列和创建连接使用的Factory.这里的location必须是在jms.xml中声明过的连接。

 

 至此配置完成,下面要做的是测试工作。

 

 Part III Test

 

 测试环境由两部分组成:负责发送消息的Servlet和后台处理消息的Message-Driven Bean.

 

 Servlet端代码如下

  这个deployment-descriptor中,需要修改的部分主要有<transaction-type>(可选项为ContainerBean)<destination-type>(可选项为QueueTopic),根据MDB具体选择。

 

  如果读者对EJB比较熟悉,可能会注意到:SessionBeanEntityBean不同的是,Message-Driven Beandeployment-descriptor中没有包含JNDI location的信息。这是由MDB与其他两种EJB不同的工作方式决定的。在被创建后,MDB会使用指定的ConnectionFactory创建与JMS Service的连接,随后在指定的消息队列中监听消息,并根据收到的消息决定自己的行为。应用程序只能通过这个消息队列与MDB交互,所以MDB并不需要一个JNDI location.

 

  2.  orion-ejb-jar.xml的配置

 

 这个文件是OC4J系列Server专用的deployment-descriptor文件。如果使用的ASJBOSS,则要配置jboss.xml,其他类似。

 

 下面是一个示例:

 --本段假设读者已经具有EJB的相关背景知识(包括deployment descriptor),因此不再对一些常识进行说明。

 

    1.  ejb-jar.xml的配置

    JMS Service的运行需要一台JMS Server的支持。目前主流J2EE AS的开发商都在自己的产品中集成了JMS Server的实现,只需要正确的配置,启用JMS服务就可以了。本文中使用的JMS ServerOC4J JMS

 

    OC4J JMS的配置文件是$ORACLE_HOME/config/jms.xml,在$ORACLE_HOME/config/server.xml中使用”<jms-config path="./jms.xml"/>” tag指明。

 

   Jms.xmlDTD文件是http://xmlns.oracle.com/ias/dtds/jms-server-9_04.dtd

分享到:
评论

相关推荐

    基于java的开发源码-Message-Driven Bean EJB实例源代码.zip

    基于java的开发源码-Message-Driven Bean EJB实例源代码.zip 基于java的开发源码-Message-Driven Bean EJB实例源代码.zip 基于java的开发源码-Message-Driven Bean EJB实例源代码.zip 基于java的开发源码-Message-...

    Message-Driven Bean EJB实例源代码

    总结,"Message-Driven Bean EJB实例源代码"涵盖了MDB的基本概念、实现方式以及在Java企业级应用中的使用。通过理解这些源代码,开发者可以学习如何利用MDB和JMS构建高效、可扩展的分布式系统。

    基于Java的实例源码-Message-Driven Bean EJB实例源代码.zip

    在Java企业级应用开发中,Message-Driven Bean(MDB)是一种特殊类型的Enterprise JavaBeans(EJB),它主要用于处理消息队列中的消息。MDB是Java消息服务(Java Message Service,JMS)与EJB容器之间的桥梁,允许...

    基于Java的源码-Message-Driven Bean EJB实例源代码.zip

    这个压缩包“基于Java的源码-Message-Driven Bean EJB实例源代码.zip”显然包含了实现MDB的源代码示例,非常适合学习和理解如何在实际应用中使用MDB来处理异步通信。 Message-Driven Bean是一种特殊的session bean...

    基于Java的Message-Driven Bean EJB实例源代码.zip

    Java Message-Driven Bean(MDB)是企业级Java(EJB)技术的一部分,它主要用于处理Java消息服务(JMS)中的消息。在Java EE环境中,MDBs是无状态的bean,它们作为后台服务运行,监听消息队列或主题,并对到来的消息...

    基于java的Message-Driven Bean EJB实例源代码.zip

    - 使用`@MessageDriven`注解来声明bean是一个MDB,并指定JMS配置,如目的地类型(队列或主题)、消息驱动适配器等。 - 可以通过`@ActivationConfigProperty`注解进一步配置MDB的行为,例如设置消息选择器、最大...

    基于Java的实例开发源码-Message-Driven Bean EJB实例源代码.zip

    "基于Java的实例开发源码-Message-Driven Bean EJB实例源代码.zip" 这个标题揭示了本次讨论的核心内容,即一个关于Java编程的实例项目,特别是涉及了Java企业版(Java EE)中的Message-Driven Bean(MDB)组件。...

    java源码:Message-Driven Bean EJB实例源代码.zip

    Java消息驱动Bean(Message-Driven Bean,MDB)是企业级JavaBeans(Enterprise JavaBeans,EJB)的一个组件类型,主要用于处理JMS(Java Message Service)消息。本实例源代码提供了关于如何实现和使用MDB的详细示例...

    Message-Driven Bean EJB实例源代码.7z

    7. **部署**:在EJB 3.1及更高版本中,MDB的部署变得更加简单,可以使用注解(如`@MessageDriven`)来代替XML配置,进一步简化了开发过程。 在这个源代码实例中,你可能会看到以下几个关键部分: 1. **MDB类**:...

    Message-Driven Bean 培训PPT

    ### Message-Driven Bean (MDB) 培训知识点解析 #### 一、Java消息服务(JMS) **1.1 Java消息服务概念** Java消息服务(Java Message Service,简称JMS)是一种面向消息中间件的标准API,它使得Java应用程序能够...

    Message-Driven Bean EJB实例源代码.rar

    **消息驱动Bean(Message-Driven Bean,MDB)是Java企业版(Enterprise JavaBeans,EJB)规范中的一个重要组件,主要用于处理消息队列中的消息。在Java应用中,MDB扮演着异步服务的角色,它可以接收并处理JMS(Java ...

    19-华勤-Sage Practical & Scalable ML-Driven Performance Debugging

    Sage: Practical & Scalable ML-Driven Performance Debugging inIthaca, New York, U

    SpringMVC源码总结(三)mvc:annotation-driven和mvc:message-converters简单介绍

    在Spring MVC框架中,`mvc:annotation-driven`和`mvc:message-converters`是两个非常重要的元素,它们在处理基于注解的控制器和数据转换方面起着关键作用。本篇文章将深入探讨这两个组件的工作原理以及如何在实际...

    EJB3.0开发Message Driven Bean

    ### EJB3.0开发Message Driven Bean #### 一、概述 Enterprise JavaBeans (EJB) 是一种基于Java的应用程序编程接口(API),用于开发分布式企业级应用。EJB3.0作为Java EE5规范的一部分,引入了许多简化开发的新特性...

    spring的annotation-driven配置事务管理器详解 (多数据源配置

    Spring 的 Annotation-Driven 配置事务管理器详解(多数据源配置) Spring 框架提供了强大的事务管理机制,通过使用 Annotation-Driven 配置,可以方便地管理事务。在多数据源配置中,spring 的 Annotation-Driven...

    小程序 Message-Driven Bean EJB实例源代码(源码).rar

    免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,...

    Build Your Own Database-Driven Website Using PHP & MySQL--3rd Edition

    Chapter 4 - Publishing MySQL Data on the Web Chapter 5 - Relational Database Design Chapter 6 - A Content Management System Chapter 7 - Content Formatting and Submission Chapter 8 - MySQL ...

Global site tag (gtag.js) - Google Analytics