J2EE学习笔记八:消息驱动bean

EJB学习笔记——JMS消息驱动Bean JMS消息驱动Bean1.java消息服务(JMS)编程:应用程序A发送一条消息到消息服务器的某个目的地,然后消息服务器把消息转发给应用程序B,由于JMS允许消息发送方和接收方不同时在线,没有代码关联,从而实现应用程序的解耦,JMS的过程如下:应用程序A——>消息——>JMS消息服务器——>消息——>应用程序B2.JMS消息的传递模型:JMS支持两种消息传递模型:点对点(PTP)、发布订阅(pub/sub)。(1).PTP:一条消息只能传递给一个接收方,采用javax.jms.Queue表示。每个消息被发 阅读详情

消息驱动bean的主要用于接受和处理异步消息,这些信息可能来自一个外部的系统或者同一个应用中的其它组件,之所以称它们为异步,那时因为这些消息可以在任何时候到达,而不同于一般的远程方法调用的结果,是立马直接得到的。同UI的事件处理工作方式类似,消息驱动bean用于监听发送给它的异步消息。值得注意的是,与远程调用方法不同,异步消息的发送者不会停下来去等待对方的响应。

消息驱动beanJ2EE中的一个标准服务(工具),全称是Java Message Service API,简称为JMSJava Message Service API是一个Java API,位于javax.jms包中,它为所有需要消息系统服务的应用提供了一个接口。消息系统能够异步的发送和接受消息,这些消息可以是文本、对象或者其它的一些类型。这与远程过程调用(RPC)模型是相反的,在远程过程调用中,组件之间的交互都是同步发生的。任何一个符合JMS API规范的消息系统的实现都可以称做是一个JMS提供者(JMS Provider)。在J2EE SDK中自带有这个的一个JMS Provider,书中的例子也是使用的这个JMS Provider,各个供应商也有自己的商业实现用于在企业级应用中使用消费服务。书中给出的JMS例子的上下文可以用下图来表示:

在上图中,TimeIt是一个会话bean,它的主要作用就是向MessageWriter这个消息驱动bean发送异步消息,TimeItMessageWriter这两个企业bean可以称之为JMS Clients,因为它们都是底层消息系统的客户端。消息系统通过提供一个目的地(destination)存放消息直至这些消息被发送至接收方(recipient)来实现异步通信。上图中间的LogWriterQueue就是一个这样的目的地,它保存了所有来自TimeIt会话bean的消息,这些消息都将发往MessageWriter消息驱动bean。在JMS中有两种类型的目的地(destination)

队列(Queue),用于保存从一个JMS客户端发往另一个JMS客户端的消息,这种消息模型被称为点对点(point-to-point)

主题(Topic),用于保存从许多潜在的JMS客户端发往多个潜在的JMS客户端的消息,这种消息模型被称为发布/订阅(publish/subscribe)模式;

书中的例子所使用是的Queue类型的目的地。在上图中还有两个“角色”:JMS消息制造者和JMS消息消费者,它们是JMS提供者里面代表JMS客户端去发送和接收消息的类。当我们使用消息驱动bean时,不必自己去创建一个JMS消息消费者,因为EJB容器会替我们做这些事情,但是JMS消息制造者就需要我们自己去创建了,我们需要创建一个JMS消息制造者向目的地(可能是Queue也可能是Topic,书中例子是Queue,即上图中的LogWriterQueue)发送消息。为了实现这个功能,我们需要两个管理对象(administered object),它们通常是由JMS提供者所带的管理工具所管理的,这两个管理对象分别是:

     连接工厂(connection factory),用于创建一个到JMS提供者的连接

     目的地(destination),可以是javax.jsm.Queuejavax.jsm.Topic类型

一个典型的发送消息的过程如下所示:

//第一步,得到连接工厂,书中例子因为使用的Queue类型目的地,所示这里使用的 

 QueueConnectionFactory,其中XXXXX是部署时所设置的jndi

    InitialContext jndiContext = new InitialContext();

    QueueConnectionFactory queueConnectionFactory =

                     (QueueConnectionFactory) jndiContext.lookup(“XXXX”)

//第二步,得到目的地,书中例子使用的QueueXXXXX也是部署时设置的JNDI

