`
holdbelief
  • 浏览: 707472 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

EJB3.0中的MessageDrivenBean

 
阅读更多

EJB3.0中MessageDrivenBean:

1.java消息驱动bean属于Java消息服务(Java Message Service,简称JMS)。

2.JMS是用于访问企业消息系统的开发商中心的API。企业消息系统可以协助应用软件通过网络进行消息交互。

3.JMS的编程过程简单概括为:应用程序A-->(消息)-->Jboss JMS-->(消息)-->应用程序B。应用程序A和应用程序B没有直接的代码关联,两者实现了解耦。消息传递系统的中心就是消息。

消息驱动Bean(MDB)是设计用来专门处理基于消息请求的组件,它和无状态Session Bean一样也使用了实例池技术,容器可以使用一定数量的bean实例并发处理成百上千个JMS消息。正因为MDB具有处理大量并发消息的能力,所以非常适合应用在一些消息网关产品。如果一个业务执行的时间很长,而执行结果无需实时向用户反馈时,也很适合使用MDB。如订单成功后给用户发送一封电子邮件或发送一条短信等。

消息有下面几种类型,他们都是派生自Message接口。
StreamMessage:一种主体中包含Java基本值流的消息。其填充和读取均按顺序进行。
MapMessage:一种主体中包含一组名-值对的消息。(没有定义条目顺序)
TextMessage:一种主体中包含Java字符串的消息(例如:XML消息)
ObjectMessage:一种主体中包含序列化Java对象的消息。
BytesMessage:一种主体中包含连续字节流的消息。

消息的传递模型:
JMS支持两种消息传递模型:点对点(point-to-point,简称PTP)和发布/订阅(publish/subscribe,
简称pub/sub)。
二者有以下区别:
1.PTP 消息传递模型规定了一条消息只能传递给一个接收方。采用javax.jms.Queue表示。
2.Pub/sub 消息传递模型允许一条消息传递给多个接收方。采用javax.jms.Topic表示。

注意:每种模型都通过扩展公用基类来实现。例如,javax.jms.Queue 和javax.jms.Topic都扩展自
javax.jms.Destination 类。

 

开发步骤如下:
一、配置destinations-service.xml文件。
JBOSS使用一个XML文件配置队列地址,文件的取名格式应遵循*-service.xml,我取名为
destinations-service.xml。
jboss默认的全局JNDI名称组成为:"queue"+"/"+"目标地址"。
开始JMS编程前,我们需要先配置消息到达的目标地址(Destination),因为只有目标地址存在了,
我们才能发送消息到这个地址。由于每个应用服务器关于目标地址的配置方式都有所不同,下面以jboss为例,配置一个queue类型的目标地址。
<?xml version="1.0" encoding="UTF-8"?>
<server>
   <mbean code="org.jboss.mq.server.jmx.Queue" 

name="jboss.mq.destination:service=Queue,name=ztfQueue">
      <attribute name="JNDIName">queue/ztfQueue</attribute>
      <depends optional-attribute-

name="DestinationManager">jboss.mq:service=DestinationManager</depends>
    </mbean>
   <mbean code="org.jboss.mq.server.jmx.Topic" 

name="jboss.mq.destination:service=Topic,name=ztfTopic">
      <attribute name="JNDIName">topic/ztfTopic</attribute>
      <depends optional-attribute-

name="DestinationManager">jboss.mq:service=DestinationManager</depends>
    </mbean>
</server>
注意:任何队列或主题被部署之前,应用服务器必须先部署Destination Manager Mbean,所有我们
通过<depends>节点声明这一依赖。

二、在java类中发送消息(用到jndi.properties)。
一般发送消息有以下步骤:
1.得到一个JNDI初始化上下文(Context)
InitialContext ctx = new InitialContext();

2.根据上下文查找一个连接工厂ConnectionFactory,改连接工厂是由JMS提供的,不需我们自己创建,每个厂商都为它绑定了一个全局JNDI,我们通过它的全局JNDI便获取它;
QueueConnectionFactory factory = (QueueConnectionFactory)ctx.lookup("ConnectionFactory");

3.从连接工厂得到一个连接QueueConnection。
QueueConnection conn = factory.createQueueConnection();

4.通过连接来建立一个会话(Session);
QueueSession session = conn.createQueueSession(false,QueueSession.AUTO_ACKNOWLEDGE);
这句代码意思是:建立不需要事务的并且能自动确立消息已接收的会话。

5.查找目标地址:
Destination destination=(Destination)ctx.lookup("queue/ztfQueue");

6.根据会话以及目标地址来建立消息生产者MessageProducer(QueueSender和TopicPublisher都扩展自MessageProducer接口):
MessageProducer producer = session.createProducer(destination);
TextMessage msg = session.createTextMessage("您好:荆州,这是我的第一个消息驱动Bean");
producer.send(msg);

三、采用MessageDrivenBean接收消息。
当容器检测到bean守候的目标地址有消息到达时,容器调用onMessage()方法,将消息作为参数传入
MDB。MDB在onMessage()中决定如何处理改消息。你可以使用注解指定MDB监听哪一个目标地址(Destination)。当MDB部署时,容器将读取其中的配置信息。

一个MDB通常要实现MessageListener接口,在接口定义了onMessage()方法。Bean通过它来处理收到的JMS消息。
@MessageDriven(activationConfig=
{
 @ActivationConfigProperty

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

(propertyName="destination",propertyValue="queue/ztfQueue"),
 @ActivationConfigProperty(propertyName="acknowledgeMode",propertyValue="Auto-

acknowledge")
})
public class MessageDrivenBean implements MessageListener{
 public void onMessage(Message message) {
  TextMessage msg = (TextMessage)message;
  try {
   System.out.println(msg.getText());
  } catch (JMSException e) {
   e.printStackTrace();
  }
 }
}

四、把工程src下的文件打成jar包(用到build.xml),在C:\jboss-5.0.0.GA\server\default\deploy进行部署。

五、运行发送消息的java类,此时在console中就可看见结果了。

六、至此,一个MessageDrivenBean开发就成功了。

分享到:
评论

相关推荐

    ejb2.0与ejb3.0的区别

    ### EJB2.0与EJB3.0的主要区别 #### 一、简介 企业Java Beans(EJB)是Java平台为企业级应用提供的一种组件模型。随着技术的发展,EJB经历了多个版本的迭代,其中EJB 2.0和EJB 3.0是两个重要的里程碑版本。本文将...

    EJB3.0实例教程(源代码).rar )

    综上所述,"EJB3.0实例教程(源代码).rar"是一个宝贵的资源,它不仅提供了EJB 3.0的理论知识,还通过实际代码示例加深了理解和应用。学习这个教程,你将能够掌握EJB 3.0的核心概念,并有能力创建和部署自己的EJB组件...

    EJB3.0开发Message Driven Bean

    - 在EJB3.0项目中,选择`New` -&gt; `Other` -&gt; `EJB3.0` -&gt; `MessageDrivenBean`。 - 输入包名和类名(例如`demo.HelloMDB`)。 2. **配置JMS资源**: - **设置ConnectionFactory**:使用JBoss提供的默认...

    ejb3.0实例教程源码

    10. **MessageDrivenBean** - 消息驱动bean是ejb3.0中处理消息的特殊类型bean,常用于JMS(Java Message Service)。`MessageDrivenBean`可能包含了如何接收和处理消息的示例,实现异步处理和解耦。 通过学习这些...

    EJB3.0实例教程 源代码

    `MessageDrivenBean`是EJB3.0中处理消息队列(JMS)的组件。该示例将演示如何创建消息驱动bean来监听和处理消息,以及如何配置消息资源。 #### 2.8 `WSClient` 在现代企业应用中,Web服务的集成是常见的需求。`...

    最新EJB3.0实例教程的实例代码

    本教程将深入探讨EJB3.0中的关键知识点,结合提供的实例代码进行详细解析。 1. **数据源配置(mysql-ds.xml)** 在`mysql-ds.xml`中,我们通常会看到用于配置JDBC数据源的设置,例如数据库连接URL、用户名、密码等...

    《EJB3.0实例子教程》愿代码

    10. **MessageDrivenBean**:消息驱动bean(MDB)是EJB 3.0中处理JMS(Java Message Service)消息的特殊类型。MDB可以异步接收和处理消息,使其成为实现解耦和异步处理的理想选择。 通过以上实例,开发者可以全面...

    EJB3.0的学习教材

    通过对上述知识点的深入学习,开发者不仅能够理解 EJB3.0 的基础概念和技术细节,还能够掌握如何在实际项目中有效地利用 EJB3.0 进行高效的企业级应用开发。这将有助于提升项目的质量和开发效率,同时也能更好地应对...

    EJB3-SourceCode

    10. **消息驱动bean** - `MessageDrivenBean`是EJB3.0中的另一个组件,用于处理JMS(Java Message Service)消息。它们在后台监听消息队列,当收到消息时自动触发处理。 以上各个部分结合在一起,构成了一个全面的...

    EJB3入门经典配套源码1.rar

    1. 注解驱动:EJB3.0放弃了EJB2.x中的XML配置,大量使用注解(Annotation)来声明Bean的元数据,如@Stateless、@Stateful、@MessageDriven等,这大大减少了配置文件的工作量。 2. 自动持久化:EJB3.0引入了JPA...

    EJB学习源代码

    11. **MessageDrivenBean**:消息驱动bean是EJB中的一种特殊类型,用于监听消息队列并响应JMS(Java Message Service)消息。MessageDrivenBean部分可能包括了如何接收和处理消息的示例。 通过深入学习和理解这些源...

    ejb2.0消息驱动bean的开发(JBOSS4.0.4.GA 环境)

    通过这个主题,开发者可以学习到如何在旧版Java EE环境中利用消息驱动Bean进行异步处理,这对于理解更高级的Java EE技术,如EJB3.0和微服务架构,有着重要的基础作用。同时,这也是一种宝贵的技能,因为许多遗留系统...

    Weblogic10_JMS、MDB分布式部署学习

    - MDB 是 EJB 3.0 引入的一种无状态会话bean,它自动监听并处理 JMS 队列或主题中的消息,减少了应用之间的耦合。 - MDB 可以在后台运行,无需用户交互,适合处理后台任务和异步操作。 3. 分布式 Weblogic JMS ...

Global site tag (gtag.js) - Google Analytics