J2EE的异步消息机制(下)

三.消息驱动豆简介

异步消息也可以由消息驱动豆来实现。在EJB 1.1规范中,定义了两种类型的EJB。分别是实体豆(Entity Bean)和会话豆(Session Bean)。客户端通常是以同步的,阻塞方式来调用豆的方法。消息驱动豆将EJB和JMS的功能结合在一起。

正如前述,会话豆通常实现商务逻辑,客户端不能共享一个会话豆。实体豆通常和一些在永久存储中的一些实体条目相对应的。这两种豆通常都有REMOTE和HOME接口,用来与客户端交互。并且,这些交互都是同步的,阻塞方式进行的。比如,一个请求发送给一个豆,通过阻塞式方法调用,服务器返回一个相应。调用者在收到返回后,才能进行下一步处理。消息驱动豆通常配置成是一个特别的主题(topic)或队列的客户端,作为消息的使用者。但消息驱动豆没有HOME和REMOTE接口。一个消息产生者将消息写入TOPIC或队列时,并不知道使用者是一个消息驱动豆。这就允许集成一个分布式的计算系统时,有很大的灵活性。消息驱动豆没有会话性质的状态,所有的实例在不处理请求时是相同的,这与无状态会话豆是类似的。将豆的实例放在缓冲池里,也是高效处理消息驱动豆的一种方法。一个消息驱动豆必须间接或直接地从javax.ejb.MessageDrivenBean接口继承而来。这个接口是由javax.jms.MessageListener继承而来。这个方法的一个参数是javax.jms.Message。可以是任何有效的JMS消息类型。方法的申明中并不包含一个thrown语句。因此在消息处理中,不会仍出应用程序异常。当容器接收到消息时,它首先是从一个缓冲池里得到现成的一个消息驱动豆,然后,如果配置文件需要的,容器还要设置一个和事务处理上下文的一个联系。当这些管理任务完成时,接收到的消息传递给onMessage()方法。一旦方法完成,事务确认或返回,豆又被重新放回到缓冲池。

ejbRemove()在把消息驱动豆从任何存储上删除时调用。并进行清楚操作和垃圾收集。必须在ejbRemove()方法中释放所有豆的实例用到的资源。

setMessageDrivenConnection()方法只有一个参数-javax.ejb.MessageDrivenContext的实例。MessageDrivenContext类与在实体和会话豆中的上下文类似。当一个豆的实例创建时,容器传入豆用的上下文。上下文中得到环境信息的方法,以及JTA UserTranscation类,用于豆管理事务处理的场合。

另外,豆提供者必须提供一个ejbCreate()方法(无参数),用于在EJB服务器对豆进行设置。豆实例可以在ejbCreate()方法中取得任何需要的资源。

消息驱动豆大大地简化了创建一个JMS使用者,创建和配置一个JMS消息使用者这些功能都交由EJB容器来做了。开发人员只需简单地实现消息驱动豆的接口,配置给EJB服务器,用来创建一个接收消息的商业逻辑部件。

四.一个实例

本文为了说明上面的概念,编写了一个消息驱动豆,一个Publisher和一个Subscriber的代码。

下面讲一下怎样运行实例。这里假设读者已经从SUN主页上下载了J2EE SDK 1.3 Bate,并已经安装好了。

1.创建一个WeatherReport

主题(Topic):

j2eeadmin -addJmsDestination WeatherReport topic

可以用下面命令看一下是否正确创建:

D:\j2sdkee1.3\bin>j2eeadmin -listJmsDestination JmsDestination

一般显示结果如下:

< JMS Destination : jms/Topic , javax.jms.Topic >
< JMS Destination : jms/Queue , javax.jms.Queue >
< JMS Destination : WeatherReport , javax.jms.Topic >

时间: 2024-12-24 20:20:41

J2EE的异步消息机制(下)的相关文章

J2EE的异步消息机制(上)

在分布式企业级应用程序中,异步消息机制用于有效地协调各个部分的工作. J2EE为我们提供了JMS和消息驱动豆(Message-Driven Bean),用来实现应用程序各个部件之间的异步消息传递. 一.什么是消息系统? 通常一个消息系统允许分开的未耦合的应用程序之间可靠地异步通信.在企业应用时,需要一种异步的,非阻塞的消息传递.比如,一个客户端可能希望给一个服务器发送一个请求后,不在乎是否马上能得到回应.这样,客户端没有理由必须等待服务器处理请求.客户端应用程序在递交一个请求之后,只需确保请求到

