本文转载自: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>
|
其中queue和topic tag声明了可以使用的javax.jms.Queue和javax.jms.Topic,queue-connection-factory和topic-connection-factory则声明了可供使用的javax.jms.QueueConnectionFactory和javax.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-location和connection-factory-location分别指定了MDB读取Message使用的消息队列和创建连接使用的Factory.这里的location必须是在jms.xml中声明过的连接。
至此配置完成,下面要做的是测试工作。
Part III Test
测试环境由两部分组成:负责发送消息的Servlet和后台处理消息的Message-Driven Bean.
Servlet端代码如下:
这个deployment-descriptor中,需要修改的部分主要有<transaction-type>(可选项为Container和Bean)和<destination-type>(可选项为Queue和Topic),根据MDB具体选择。
如果读者对EJB比较熟悉,可能会注意到:与SessionBean或EntityBean不同的是,Message-Driven Bean的deployment-descriptor中没有包含JNDI location的信息。这是由MDB与其他两种EJB不同的工作方式决定的。在被创建后,MDB会使用指定的ConnectionFactory创建与JMS Service的连接,随后在指定的消息队列中监听消息,并根据收到的消息决定自己的行为。应用程序只能通过这个消息队列与MDB交互,所以MDB并不需要一个JNDI location.
2. 对orion-ejb-jar.xml的配置
这个文件是OC4J系列Server专用的deployment-descriptor文件。如果使用的AS是JBOSS,则要配置jboss.xml,其他类似。
下面是一个示例:
--本段假设读者已经具有EJB的相关背景知识(包括deployment descriptor等),因此不再对一些常识进行说明。
1. 对ejb-jar.xml的配置
JMS Service的运行需要一台JMS Server的支持。目前主流J2EE AS的开发商都在自己的产品中集成了JMS Server的实现,只需要正确的配置,启用JMS服务就可以了。本文中使用的JMS Server是OC4J JMS。
OC4J JMS的配置文件是$ORACLE_HOME/config/jms.xml,在$ORACLE_HOME/config/server.xml中使用”<jms-config path="./jms.xml"/>” tag指明。
Jms.xml的DTD文件是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-...
总结,"Message-Driven Bean EJB实例源代码"涵盖了MDB的基本概念、实现方式以及在Java企业级应用中的使用。通过理解这些源代码,开发者可以学习如何利用MDB和JMS构建高效、可扩展的分布式系统。
在Java企业级应用开发中,Message-Driven Bean(MDB)是一种特殊类型的Enterprise JavaBeans(EJB),它主要用于处理消息队列中的消息。MDB是Java消息服务(Java Message Service,JMS)与EJB容器之间的桥梁,允许...
这个压缩包“基于Java的源码-Message-Driven Bean EJB实例源代码.zip”显然包含了实现MDB的源代码示例,非常适合学习和理解如何在实际应用中使用MDB来处理异步通信。 Message-Driven Bean是一种特殊的session bean...
Java Message-Driven Bean(MDB)是企业级Java(EJB)技术的一部分,它主要用于处理Java消息服务(JMS)中的消息。在Java EE环境中,MDBs是无状态的bean,它们作为后台服务运行,监听消息队列或主题,并对到来的消息...
- 使用`@MessageDriven`注解来声明bean是一个MDB,并指定JMS配置,如目的地类型(队列或主题)、消息驱动适配器等。 - 可以通过`@ActivationConfigProperty`注解进一步配置MDB的行为,例如设置消息选择器、最大...
"基于Java的实例开发源码-Message-Driven Bean EJB实例源代码.zip" 这个标题揭示了本次讨论的核心内容,即一个关于Java编程的实例项目,特别是涉及了Java企业版(Java EE)中的Message-Driven Bean(MDB)组件。...
Java消息驱动Bean(Message-Driven Bean,MDB)是企业级JavaBeans(Enterprise JavaBeans,EJB)的一个组件类型,主要用于处理JMS(Java Message Service)消息。本实例源代码提供了关于如何实现和使用MDB的详细示例...
7. **部署**:在EJB 3.1及更高版本中,MDB的部署变得更加简单,可以使用注解(如`@MessageDriven`)来代替XML配置,进一步简化了开发过程。 在这个源代码实例中,你可能会看到以下几个关键部分: 1. **MDB类**:...
### Message-Driven Bean (MDB) 培训知识点解析 #### 一、Java消息服务(JMS) **1.1 Java消息服务概念** Java消息服务(Java Message Service,简称JMS)是一种面向消息中间件的标准API,它使得Java应用程序能够...
**消息驱动Bean(Message-Driven Bean,MDB)是Java企业版(Enterprise JavaBeans,EJB)规范中的一个重要组件,主要用于处理消息队列中的消息。在Java应用中,MDB扮演着异步服务的角色,它可以接收并处理JMS(Java ...
Sage: Practical & Scalable ML-Driven Performance Debugging inIthaca, New York, U
在Spring MVC框架中,`mvc:annotation-driven`和`mvc:message-converters`是两个非常重要的元素,它们在处理基于注解的控制器和数据转换方面起着关键作用。本篇文章将深入探讨这两个组件的工作原理以及如何在实际...
### EJB3.0开发Message Driven Bean #### 一、概述 Enterprise JavaBeans (EJB) 是一种基于Java的应用程序编程接口(API),用于开发分布式企业级应用。EJB3.0作为Java EE5规范的一部分,引入了许多简化开发的新特性...
Spring 的 Annotation-Driven 配置事务管理器详解(多数据源配置) Spring 框架提供了强大的事务管理机制,通过使用 Annotation-Driven 配置,可以方便地管理事务。在多数据源配置中,spring 的 Annotation-Driven...
免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,...
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 ...