EJB3.0 消息驱动:MDB(Message Driven Bean)

42、消息驱动 Bean 全面解析与实践 本文深入解析了消息驱动 Bean(MDB)的核心概念、设计模型及实际应用。内容涵盖消息驱动 Bean 的基本原理、点对点与发布/订阅两种消息模型、编写和部署 MDB 的步骤、测试方法以及使用 JBuilder 构建 MDB 的实践技巧。通过实际案例,展示了 MDB 在企业级异步消息处理中的强大功能和灵活性,是开发者构建基于消息驱动架构应用的实用指南。 阅读详情
 

Java消息服务(JMS Java Message Services)提供了点对点模式(Point-to-Point Queue)和发布-订阅模式(Publish-Subscribe Topics).

Queue仅允许一个消息传送给一个客户(一对一):
消息的接收者和发送者之间不存在时间上的依赖关系。不论发送者发送消息时接收者是否在运行,接收者都可以提取信息。接收者对于成功处理的消息给出回执。

Topics可以有多个客户端(一对多,多对多):
向某个话题订阅的客户程序只能收到那些在它订阅之后发布的消息。为了接收到消息,订阅者必须保持活动状态。因此,发布者和订阅者之间存在时间上的依赖关系。

点对点消息模式通过一个消息队列(Queue)实现,消息的生产者向队列写入消息,消息的订阅者从队列提取消息。发布-订阅消息模式通过一个话题(Topic)节点构成的层次结构实现,消息的生产者向这个层次结构发布消息,消息的订阅者向这个结构订阅消息。

消息驱动的Bean只有一个Bean类。从某些方面看,消息驱动的Bean类似于无状态会话Bean:消息驱动的Bean不为特定的客户保留数据或对话状态。

@MessageDriven(activationConfig={
  @ActivationConfigProperty(propertyName="destinationType",propertyValue="javax.jms.Queue"),
  @ActivationConfigProperty(propertyName="destination",propertyValue="queue/Msg")
})
 
@MessageDriven注释指明这是一个消息驱动Bean,并使用@ActivationConfigProperty注释配置消息的各种属性,其中destinationType属性指定消息的类型,消息有两种类型topics 和queues,下面是这两种消息类型的介绍:
Topics 可以有多个客户端。用topic发布允许一对多,或多对多通讯通道。消息的产生者被叫做publisher, 消息接
受者叫做subscriber。destinationType属性对应值:javax.jms.Topic

Queue 仅仅允许一个消息传送给一个客户。一个发送者将消息放入消息队列,接受者从队列中抽取并得到消息,消息就会在队列中消失。第一个接受者抽取并得到消息后,其他人就不能再得到它。destinationType属性对应值:javax.jms.Queue
destination属性用作指定消息路径,消息驱动Bean在发布时,如果路径不存在,容器会自动创建该路径,当容器关闭时该路径会自动被删除

当一个消息到达queue/Msg队列时,就会触发onMessage方法,消息作为一个参数传入.


 

package ejb;

import javax.jms.Message;
import javax.jms.MessageListener;
import javax.ejb.MessageDriven;
import javax.jms.TextMessage;
import javax.jms.JMSException;
import javax.ejb.ActivationConfigProperty;

@MessageDriven(activationConfig={
  @ActivationConfigProperty(propertyName="destinationType",propertyValue="javax.jms.Queue"),
  @ActivationConfigProperty(propertyName="destination",propertyValue="queue/Msg")
})

public class Msg implements MessageListener {

 public void onMessage(Message msg) {
  // TODO Auto-generated method stub
  TextMessage tmsg = (TextMessage) msg;
  try{
   System.out.println(tmsg.getText());
  }catch(JMSException e){
   e.printStackTrace();
  }
 }

}

 

package test;

import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.JMSException;
import javax.jms.QueueSession;
import javax.jms.Queue;
import javax.jms.TextMessage;
import javax.jms.QueueSender;
import javax.naming.*;

