消息驱动Bean(MDB)的开发

开发的基本过程包括:

u 创建EJB工程

u 创建消息驱动Bean

u 创建客户端程序

u 运行测试

2、创建EJB工程

选择【File】à【New Project】,在弹出的界面上选择【Enterprise】à【EJB Module】,在弹出的界面中输入工程的名字“MDBTest”,完成工程的创建。

3、创建消息驱动Bean

在工程上面点击右键,选择【New】à【Message-Driven Bean…】,如下图所示。

<shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 209.25pt; HEIGHT: 168pt" type="#_x0000_t75"><imagedata o:title="创建MDB" src="file:///C:%5CDOCUME~1%5CADMINI~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image001.png"></imagedata></shape>

在弹出的界面上输入消息驱动Bean的名字,并为Bean类指定包。这里包名为“ch<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="20" unitname="”"><font face="Times New Roman">20</font><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><span lang="EN-US">”</span></span></chmetcnv>,类名是“TextMDB”。

创建后的消息驱动Bean的代码如下:

/*

* TextMDB.java

*

* Created on <chsdate w:st="on" isrocdate="False" islunardate="False" day="14" month="5" year="2007"><font face="Times New Roman">2007</font><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><span lang="EN-US">年</span></span><font face="Times New Roman">5</font><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><span lang="EN-US">月</span></span><font face="Times New Roman">14</font><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><span lang="EN-US">日</span></span></chsdate>, 下午7:28

*

* To change this template, choose Tools | Template Manager

* and open the template in the editor.

*/

package ch20;

import javax.ejb.ActivationConfigProperty;

import javax.ejb.MessageDriven;

import javax.jms.Message;

import javax.jms.MessageListener;

/**

* Entity class TextMDB

*

* @author Administrator

*/

@MessageDriven(mappedName = "jms/TextMDB", activationConfig = {

@ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),

@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue")

})

public class TextMDB implements MessageListener {

/** Creates a new instance of TextMDB */

public TextMDB() {

}

public void onMessage(Message message) {

}

}

在类前面的代码:

@MessageDriven(mappedName = "jms/TextMDB", activationConfig = {

@ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),

@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue")

})

声明这个消息驱动Bean使用的目的是“jms/TextMDB”,默认的生成的连接工厂的名字是“jms/TextMDBFactory”。activationConfig声明消息的确认模式和目的的类型(队列)。

在onMessage方法中添加对消息处理的代码,这里假设接收到的消息是TextMessage,接收到消息之后把消息输出到控制台。修改onMessage方法如下:

public void onMessage(Message message) {

TextMessage msg = (TextMessage)message;

try{

System.out.println(msg.getText());

}catch(Exception e){

System.out.println(e.getMessage());

}

}

部署该EJB应用,在该工程上点击右键选择【Deploy project】,完成消息驱动Bean的部署。

4、创建客户端程序

选择【File】à【New Project】,在弹出的界面中选择【Enterprise】à【Enterprise Application Client】,输入客户端工程的名字“mdbClient”。

客户端的代码如下:

/*

* Main.java

*

* Created on <chsdate w:st="on" isrocdate="False" islunardate="False" day="14" month="5" year="2007"><font face="Times New Roman">2007</font><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><span lang="EN-US">年</span></span><font face="Times New Roman">5</font><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><span lang="EN-US">月</span></span><font face="Times New Roman">14</font><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><span lang="EN-US">日</span></span></chsdate>, 下午7:51

*

* To change this template, choose Tools | Template Manager

* and open the template in the editor.

*/

package mdbclient;

import javax.naming.*;

import javax.jms.*;

/**

*

* @author Administrator

*/

