本文转载自: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
分享到:
相关推荐
9.8.3. Oracle OC4J 9.9. 常见问题的解决方法 9.9.1. 对一个特定的 DataSource 使用了错误的事务管理器 9.10. 更多的资源 10. DAO支持 10.1. 简介 10.2. 一致的异常层次 10.3. 一致的DAO支持抽象类 11. 使用...
9.8.3. Oracle OC4J 9.9. 常见问题的解决方法 9.9.1. 对一个特定的 DataSource 使用了错误的事务管理器 9.10. 更多的资源 10. DAO支持 10.1. 简介 10.2. 一致的异常层次 10.3. 一致的DAO支持抽象类 11. 使用...
1. **注解驱动编程**:EJB 3.0大量使用注解(如@Stateless、@Stateful、@Singleton、@MessageDriven等),替代了之前的XML配置,简化了部署描述符,使得代码更易于理解和维护。 2. **无容器依赖的实体Bean**:EJB ...
3. **消息驱动Bean(Message-Driven Beans)** - 用于处理JMS(Java Message Service)消息,实现异步通信。 **JPA关键特性:** 1. **对象关系映射(ORM)** - JPA允许开发者用面向对象的方式来操作数据库,减少了...
嵌入式八股文面试题库资料知识宝典-华为的面试试题.zip
训练导控系统设计.pdf
嵌入式八股文面试题库资料知识宝典-网络编程.zip
人脸转正GAN模型的高效压缩.pdf
少儿编程scratch项目源代码文件案例素材-几何冲刺 转瞬即逝.zip
少儿编程scratch项目源代码文件案例素材-鸡蛋.zip
嵌入式系统_USB设备枚举与HID通信_CH559单片机USB主机键盘鼠标复合设备控制_基于CH559单片机的USB主机模式设备枚举与键盘鼠标数据收发系统支持复合设备识别与HID
嵌入式八股文面试题库资料知识宝典-linux常见面试题.zip
面向智慧工地的压力机在线数据的预警应用开发.pdf
基于Unity3D的鱼类运动行为可视化研究.pdf
少儿编程scratch项目源代码文件案例素材-霍格沃茨魔法学校.zip
少儿编程scratch项目源代码文件案例素材-金币冲刺.zip
内容概要:本文深入探讨了HarmonyOS编译构建子系统的作用及其技术细节。作为鸿蒙操作系统背后的关键技术之一,编译构建子系统通过GN和Ninja工具实现了高效的源代码到机器代码的转换,确保了系统的稳定性和性能优化。该系统不仅支持多系统版本构建、芯片厂商定制,还具备强大的调试与维护能力。其高效编译速度、灵活性和可扩展性使其在华为设备和其他智能终端中发挥了重要作用。文章还比较了HarmonyOS编译构建子系统与安卓和iOS编译系统的异同,并展望了其未来的发展趋势和技术演进方向。; 适合人群:对操作系统底层技术感兴趣的开发者、工程师和技术爱好者。; 使用场景及目标:①了解HarmonyOS编译构建子系统的基本概念和工作原理;②掌握其在不同设备上的应用和优化策略;③对比HarmonyOS与安卓、iOS编译系统的差异;④探索其未来发展方向和技术演进路径。; 其他说明:本文详细介绍了HarmonyOS编译构建子系统的架构设计、核心功能和实际应用案例,强调了其在万物互联时代的重要性和潜力。阅读时建议重点关注编译构建子系统的独特优势及其对鸿蒙生态系统的深远影响。
嵌入式八股文面试题库资料知识宝典-奇虎360 2015校园招聘C++研发工程师笔试题.zip
嵌入式八股文面试题库资料知识宝典-腾讯2014校园招聘C语言笔试题(附答案).zip
双种群变异策略改进RWCE算法优化换热网络.pdf