public class MsgTest {
 public static void main(String[] args){
  QueueConnection conn;
  QueueSession ssn;
  Queue queue;
  QueueSender sender;
  TextMessage msg;
  try{
   InitialContext ctx = new InitialContext();
   QueueConnectionFactory qcf =(QueueConnectionFactory) ctx.lookup("ConnectionFactory");
   conn = qcf.createQueueConnection();
   ssn = conn.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);
   queue =(Queue) ctx.lookup("queue/Msg");
   msg = ssn.createTextMessage("HELLO WORLD!");
   sender = ssn.createSender(queue);
   sender.send(msg);
   sender.close();
  }catch(NamingException e){
   e.printStackTrace();
  }catch(JMSException e1){
   e1.printStackTrace();
  }
 }
}


(1) 得到一个JNDI初始化上下文(Context);
例子对应代码:
Properties props = new Properties();
props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
props.setProperty("java.naming.provider.url", "localhost:1099");
props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming");
InitialContext ctx = new InitialContext(props);

(2) 根据上下文来查找一个连接工厂TopicConnectFactory/ QueueConnectionFactory (有两种连接工厂,根据是topic/queue来使用相应的类型);
例子对应代码:
QueueConnectionFactory qcf =(QueueConnectionFactory) ctx.lookup("ConnectionFactory");

(3) 从连接工厂得到一个连接(Connect 有两种[TopicConnection/ QueueConnection]);
例子对应代码:conn = qcf.createQueueConnection();

(4) 通过连接来建立一个会话(Session);
例子对应代码:ssn = conn.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);
这句代码意思是:建立不需要事务的并且能自动接收消息收条的会话,在非事务Session 中,消息传递的方式有三种:
Session.AUTO_ACKNOWLEDGE :当客户机调用的receive方法成功返回,或当MessageListenser 成功处理了消息,session将会自动接收消息的收条。

Session.CLIENT_ACKNOWLEDGE :客户机通过调用消息的acknowledge方法来接收消息。接收发生在session层。接收到一个被消费的消息时,将自动接收该session已经消费的所有消息。例如:如果消息的消费者消费了10条消息,然后接收15 个被传递的消息,则前面的10 个消息的收据都会在这15 个消息中被接收。

Session.DUPS_ACKNOWLEDGE :指示session缓慢接收消息。

(5) 查找目的地(Topic/ Queue);
例子对应代码:queue =(Queue) ctx.lookup("queue/Msg");

(6) 根据会话以及目的地来建立消息制造者(TopicPublisher/QueueSender)和消费者(TopicSubscriber/QueueReceiver).
例子对应代码:
msg = ssn.createTextMessage("HELLO WORLD!");
sender = ssn.createSender(queue);
sender.send(msg);

在 AS ABAP 7.40 SP05 里把 HANA 存储过程纳入 ABAP 生命周期:AMDP 实战示例与踩坑笔记 文章摘要:AMDP(ABAP Managed Database Procedures)是SAP推出的框架,用于在ABAP中管理数据库端的存储过程或函数,特别适用于HANA数据库。它通过将数据库语言(如SQLScript)嵌入ABAP方法,实现数据处理逻辑的"下推"(code pushdown),减少应用层与数据库间的数据传输。AMDP适用于需要数据库特有能力或大规模数据处理的场景,但应优先考虑Open SQL或ABAP CDS等更简单的方案。开发时需注意数据库类型检查、参数前缀(:)等语 阅读详情

相关推荐

手把手教你设计热电偶信号采集电路:从运放选型到ADC配置全流程

本文详细解析了热电偶信号采集电路的设计全流程,重点涵盖从高精度运放选型、差分放大电路设计到ADC配置与软件处理的工程实践。针对热电偶输出的微弱毫伏级差分信号,文章深入探讨了如何克服噪声、实现冷端补偿,并提供了具体的器件选型建议与电路调试技巧,旨在帮助工程师构建稳定可靠的高精度温度测量系统。