Queue queue = (Queue) jndiContext.lookup("XXXXX");

//第三步,从连接工厂中获得一个连接

queueConnection =queueConnectionFactory.createQueueConnection();

//第四步,创建一个会话

QueueSession queueSession =

        queueConnection.createQueueSession(false,

        Session.AUTO_ACKNOWLEDGE);

//第五步,为当前会话创建一个发往Queue的发送者

QueueSender queueSender = queueSession.createSender(queue);

//第六步,创建一个消息

TextMessage message = queueSession.createTextMessage();

SimpleDateFormat sdf =new SimpleDateFormat("yyyy.MM.dd 'at' HH:mm:ss.SSS");

message.setText("log entry, the time is: " + sdf.format(new Date()));

//第七步,发送消息

queueSender.send(message);

//第八步,关闭连接

queueConnection.close();

在消息驱动bean中处理收到异步消息后所执行的动作,一个消息驱动bean必须继承两个接口,它们是:

     MessageDirvenBean:包含了消息驱动bean的生命周期方法

     MessageListener:包含onMessage()方法,当有一条消息到达消息驱动bean时这个方法会被调用。

 
OpenFaas快速入门:5分钟在Linux主机上部署无服务器函数(含网络问题解决方案) 本文详细介绍了如何在Linux主机上快速部署OpenFaaS无服务器函数平台,重点讲解了其轻量级组件faasd的5分钟安装流程,并提供了解决容器镜像拉取失败等常见网络问题的实用方案。通过实战示例,帮助开发者快速构建和部署首个函数,实现私有化、可控的无服务器应用。 阅读详情

相关推荐

消息驱动bean学习

消息驱动bean学习消息驱动bean学习消息驱动bean学习消息驱动bean学习

消息驱动Bean

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

weixin_34378767的博客 275

