`
8366
  • 浏览: 809333 次
  • 性别: 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容器管理:学习如何利用容器进行事务管理、安全性和资源...

Global site tag (gtag.js) - Google Analytics