public class <place w:st="on">Main</place> {

/** Creates a new instance of <place w:st="on">Main</place> */

public <place w:st="on">Main</place>() {

}

/**

* @param args the command line arguments

*/

public static void main(String[] args) {

try{

// 创建上下文环境

Context ctx = new InitialContext();

// 查找连接工厂

QueueConnectionFactory qConFactory = (QueueConnectionFactory)

ctx.lookup("jms/TextMDBFactory");

// 查找队列

javax.jms.Queue messageQueue = (javax.jms.Queue) ctx.lookup("jms/TextMDB");

// 创建连接

QueueConnection qCon = qConFactory.createQueueConnection();

// 创建会话Bean

QueueSession session = qCon.createQueueSession(

false, /* not a transacted session */

Session.AUTO_ACKNOWLEDGE

);

// 创建消息发送者

QueueSender sender = session.createSender(messageQueue);

// 创建要发送的消息

TextMessage msg = session.createTextMessage();

// 为消息赋值

msg.setText("发送给消息驱动Bean的消息!");

System.out.println("开始发送消息!");

// 发送消息

sender.send(msg);

qCon.close();

System.out.println("消息发送成功!");

}catch(Exception e){

System.out.println(e.getMessage());

}

}

}

注意:这里发送消息的连接工厂和目的应该与消息驱动Bean的相同。

5、运行测试

在客户端程序所在的工程上点击右键选择【Run project】。可以在服务器端的控制台上看到消息驱动Bean的输出信息如下图所示:

<shape id="_x0000_i1026" style="WIDTH: 414.75pt; HEIGHT: 174.75pt" type="#_x0000_t75"><imagedata o:title="运行结果" src="file:///C:%5CDOCUME~1%5CADMINI~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image003.png"></imagedata></shape>

18、企业应用开发:从业务层到持久化层的技术实践 本文探讨了企业应用开发中从业务层到持久化层的技术实践,详细介绍了消息驱动Bean(MDB)的构建、Java消息服务(JMS)的应用,以及持久化层的设计与实现。内容涵盖使用JDBC API、实体Bean和对象-关系框架等多种持久化方式,分析了它们的优缺点和适用场景,并提供了选择流程和最佳实践建议,旨在帮助企业开发者构建高效、稳定的应用系统。 阅读详情

相关推荐

17、Java消息驱动Bean(MDB)与JMS技术详解

本文详细介绍了Java消息驱动Bean(MDB)与JMS技术的核心概念、架构设计、消息传递模型、版本发展以及实际应用。内容涵盖MDB的配置、JMS消息类型、消息确认机制、消息选择器、订阅持久性等关键技术点,并通过实际案例说明如何在企业级应用中使用MDB和JMS实现异步通信。文章还探讨了MDB与JMS的未来发展趋势及与其他消息技术的对比,适合希望深入了解Java异步消息处理机制的开发者阅读。

ff678的博客 132

消息驱动Bean

消息驱动bean是专门用来处理基于消息请求的组件。MDB负责处理消息,而EJB容器则负责处理服务(事务,安全,并发,消息确认等),使Bean的开发者集中精力在处理消息的业务逻辑上。 消息驱动Bean。消息驱动Bean允许J2EE应用程序异步的接收Java消息服务(JMS)的消息。消息驱动Bean包含处理接受到的消息的事务逻辑,主要作用是处理消息。它与其他Bean(实体Bean和会话Bean)的区...

weixin_34378767的博客 276

html2canvas 返回的toDataURL()数据为 data:,的解决方法

html2canvas 返回的toDataURL()数据为 data:,的解决方法 我在使用html2canvas的使用, 发现toDataURL() 返回的数据为data:, 而且将数据设置为img的src属性,图片也不能正常显示,我尝试了很多方法,也没有解决出来,经过我不断的百度+自己尝试,终于解决了这个问题。 代码: 这段代码是没有任何问题的,标准html2canvas的demod代码,但就是无法正常将图片previewImg 渲染出来,dataURL 我打印的结果为 data:, 错误的原因是,

java123_PB的博客 5025

如何使用消息队列进行事件驱动开发

