`
8366
  • 浏览: 813324 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

ejb3.0第11讲 --开发消息驱动bean

    博客分类:
  • ejb
阅读更多

 

概念:

 

 

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 类。

 

 

Queue类型消息开发步骤:

 

1.首先配置一个Queue类型的目标地址,放在JBOSS目录下的D:\jboss-4.2.3.GA\server\default\deploy,

名字必须叫 *-server.xml

 

 

<?xml version="1.0" encoding="UTF-8"?> 
<server> 
	<mbean code="org.jboss.mq.server.jmx.Queue" 
	  name="jboss.mq.destination:service=Queue,name=itcastQueue"> 
		<attribute name="JNDIName">queue/itcastQueue</attribute> 
		<depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends> 
	</mbean> 
</server> 

 

 

在控制台 http://localhost:7070/jmx-console/  找到 jboss.mq.destination ,以看到我们设置的queue类型的目标地址

 

 

 2.java 中发送消息的概括

 

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);

 

3.建立一个java项目,把jboss的client目录下的jar包全部buildPath到编译路径中

 

4.写消息的发送端

  

 

 

package cn.com.xinli.jms.app;

import javax.jms.Destination;
import javax.jms.MessageProducer;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueSession;
import javax.jms.TextMessage;
import javax.naming.InitialContext;

public class QueueSender {

	/**
	 * 消息发送端
	 */
	public static void main(String[] args) 
	{
		try
		{
			/*需要从jndi.properties中读取上下文信息*/
			InitialContext ctx = new InitialContext();
			QueueConnectionFactory factory = (QueueConnectionFactory)ctx.lookup("QueueConnectionFactory");
			QueueConnection conn = factory.createQueueConnection();
			QueueSession session = conn.createQueueSession(false,QueueSession.AUTO_ACKNOWLEDGE);
			Destination destination=(Destination)ctx.lookup("queue/itcastQueue");
			MessageProducer producer = session.createProducer(destination);
			TextMessage msg = session.createTextMessage("您2好:胡晓亮,这是我的第一个消息驱动Bean");
			producer.send(msg);
			session.close();
			conn.close();
			System.out.println("消息发送成功");
		}
		catch(Exception e)
		{
			System.out.println("消息发送失败");
			e.printStackTrace();
		}


	}

}

 

 

 

jndi.properties

 

java.naming.provider.url = localhost:1099 java.naming.factory.initial = org.jnp.interfaces.NamingContextFactory

 

5.写消息的接收端

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

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

 

 

 

package cn.com.xinli.jms.app;

import javax.ejb.MessageDriven;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
import javax.ejb.ActivationConfigProperty;
@MessageDriven(activationConfig=
{
 @ActivationConfigProperty(propertyName="destinationType",propertyValue="javax.jms.Queue"),
 @ActivationConfigProperty(propertyName="destination",propertyValue="queue/itcastQueue"),
 @ActivationConfigProperty(propertyName="acknowledgeMode",propertyValue="Auto-acknowledge")
})


public class MessageDriverBean implements MessageListener
{

	public void onMessage(Message msg) 
	{
		
		TextMessage message = (TextMessage)msg;
		  try
		  {
		   System.out.println("接收到消息:"+message.getText());
		  } catch (JMSException e) 
		  {
		   e.printStackTrace();
		  }
	}

}

  

 

  

6.打包部署:讲项目打成一个jar包,貌似netbC.jar,放在JBOSS的deploy目录下,启动jboss

 

7.运行QueueSender.java 发送消息

8.Jboss中看到

 

 

 

 

 

10:21:33,984 INFO  [STDOUT] 接收到消息:您好:胡晓亮,这是我的第一个消息驱动Bean

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    EJB3.0 实例教程 -- 切片1

    第五章消息驱动 BEAN (MESSAGE DRIVEN BEAN) .....33 第六章 实体 BEAN(ENTITY BEAN) .36 6.1 实体 BEAN的组成文件PERSISTENCE.XML配置.36 6.2 JBOSS数据源的配置......36 6.2.1 MySql数据源的配置...........37 ...

    EJB3.0 实例教程 -- 切片2

    第五章消息驱动 BEAN (MESSAGE DRIVEN BEAN) .....33 第六章 实体 BEAN(ENTITY BEAN) .36 6.1 实体 BEAN的组成文件PERSISTENCE.XML配置.36 6.2 JBOSS数据源的配置......36 6.2.1 MySql数据源的配置...........37 ...

    EJB3.0中文文档

    EJB3.0是EJB规范的一个重大版本升级,引入了许多简化开发过程的新特性。 **1.2 EJB的运行环境** EJB组件需要部署在一个容器中运行,这个容器通常是应用服务器的一部分,例如JBoss、WebLogic或GlassFish等。容器...

    EJB3.0 in Action

    ### 第十一章至第十三章:打包、整合与野兽般的EJB驯服 这几章将讨论EJB应用的打包和部署,以及如何在不同应用层之间有效地整合EJB。此外,还将涉及如何处理和优化性能问题,确保EJB在大规模部署时的表现。 ### 第...

    Manning EJB3.0 in action

    根据提供的文件信息,我们可以推断出这是一本关于EJB 3.0的书籍,书名为《Manning EJB3.0 in action》。虽然标题和描述中的故事似乎与EJB 3.0无关,但从部分内容来看,这本书显然是专注于EJB 3.0的技术细节及其在...

    Manning.EJB.3.0.in.Action

    #### 第4章:消息传递和开发消息驱动Bean - **章节内容**:讲解如何利用消息传递机制和消息驱动Bean来实现异步处理。 - **核心知识点**: - 消息驱动Bean的工作原理。 - Java消息服务(JMS)的基础知识。 - 如何...

    Ejb 3 In Action

    #### 第十一章至第十四章:打包部署与迁移指南 - **打包部署**:指导读者如何将EJB应用程序打包并部署到服务器上。 - **迁移策略**:提供了从早期版本EJB迁移到EJB 3.0的具体步骤和建议。 #### 第十五章:EJB作为...

    EJB3.0实例教程

    第五章消息驱动 BEAN (MESSAGE DRIVEN BEAN) ...............................................................................................33 第六章 实体 BEAN(ENTITY BEAN) .................................

    Manning - EJB 3 in Action

    这一章深入探讨了EJB中消息驱动Bean的使用场景和编程模型。读者将学到如何处理异步消息,以及如何集成JMS消息系统。 5. **第5章:学习高级EJB概念** 本章涉及EJB的一些高级主题,如拦截器、定时服务等。这些特性...

    Enterprise Java beans 3.0 , Fifth Edition

    《Enterprise Java Beans 3.0 第五版》是一本关于EJB(Enterprise JavaBeans)技术的权威指南,作者Bill Burke和Richard Monson-Haefel通过这本书向读者深入介绍了EJB 3.0标准的内容和应用。EJB作为Java EE(Java ...

    ESB3实例代码及文档

    这个教程可能包含了EJB3.0的核心概念、实体Bean、会话Bean、消息驱动Bean的创建和部署,以及如何在实际场景中应用它们。 2. "ejb3App.rar":这是一个EJB3.0应用的源代码压缩包,通常包含了项目结构、Java源文件、...

    大量EJB3文档(基本包含EJB所有技术资料)

    4. **消息驱动Bean(Message-Driven Beans, MDB)**:MDB用于处理JMS(Java Message Service)消息,是实现异步处理的一种方式。在EJB3中,只需使用@MessageDriven注解即可创建一个MDB。 5. **依赖注入(Dependency...

    MyEclipse 6 Java 开发中文教程(第十五至十八章)

    1. EJB概述:理解EJB的角色和类型,包括会话bean、实体bean和消息驱动bean。 2. EJB 3.0新特性:讲解EJB 3.0简化开发的特性,如注解驱动和无容器部署。 3. EJB容器管理:学习如何利用容器进行事务管理、安全性和资源...

    J2EE软件工程师必读书目.

    - 会话Bean与消息驱动Bean的使用场景 - 注解在EJB中的角色与功能 - 事务管理机制的实现细节 - 部署与配置选项 #### 11. 深入浅出Hibernate - **书籍简介**:本书由夏昕、曹晓钢、唐勇共同编著,旨在帮助读者...

    J2EE应用开发详解

    172 10.5 小结 177 第11章 EJB 179 11.1 EJB简介 179 11.1.1 EJB的特点 179 11.1.2 EJB类型与组成 180 11.1.3 EJB 3.0的新特性 181 11.2 元数据注释和部署描述符 181 11.2.1 元数据注释 181 11.2.2 部署描述符 182 ...

Global site tag (gtag.js) - Google Analytics