EJB注释-2(EJB学习笔记之消息驱动)

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

消息驱动Bean的服务器

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

public class MessageBean implements MessageListener ...{

public void onMessage(Message msg) ...{
try ...{
TextMessage tmsg = (TextMessage) msg;
//do your action here
} catch (Exception e)...{
e.printStackTrace();
}
}
}
通过@MessageDriven 注释指明这是一个消息驱动Bean,并使用@ActivationConfigProperty注释配置消息的
各种属性,其中destinationType 属性指定消息的类型,消息有两种类型topics 和queues,下面是这两种消息
类型的介绍:
Topics 可以有多个客户端。用topic 发布允许一对多,或多对多通讯通道。消息的产生者被叫做publisher, 消
息接受者叫做subscriber。destinationType 属性对应值:javax.jms.Topic.
Queue 仅仅允许一个消息传送给一个客户。一个发送者将消息放入消息队列,接受者从队列中抽取并得到消息,消息就会在队列中消失。第一个接受者抽取并得到消息后,其他人就不能再得到它。destinationType属性对应值:javax.jms.Queue
destination属性用作指定消息路径,消息驱动Bean在发布时,如果路径不存在,容器会自动创建该路径,当容
器关闭时该路径会自动被删除。

消息驱动Bean的客户端

QueueConnection cnn = null;
QueueSender sender = null;
QueueSession sess = null;
Queue queue = null;
try ...{
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);
QueueConnectionFactory factory = (QueueConnectionFactory) ctx.lookup("ConnectionFactory");
cnn = factory.createQueueConnection();
sess = cnn.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);
queue = (Queue) ctx.lookup("queue/test");
} catch (Exception e) ...{
out.println(e.getMessage());
}
TextMessage msg = sess.createTextMessage("消息驱动Bean测试");
sender = sess.createSender(queue);
sender.send(msg);
sess.close ();具体步骤
(1) 得到一个JNDI初始化上下文(Context);
(2) 根据上下文来查找一个连接工厂TopicConnectFactory/ QueueConnectionFactory (有两种连接工厂,根据是
topic/queue来使用相应的类型);
(3) 从连接工厂得到一个连接(Connect 有两种[TopicConnection/ QueueConnection]);
(4) 通过连接来建立一个会话(Session);
(5) 查找目的地(Topic/ Queue);
(6) 根据会话以及目的地来建立消息制造者(TopicPublisher/QueueSender)和消费者(TopicSubscriber/QueueReceiver).

参考:EJB3.0实例教程 (作者:黎活明)

时间: 2024-09-16 14:49:17

EJB注释-2(EJB学习笔记之消息驱动)的相关文章

AM335x(TQ335x)学习笔记——GPIO按键驱动移植

还是按照S5PV210的学习顺序来,我们首先解决按键问题.TQ335x有六个用户按键,分别是上.下.左.右.Enter和ESC.开始我想到的是跟学习S5PV210时一样,编写输入子系统驱动解决按键问题,但是浏览driver/input/keyboard目录时意外的发现了gpio-keys.c,大体上看下该驱动程序,其功能是实现了通用的gpio按键.再去看了下DTS,发现DTS中有对gpio-keys的引用,于是猜到,新的内核不需要自己编写输入子系统驱动,可以通过配置DTS直接解决按键问题.本人最

Nodejs学习笔记之测试驱动_node.js

分享第二章,关于测试驱动.这里的测试主要针对Web后端的测试 -- 你为什么要写测试用例(即测试用例的完善是否是浪费时间),如何完善你的测试用例,代码设计如何简化测试用例的书写,以及一些后期的构想. 1. 你为什么要写测试用例 这个习惯通常会被认为是一种耽误开发进度的行为,你需要花费几乎和开发代码相同的时间来逐步完善你的测试用例.但是在开发过程中,在开发完成一段代码后如果负责任而不是说完全把问题交给测试人员去发现的话,这个时候通常都会去做一些手动的测试.例如: 在代码中执行某些方法,查看输出的值

AM335x(TQ335x)学习笔记——WM8960声卡驱动移植

经过一段时间的调试,终于调好了TQ335x的声卡驱动.TQ335x采用的Codec是WM8960,本文来总结下WM8960驱动在AM335x平台上的移植方法.Linux声卡驱动架构有OSS和ALSA两种架构,目前最常用的架构是ALSA,本文也使用ALSA架构对WM8960驱动进行移植. ASoC是对ALSA驱动架构的进一步封装.ASoC将ALSA驱动中的各模块抽象为三部分:Platform.Codec和Machine.Platform主要是平台硬件驱动,包括SoC的IIS模块.DMA等,在本文中

EJB注释-1(EJB学习笔记)

 EJB注释是EJB技术的一个特点.EJB的大部分功能都是通过注释@来实现的.EJB注释1.有状态@Stateful和无状态@Stateless会话@Stateless定义本会话为无状态会话.无状态会话Bean 是一个简单的POJO(纯粹的面向对象思想的java 对象),EJB3.0 容器自动地实例化及管理这个Bean.Stateless Session Bean不负责记录使用者状态,Stateless Session Bean一旦实例化就被加进会话池中,各个用户都可以共用.即使用户已经消亡,S

EJB注释是通过@来实现的

1.有状态@Stateful和无状态@Stateless会话 EJB注释是EJB技术的一个特点.@Stateless 定义本会话为无状态会话.无状态会话Bean 是一个简单 的POJO(纯粹的面向对象思想的java 对象),EJB3.0 容器自动地实例化及管理这个Bean.Stateless Session Bean不负责记录使用者状态,Stateless Session Bean一旦实例化就被加进会话池中,各个用户 都可以共用.即使用户已经消亡,Stateless Session Bean的生

EJB 3.0开发指南之消息驱动Bean

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

菜鸟调错(二) 部署EJB的消息驱动Bean时遇到的错误

EJB3.0部署消息驱动Bean抛javax.naming.NameNotFoundException异常 在部署EJB的消息驱动Bean时遇到了如下的错误: ERROR [org.jboss.resource.adapter.jms.inflow.JmsActivation] (WorkManager(2)-2) Unable to reconnect org.jboss.resource.adapter.jms.inflow.JmsActivationSpec@2705ea(ra=org.j

深入探讨EJB中新的消息驱动组件

提要:我们可以使用MessageDrivenBean(消息驱动组件),在企业级的应用程序中进行异步的消息传送. 引言:Enterprise JavaBeans(EJB)1.1版本中定义了两种组件类型-session组件和entity组件.客户端对象可以同步调用EJB1.1的这两种组件的方法,然而,为了继承Message Oriented Middleware(MOM,面向对象的中间件)和Java Message Service(JMS,Java消息服务)的优点的需要,EJB框架中也相应的应当加入

Duilib学习笔记《05》— 消息响应处理

在Duilib学习笔记<04>中已经知道了如何将窗体显示出来,而如何处理窗体上的事件.消息呢? 一. 系统消息 窗体显示的时候我们就已经说了,窗体是继承CWindowWnd类的,对于窗体的部分消息的处理,需要重载该类的LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam); 函数.在显示窗体部分我们创建窗体WM_CREATE消息以及屏蔽标题栏WM_NCACTIVATE.WM_NCCALCSIZE.WM_NCPAINT等消息