weixin_29169899的博客 419

java jms_Java消息服务JMS详解

@MessageDriven(activationConfig={@ActivationConfigProperty(propertyName="destinationType",propertyValue="javax.jms.Queue"),@ActivationConfigProperty(propertyName="destination",propertyValue="queue/jms...

weixin_33721696的博客 428

第二章 HART硬件设计实战 — 基于SD2057的低功耗调制解调器电路详解与选型指南

本文详细解析了基于SD2057芯片的HART协议低功耗调制解调器硬件设计。通过对比分析,阐述了SD2057在成本与性能上的优势,并重点拆解了其核心电路、外围元件选型、原理图绘制要点及PCB布局的实战技巧,为工业现场仪表的智能通信模块开发提供了完整的低功耗解决方案。

gan8painter的博客 422

消息驱动Bean(Message Driven Bean)

定义:消息驱动是专门用来处理基于消息请求的组件。 消息模型:点对点消息传递和发布/订阅消息传递 点对点消息传递模型:一条信息只能传递给一个队列接收方 发布/订阅消息传递:一条消息可以由多个接收者接收 详细解析:首先它是无状态的Session Bean,客户端调用MDB时,无需等待,可以立即返回,MDB会异步处理客户的请求;MDB必须实现MessageListener接口,当容器守候检测到一...

weixin_30709809的博客 633

基于IDEA与Mill构建Windows下的Chisel开发环境——香山处理器源码解析实战

本文详细指导如何在Windows系统下使用IDEA集成开发环境和Mill构建工具搭建Chisel开发环境,并以香山处理器源码为实战案例进行解析。内容涵盖环境准备、源码获取、工程构建、IDEA配置优化及代码阅读技巧,帮助开发者高效学习硬件设计语言。

a1b2c3d的博客 717

单片机通信总述——理论部分(CAN、串口、SPI、I2C等)

并行通信:传输原理:数据各个位同时传输;优点:速度快; 缺点:占用引脚资源多。是指使用 8、16、32 及 64 根或更多的数据线(有多少信号为就需要多少信号位)进行传输的通讯方式,可以同一时刻传输多个数据位的数据。串行通信: 传输原理:数据按位顺序传输;优点:占用引脚资源少; 缺点:速度相对较慢。是指设备之间通过一根数据信号线,地线以及控制信号线,按数据位形式一位一位地传输数据的通讯方式,同一时刻只能传输一位(bit)数据。 单工: 数据传输只支持数据在一个方向上传输。信息只能单方向传输的工作方式,一

qq_42475191的博客 1万+

【EJB基础】Message Driven Bean

MessageDriven Bean是EJB2.0中引入的新的企业Bean,它基于JMS消息,只能接收客户端发送的JMS消息然后处理。对客户端来说,message-driven bean就是异步消息的消费者,当消息到达之后,由容器负责调用MDB。客户端发送消息到destination,MDB作为一个MessageListener接收消息。   JMS支持两种消息模型:Point-to-Po

IT Girl 962

从零到一:移远EC200UCN_LA OpenCPU开发中的‘避坑’实战指南

本文详细介绍了移远EC200UCN_LA 4G通信模块的OpenCPU开发实战指南,涵盖开发环境搭建、项目构建、通信接口开发、调试技巧及固件升级等关键环节。通过避坑经验和实用技巧,帮助开发者高效完成二次开发,提升4G通信模块的应用开发效率。

weixin_29159711的博客 505

JMS与Message-Driven Bean使用总结

1、JMS是一个由AS提供的Message服务。它能接受消息产生者(Message Provider)所发出的消息,并把消息转发给消息消费者(Message  Consumer)。2、JMS提供2种类型的消息服务:(1)Queue,即点对点,每个消息只转发给一个消息消费者使用。(2)Topic,即发布和订阅,每个消息可以转发给所有的订阅者(消费者)。3、WEBLOGIC 8下的JMS配置:(1)配

pbMaster的专栏 2846

使用 SAP 自家的 AI 工具 Joule 辅助 SAP Fiori 应用开发

SAP Joule 不请自答,解释说标记了接口的 UI Component,具备进行异步内容创建的能力,比如其通过 rootView 分配的视图,在运行时可以异步创建。目前 SAP Business Application Studio 里的 SAP Joule 支持下面这八种上下文,绝大部分都和 SAP UI5 开发相关,剩下的则是代码仓库和 SAP 帮助文档的搜索。SAP Joule 回答的大意是:我只负责回答 SAP UI5 开发相关的问题,不要和我扯其他有的没的。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1096

深度解析电力负荷预测:基于深度学习的完整实战指南

电力负荷预测是智能电网运行中的核心技术之一,准确的负荷预测对于电网的稳定运行、电力市场交易以及能源调度具有重要意义。本文将详细介绍电力负荷预测的完整解决方案,从数据预处理、特征工程到模型构建与评估,提供完整的可执行代码。我们将使用LSTM(长短期记忆网络)和Transformer两种主流深度学习模型进行实现,并通过实际数据集验证模型效果。电力负荷预测是指根据历史负荷数据、气象因素、时间特征等多维信息,预测未来某一时段的电力需求。超短期负荷预测:未来几分钟到几小时短期负荷预测:未来1天到1周中期负荷预测。

YOLO 111

EJB3学习笔记_Message-Driven Bean

Why Messageing 1、Asynchrony(异步)A typical RMI-IIOP(Session Bean) client must wait while the server performs its processing2、Decoupling(解耦)An RMI-IIOP client has to know the individual s

escaflone的专栏 5031

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

EJB 3.0的三大类型详解

   无论你创建bean会话是为了执行特定任务,还是把表映射到实体bean以更新数据,都可以使用普通的Java对象和接口来完成这些工作,并且可以通过在业务方法中使用注释,把方法提供给客户端。  Enterprise JavaBean (EJB) 是可重用的、可移植的 J2EE 组件。EJB 由封装业务逻辑的方法组成。譬如说,EJB 可能有这样的业务逻辑:包含了更新数据库中客户数据的方法。众多远

460

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

EJB3.0开发指南:消息驱动Bean

消息驱动Bean的业务接口已经被定义,对于使用JMS来说那就是MessageListener接口,这个接口定义了OnMessage方法。 实现类必须使用MessageDriven注释。可以实现也可以不实现setMessageDrivenContext和ejbRemove方法。 在JBOSS中,通过ConnectionConfig指定消息的队列的JNDI名称。 @Co...

166

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

MDB(message driven bean)收消息

<br />一、简述<br />EJB2.0开始,引进了消息驱动的EJB,简称MDB(message driven bean)。当MOM收到消息时,能够自动传达给这种Bean。跟事件驱动一个道理。注:只是接收驱动。<br />EJB2.1,MDB又得到了加强,能够处理非JMS的消息,如:MailMessage,SMSMessage,SOAPMessage。<br />二、例子<br />见上章提到的源码。<br />(1)MDBQueueBean.java  这是EJB,它不需要其它什么 Home,Remo

一起玩编程 4481

GlassFish V3 集成ActiveMQ+MDB

环境场景: GlassFish 3.1.1 ActiveMQ5.5.0 1.直接安装或解压GlassFish3.1.1. 2.启动GlassFish. 3.在应用中安装 ActiveMq-rar-5.5.0.rar 资源适配包. 4.创建ConnectorPool. 5.创建受管理对像. 6.编写MDB. @MessageDriven(mappedName = "jms/Acti

LuoShunkui的专栏 1341

深入学习EJB3.0之一:概述与搭建环境

<br /><br />    现在做的项目正在使用EJB3,虽然用了有一段时间,但是自己总感觉并不是十分理解其中的许多内容,也并不清楚到底用EJB有什么好处,所以找了一本书(EJB3.0入门经典)进行研读,并根据自己和网上大家的理解准备写一系列详细的学习日志,如有错误,请大家不吝赐教。<br />一、EJB的概述:<br />1.EJB (Enterprise JavaBean)是J2EE的一部分,定义了一个用于开发基于组件的企业多重应用程序的标准。在J2EE里,Enterprise Java Beans

DryKillLogic的专栏 4288

什么是EJB?

前言 在学Spring的时候看到Spring的概念有一段话是这样说的,“Spring是一个分层的一站式轻量级开源框架,使用基本的JavaBean来完成以前只能由EJB完成的工作,取代了EJB的臃肿、低效的开发模式”。那么,有一个问题,到底什么是EJB呢?这篇博客主要带大家了解一下什么是EJB。 到底什么是EJB呢? EJB是什么,规范?容器?EJB包含这些内容,但是EJB不仅仅是这些。EJB(E...

weixin_42146366的博客 816

什么是EJB,EJB技术概览

EJB是sun的服务器端组件模型,最大的用处是部署分布式应用程序,类似微软的.net技术。凭借java跨平台的优势,用EJB技术部署的分布式系统可以不限于特定的平台。EJB (Enterprise JavaBean)是J2EE的一部分,定义了一个用于开发基于组件的企业多重应用程序的标准。其特点包括网络服务支持和核心开发工具(SDK)。在J2EE里,Enterprise Java B

Jason~小杰的学习之家 722

MDB 消息驱动bean开发

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

孙健的专栏 1312

Message Driven Beans Tutorial

Message Driven Beans Tutorial By Pramati 01 Jan 2000 | TheServerSide.com Digg This Stumble Delicious The following tutorial illustrates how a Message Driven Bean is w

Chatopera 1464

EJB3中MessageDrivenBean知识

EJB3.0中MessageDrivenBean: 1.java消息驱动bean属于Java消息服务(Java Message Service,简称JMS)。 2.JMS是用于访问企业消息系统的开发商中心的API。企业消息系统可以协助应用软件通过网络进行消息交互。 3.JMS的编程过程简单概括为:应用程序A-->(消息)-->Jboss JMS-->(消息)-->应用程序B。应用...

lufeng4321的专栏 200

jboss下的ejb3中MessageDrivenBean的一个简单案例

     最近在看一本介绍ejb3的新书---《EJB3 in action》, 我觉得还写得可以,如果再结合网上黎活明写的开源文档---《JbossEJB3.0实例教程》一起学习,肯定会达到事半功倍的效果。(这两本书都可以在网上搜到,也可以上得益网下载)。    1.本案例相对简单,但基本用到了ejb3.0的一些基础知识,包括stateless session bean,entity bea

wangke8476的专栏 2890

通过Message-Driven beans来添加并发处理

 作者:wqx 转载:转载请保留本信息,本文来自http://www.matrix.org.cn/resource/article/0/515.html 概要:在使用J2EE框架的应用程序中添加并发处理往往受到一些严格的限制,主要原因有两个:首先EJB的规范限制了在EJB容器中产生新的用户线程, 另外, SessionBean的方法是必须被同步调用的. 但是, 为了保证响应时间,相当多

蓝色的海的专栏 1694

JMS和Message driven bean【转】

这边对初学者理解JMS和MDB比较有帮助。 JMS(Java Message Service)即消息服务。是由sun公司提出,定义java程序访问企业消息传递系统的接口,是J2EE平台上实现面向消息的中间件的规范。面向消息的中间件系统是一种异步通讯系统。非java平台的面向消息的中间件系统也有很多,比较常见的有IBM的MQSeries,Microsoft的MSMQ。 Message dr...

十井 214
上一篇: EJB3.0之(Entity)Bean
下一篇: EJB3.0 定时服务:Timer Service
danning
博客等级 码龄22年 5粉丝 72原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值