消息驱动Bean(Message Driven Bean

消息驱动Bean(MDB) 是设计用来专门处理基于消息请求的组件。一个MDB类必须实现MessageListener 接口。当容器检测到bean守候的队列一条消息时,就调用onMessage()方法,将消息作为参数传入。MDB在OnMessage()中决定如何处理该消息。你可以用注释来配置MDB 监听哪一条队列。当MDB 部署时,容器将会用到其中的注释信息。

【EJB】消息驱动Bean(MDB)

消息驱动bean(MDB)是允许Java EE应用程序异步处理消息的企业bean。MDB可以实现任何类型的消息。最常用的处理Java消息服务(JMS)消息。这些Bean是无状态的,当JMS消息到达目的地时由容器调用。会话Bean可以同步接收JMS消息,但消息驱动Bean可以异步接收消息。

张姐姐聊编程 813

消息驱动bean

消息驱动bean是处理通过jms传递的消息的异步消息消费者。虽然MDB负责处理消息,但是由运行MDB的EJB容器负责处理服务(事务,安全,资源,并发,消息确认等),使bean开发者把精力集中在处理消息的业务逻辑上。MDB在本质上是无状态的,也就是说EJB容器可以执行大量的MDB实例,并发地处理各个应用程序或者JMS生产者而来的数百个JMS消息,并且还支持服务器质量。   MDB特点   ...

endlesslin的专栏 214

(j2ee)消息驱动bean

消息驱动bean的主要用于接受和处理异步消息,这些信息可能来自一个外部的系统或者同一个应用中的其它组件,之所以称它们为异步,那时因为这些消息可以在任何时候到达,而不同于一般的远程方法调用的结果,是立马直接得到的。同UI的事件处理工作方式类似,消息驱动bean用于监听发送给它的异步消息。值得注意...

chiyingliao3565的博客 237

J2EE的体系架构——J2EE

https://blog.csdn.net/dandanzmc/article/details/27355565 J2EE的体系架构 J2EEJava2平台企业版(Java 2 Platform,Enterprise Edition),它的核心是一组技术规范与指南,提供基于组件的方式来设计、开发、组装和部署企业应用。J2EE使用多层分布式的应用模型。 J2EE分层 客户层,运行在客户计算机...

try to do 1万+

消息驱动bean(MDB)实例

到目前为止前面介绍的有关JavaEE的东西都是同步的,也就是说调用者调用某个方法,那么这个方法必须立即执行并返回执行结果。用官方一些的语言来说就是“客户端通过业务接口调用一个方法,在将控制权返回给客户端之前,服务器完成该方法调用”。对于我们接触到的大多数操作而言这是最自然也是最容易实现的方法。然而,有些情况下客户端并不需要等待服务器响应,而只需要告诉服务器应该做什么就可以了,在完成“告知”任务之后

郗晓勇|利己者生,利人者恒 4225

EJB 3.0中会话Bean,实体Bean,消息驱动Bean的作用和例子

关键词:EJB 3.0,会话Bean,实体Bean,消息驱动Bean EJB 3.0规范使开发EJB比过去更容易,可能诱惑你考虑开发第一个EJB。如果真是这种情况,那么祝贺你,你已经成功避免了在你以前EJB开发者的很多挫折,并且享受到EJB 3.0开发的便利性。但是你开始开发以前,你可能想知道EJB是什么和它们用于什么目的。本篇文章解释了EJB的基础和你如何在一个J2EE程序中使用它们。

xyjikl 790

J2EE核心之EJB

EJB作为EJB是sun的JavaEE服务器端组件模型,设计目标与核心应用是部署分布式应用程序。简单来说就是把已经编写好的程序(即:类)打包放在服务器上执行。凭借java跨平台的优势,用EJB技术部署的分布式系统可以不限于特定的平台。EJB (Enterprise JavaBean)是J2EE(javaEE)的一部分,定义了一个用于开发基于组件的企业多重应用程序的标准。  目前主要是用的是EJB3

邵鸿鑫 5135

J2EE基础之EJB全面了解

当有状态会话Bean处于活动状态一段时间后,如果仍然没有收到外部客户端的请求,为了节省系统资源,容器会把有状态会话Bean中的状态信息序列化到临时存储空间,并把有状态会话Bean从内存中移除,这个过程称为“钝化”。

yeyinganny的博客 5021

EJB 实体bean,会话bean,和消息驱动bean

http://javapub.iteye.com/blog/751459 EJB 3.0规范使开发EJB比过去更容易,可能诱惑你考虑开发第一个EJB。如果真是这种情况,那么祝贺你,你已经成功避免了在你以前EJB开发者的很多挫折,并且享受到EJB 3.0开发的便利性。但是你开始开发以前,你可能想知道EJB是什么和它们用于什么目的。本篇文章解释了EJB的基础和你如何在一个J2EE程序中使

xianymo的专栏 2725

j2EE 实体Bean笔记

 1 简介 .Enterprise Beans 是实现Enterprise JavaBeans(EJB)技术的J2EE的组成部分,它运行于EJB容器中。EJB是一个J2EE服务器的运行时环境(Runtime environment)。虽然EJB容器对于企业级应用开发者来说是透明的,但是它提供了系统层的服务,比如Enterprise Beans的事务处理。这些J2EE核心事务应用服务能让你很

dilin627的专栏 749

【EJB学习笔记】——JMS消息驱动Bean

认识消息驱动Bean之前,先了解一下JMSJMS  JMSJava Message Service):java消息服务,客户端与服务端之间可以通过JSM服务进行消息的异步传输(消息的发送和消息的接收不是同时进行的,即发送了消息后,不需要等待消息的返回就可以继续执行),客户端只管发送,不需要考虑服务端什么时候处理。因此,如果客户端与服务端对消息发送和接收对时间相关不是很严格的话,用JMS可以很大

点滴汇聚,智在积累。——Danny 1838

EJB学习(三)—消息驱动Bean

消息驱动Bean: 概念: 消息驱动bean是一种通过消息方式为外界提供服务的组件。 作用: 方法调用(不论本地还是远程)都是同步的,调用者要一直等待,直到服务器返回。 消息驱动Bean则在客户(消息发送者)和服务器(消息接收者)之前提供了一种异常通信。 mdb和它的使用者之间是一种松散耦合的关系:由于mdb组件在使用的过程中,其客户并不拥有mdb组件的远程引用,而是直接将消息发送到特

alvin的博客 587
上一篇: J2EE学习笔记七:EJB查询语言(EJB Query Language)
下一篇: Beginning J2EE 1.4 From Novice to Professional读后感
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值