1.背景介绍 事件驱动架构是一种异步处理事件的架构,它使用消息队列来实现事件的传输和处理。在这种架构中,系统的各个组件通过发布和订阅消息的方式来进行通信。这种架构可以提高系统的可扩展性、可靠性和性能。在本文中,我们将讨论如何使用消息队列进行事件驱动开发。 1. 背景介绍 事件驱动架构是一种非常流行的架构模式,它在各种应用中得到了广泛的应用。例如,在微服务架构中,事件驱动架构可以帮助实现系统的...

AI天才研究院 1055

[arcgis插件]在批量出图时,如何把图层属性表以动态表格的形式插入到布局页面

在批量出图时,如何把图层属性表以动态表格的形式插入到布局页面。

坐听风雨 4564

vuecil3+版本下,兼容ie等不支持es6的低版本浏览器

*综上,完成兼容性涉及到的配置的文件有,对应在页面中查看代码,就不单独附代码了:main.js。

yhr0322的博客 835

【Java开发】Spring Cloud 10 :Stream消息驱动

官方定义Spring Cloud Stream 是一个用来为微服务应用构建消息驱动能力的框架。它为一些供应商的消息中间件产品提供了个性化的自动化配置实现,Spirng Cloud Stream 本质上就是整合了 Spring Boot 和 Spring Integration,实现一套轻量级的消息驱动的微服务框架。通过使用 Spring Cloud Stream 可以有效简化开发人员对消息中间件的使用复杂度,让系统开发人员可以有更多的精力关注于核心业务逻辑的处理。

尹煜的博客 3458

ZYNQ平台AXI DMA传输避坑指南:如何快速定位‘errors:200‘等中断故障

本文详细解析了ZYNQ平台AXI DMA传输中常见的'errors:200'等中断故障,提供了从寄存器解析到压力测试的完整解决方案。通过深入分析XILINX_DMA中断机制、错误分类及五步排查法,帮助开发者快速定位并解决DMA传输问题,提升系统稳定性与性能。

weixin_29159613的博客 441

平台治理开发:事件驱动架构与消息驱动

1.背景介绍 事件驱动架构(Event-Driven Architecture,EDA)和消息驱动架构(Message-Driven Architecture,MDA)是两种非常重要的软件架构模式,它们在现代软件系统中发挥着至关重要的作用。事件驱动架构是一种基于事件和事件处理器之间的一对一或一对多关系的架构,其中事件是系统中发生的有意义的变化。消息驱动架构是一种基于消息队列和消费者之间的一对一或...

AI天才研究院 1953

Spring Boot 3.5.4 + LangChain4j实战:用Milvus搭建企业级RAG问答系统(附阿里百炼API配置)

本文详细介绍了如何利用Spring Boot 3.5.4、LangChain4j与Milvus构建企业级RAG问答系统。内容涵盖从架构设计、阿里百炼API安全配置、Milvus部署优化,到RAG检索、会话管理等核心实现,并提供了生产级API设计、监控集成及性能优化等实战经验,旨在帮助开发者打造高可用、可维护的Java AI应用。

weixin_29054399的博客 610

MOSFET雪崩特性参数解析

但是,一些电源在输出短路时,初级中会产生较大的电流,加上初级电感,器件就会有雪崩损坏的可能,因此在这样的应用条件下,就要考虑器件的雪崩能量。对于那些在MOSFET的D和S极产生较大电压的尖峰应用,就要考虑器件的雪崩能量,电压的尖峰所集中的能量主要由电感和电流所决定,因此对于反激的应用,MOSFET关断时会产生较大的电压尖峰。雪崩击穿能量标定了器件可以容忍的瞬时过冲电压的安全值,其依赖于雪崩击穿需要消散的能量。EAS单脉冲雪崩击穿能量, EAS标定了器件可以安全吸收反向雪崩击穿能量的高低。

Airer_00的博客 810

MDB 消息驱动bean开发