Handler详解系列(一)——Handler异步消息机制详解(附图)

MainActivity如下: package cc.cn; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.util.Log; import android.app.Activity; /** * Demo描述: * Android异步消息机制分析(附图) * * ===================

异步消息的传递-回调机制

软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用.回调和异步调用.同步调用是一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用:回调是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口:异步调用是一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即调用客户方的接口).回调和异步调用的关系非常紧密,通常我们使用回调来实现异步消息的注册,通过异步调用来实现消息的通知.同步调用是三

objective-c下的消息机制

l   消息机制:   Objective-c下调用函数并不是采用的想C语言中的函数调用机制而是使用的一种消息传递的机制.下文将讨论这两种协议之间的区别.   传统的函数调用机制是在程序编译的阶段就已经将子函数的引用地址编译进了执行代码,所以当编译完成之后,函数名指向的就是函数的入口地址,而调用函数将直接导向至函数的入口地址,从而直接开始执行函数.   而Objective-c采用的是一种消息传递机制,即以消息的形式将要执行的函数传递给对应的对象,此时对象在自己的方法列表中查找对应的函数,如果找

iOS开发系列--通知与消息机制

概述 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户感兴趣的那么通过通知机制就可以告诉用户此时发生的事情.iOS中通知机制又叫消息机制,其包括两类:一类是本地通知:另一类是推送通知,也叫远程通知.两种通知在iOS中的表现一致,可以通过横幅或者弹出提醒两种形式告诉用户,并且点击通知可以会打开应用程序,但是实现原理却完全不同.今天就和大家一块去看一下如何在iOS中实现这两种机制,并且在文章后面会补充通知中心的内容避免初学者对两种概念的混淆. 本地通知 推送通

PgSQL · 应用案例 · 流式计算与异步消息在阿里实时订单监测中的应用

背景 在很多业务系统中,为了定位问题.运营需要.分析需要或者其他需求,会在业务中设置埋点,记录用户的行为在业务系统中产生的日志,也叫FEED日志. 比如订单系统.在业务系统中环环相扣,从购物车.下单.付款.发货,收货(还有纠纷.退款等等),一笔订单通常会产生若干相关联的记录. 每个环节产生的属性可能是不一样的,有可能有新的属性产生,也有可能变更已有的属性值. 为了便于分析,通常有必要将订单在整个过程中产生的若干记录(若干属性),合并成一条记录(订单大宽表). 通常业务系统会将实时产生的订单FEE

PostgreSQL 异步消息实践 - 亿级/分钟 FEED系统实时监测

标签 PostgreSQL , 异步消息 , 触发器 , 规则 , insert on conflict , 实时分析 背景 在很多业务系统中,为了定位问题.运营需要.分析需要或者其他需求,会在业务中设置埋点,记录用户的行为在业务系统中产生的日志,也叫FEED日志. 比如订单系统.在业务系统中环环相扣,从购物车.下单.付款.发货,收货(还有纠纷.退款等等),一笔订单通常会产生若干相关联的记录. 每个环节产生的属性可能是不一样的,有可能有新的属性产生,也有可能变更已有的属性值. 为了便于分析,通常

Android多线程----异步消息处理机制之Handler详解

[正文] 虽然是国庆佳节,但也不能停止学习的脚步,我选择在教研室为祖国母亲默默地庆生. 关于Android的多线程知识,请参考本人之前的一篇博客:Android 多线程----AsyncTask异步任务详解 在Android当中,提供了异步消息处理机制的两种方式来解决线程之间的通信问题,一种是今天要讲的Handler的机制,还有一种就是之前讲过的 AsyncTask 机制. 一.handler的引入: 我们都知道,Android UI是线程不安全的,如果在子线程中尝试进行UI操作,程序就有可能会

《深入解析Android 5.0系统》——第6章,第6.4节Android的消息机制

6.4 Android的消息机制 深入解析Android 5.0系统 消息驱动是一种进程或线程的运行模式.内部.外部的各种事件都可以放到消息队列中按序处理.这种模式特别适合处理大量的交互事件.Android应用的UI线程,同样采用了消息驱动模式,所有外部来的按键消息.触屏消息.各种系统Intent.广播等都会转化为内部的消息,然后在主线程中分发处理. 6.4.1 消息模型 现在的操作系统普遍采用消息驱动模式.Windows操作系统就是典型的消息驱动类型.但是,Android的消息处理机制和Win