MDB用于异步通信,其原理与android中的Intent和IntentFilter类似MDB实际就是个监视特定地点destination的监听器关于消息MDB只关心 消息格式和消息目的JMS异步,安全(确保发送成功且只发送一次消息)JMS像JDBC一样只是一个接口,标准。有P2P和Pub/Sub两种形式消息分为 消息头,消息属性,消息体MDB开发流程。(和MDB通信的唯一

孙健的专栏 1312

在 SAP 系统中,成本中心(Cost Center)是成本核算与费用管控的基础组织单元,其设计质量直接决定了后续成本归集、分摊、分析及责任考核的准确性

SAP系统成本中心设计核心要点:1. 设计原则包括责任可控、业务同质、核算颗粒度适配、组织对齐及稳定性平衡;2. 划分维度主要有部门、功能、地域、项目和资产5类,可组合使用;3. 需避免颗粒度过细、跨责任主体归集等常见误区;4. 建议采用"明确目标-梳理业务-设计编码"三步法,建立科学的成本中心体系。合理的成本中心设计能精准归集费用、明确责任主体,为成本分析和管控奠定基础。

金牌架构师 1443

MDB的配置与开发

这里我的环境是MyEclipse8.0 + WebLogic10.3 + Ubuntu9.10,EJB的开发其实与这三个环境没有关系,我最早也是在WindowsVista + MyEclipse6.0 + WebLogic10.3上开发成功的,关于Weblogic配置JMS服务大家可以去搜一下,有好多,这里主要是在环境都OK的基础上配置开发MDB,首先是我的MDB代码:/** * 测试

IT人生 3021

ThingsBoard 场景联动需求

当初有个兄弟请我帮他实现一个需求,需求如上,很简单,实现完成后我怕他操作不来,又写了这份文档给他,今天把这个文档的场景发出来,大家也可以学习一下思路我把需要模拟设备的指令都总结在下面,连接参数截图讲解如下:温度传感器风扇光照传感器灯。

AldrichEugene 1234

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

JMS和消息驱动Bean(MDB)

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34126215的博客 137

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

myeclipse8+jboss5开发EJB3消息驱动Bean(MDB)实例

先看最后的目录结构:   mdb为EJB3项目;mdbTest为Web项目,add project:     上代码: web项目中的servlet:   mdb.java: import java.io.IOException; import java.io.PrintWriter;import javax.jms.JMSException; import javax.jms.Q

itzyjr的专栏 1837

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

带你走进EJB--MDB

在之前的文章中我们介绍了带你走进EJB--JMS 和 带你走进EJB--JMS编程模型 对JMS有了初步的了解, 作为EJB系列的文章我们会继续对EJB相关的内容做进一步深的学习和了解.而此次需要进行的是MDB.         MDB(Message DrivenBean)消息驱动Bean.它是EJB跟JMS的一个整合,跟SessionBean 一样,MDB是由EJB容器进行管

潛龍,勿用 3961

Jboss下开发ejb应用之一消息驱动bean的应用

Jboss下开发ejb应用之一消息驱动bean的应用,这是一篇紧接着学习会话bean和实体bean之后而写的 JMS(Java Message Service):即Java消息服务,JMS的客户端之间可以通过JMS服务进行异步的消息传输。JMS支持两种消息模型:Point-to-Point(P2P)和Publish/Subscribe(Pub/Sub),即点对点和发布订阅模型。 消息驱...

fruitking 165

消息驱动EJB(一)JMS与EJB

本文以消息之间的通信为起点介绍如下内容: JMS消息系统中的组件分为: JMS消息生产者:发送消息、不连续 JMS消息消费者:接收消息、一直监听消息 同步:易阻塞、效率低、更可靠(可立即获取异常信息) 异步:不易阻塞、效率高、不可靠 【MDB】属于异步消息消费者。简化开发、被看做是一种特殊的控制器。

chestnut 2001
上一篇: 为什么要使用EJB
下一篇: Java持久性API(JPA)第1讲——简单实例
Java_Web_Book
博客等级 码龄18年 8粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值