`
hujin1979
  • 浏览: 80769 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

消息驱动Bean :来自J2EE的轻量级的网络通信工具

阅读更多

   如果你要处理消息驱动Bean,那恭喜你,它比起实体Bean和会话Bean可是要轻松许多。关于消息驱动Bean的文档,你GOOGLE一下可以搜索出很多。我这里就不重复了。我写博文有个很重要的目的,是总结,是日记,是提醒自己。当然,走到这里的哥们,如果也能帮助你一下,我当然也是很乐意的,呵呵!
  
   我只对我觉得它比较重要的特性进行陈述,这些问题都是我看来很重要的。对真正使用它是起到很大帮助的。本篇可能会采取N次修改方案,不排除个人认识的错误性和局限性。NOW,现在开始总结了。

   消息驱动Bean是EJB2.0开始提出来的,它不同于PRC,RMI等机制,它采取了一个叫middleman的设计理念,我想把它弄出来肯定是有它的原因的。异步处理是逼迫这个叫中间人层出来的主要原因吧,它可以帮助程序设计者不要担心消息发送后的事情,也不要担心消息服务器出了什么问题,所以消息驱动Bean有无状态的特点。正是这个特点导致它的实现接口看上去那么的简单。

   消息驱动Bean能支持的是大概是两种消息传递模式:发布/订阅和点到点。发布订阅对应于主题模式(Topic),点到点对应于队列模式(Queue)。JAVA消息服务接口就是这两种类型,你想使用不同类型的Bean当然就要实现不同的接口来帮你完成设计。

   JAVA消息服务的创建使用流程大概是:
   1.定位JAVA消息服务驱动程序
   2.创建消息连接
   3.创建消息服务会话
   4.定位消息服务目的地
   5.创建消息服务发生者或消息服务使用者
   6.发送或接收消息

   代码范式如下: 

  

import java.util.Hashtable;
import java.util.Properties;
import javax.naming.*;
import javax.jms.*;

public class Client {
	public static void main(String[] args) throws NamingException, JMSException {
		Hashtable ht = System.getProperties();
		//初始化JNDI
		Properties prop = new Properties();
		Context ctx = new InitialContext(prop);
		//通过JNDI查询获得连接工厂 
		TopicConnectionFactory factory = (TopicConnectionFactory) ctx.lookup("javax.jms.TopicConnectionFactory");
		//使用连接工厂创建主题类型JMS连接 
		TopicConnection conn = factory.createTopicConnection();
		//使用连接创建会话 
		TopicSession session = conn.createTopicSession(false,Session.AUTO_ACKNOWLEDGE);
		//通过JNDI查询消息目的地 
		Topic topic = (Topic) ctx.lookup("testtopic");
		//创建消息发生者 
		TopicPublisher publisher = session.createPublisher(topic);
		//创建文本消息,然后发布此消息 
		TextMessage msg = session.createTextMessage();
		msg.setText("I am a superman");
		publisher.publish(msg);
	}
}

 

   理解这段代码,你必须要提前理解JDBC的使用规范,很有点类似哦。工厂,连接,会话等概念,你也要必须心中有数。至于其他的,我清楚了,也就不说了。不明白可以GOOGLE查找其他知识点。

   EJB这个容器帮我解决了比如多线程并发请求,事物处理等复杂的事情。创建EJB的Bean可以不考虑这些问题,你可以用单线程思路来设计程序。EJB会自动实例化组件的多个实例来解决并发请求进行服务。最好不要在Bean中来控制线程,这样会导致EJB容器很难控制事务。

   EJB和消息服务集成后,就有了消息驱动Bean这个组件概念。EJB的消息驱动Bean就可以处理来自JMS的消息。它没有主接口,本地主接口,远程接口,所以它可以接受来自任何消息客户端。MOM(面向消息的中间件)就可以和EJB的消息驱动Bean进行通信。消息驱动Bean具有以下特点:
   1.接口只有一个方法
   2.不具备任何返回值
   3.不能发送异常给客户端
   4.无状态
   5.可以持久,也可以非持久

   提供一个示例程序: 
 

import javax.ejb.*;
import javax.jms.*;

public class TestBean implements MessageDrivenBean, MessageListener {

	private static final long serialVersionUID = 1L;

	protected MessageDrivenContext ctx;

	// 将此Bean实例同特殊上下文相联系
	public void setMessageDrivenContext(MessageDrivenContext ctx) {
		this.ctx = ctx;
	}

	// 初始化此Bean
	public void ejbCreate() {
		System.out.println("ejbCreate");
	}

	// 商务方法
	public void onMessage(Message msg) {
		if (msg instanceof TextMessage) {
			TextMessage tm = (TextMessage) msg;
			try {
				String text = tm.getText();
				System.out.println("Received new message:" + text);
			} catch (JMSException e) {
				e.printStackTrace();
			}
		}
	}

	// 销毁此Bean
	public void ejbRemove() {
		System.err.println("ejbRemove");
	}
}

 
   最后给出Bean的部署配置文件:
   ejb-jar.xml

<?xml version="1.0"?> 
<ejb-jar xmlns="http://java.sun.com/xml/ns/j2ee" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
                http://java.sun.com/xml/ns/j2ee/ejb-jar_2_0.xsd" 
  version="2.0"> 
  <message-driven>   
        <ejb-name>Test</ejb-name>        
        <ejb-class>TestBean</ejb-class>     
        <transaction-type>Container</transaction-type> 
        <message-driven-destination> 
          <destination-type>javax.jms.Topic</destination-type> 
        </message-driven-destination> 
  </message-driven> 
  </enterprise-beans> 
</ejb-jar>


补充说明:
<message-driven-destination>配置标签指定是用的主题还是队列消息,但是不指明绑定到哪个主题或队列,这个配置是应用服务器特定的部署描述符中完成的,不同的EJB服务商可能使用的配置符不尽相同,这样做是为了更好的跨应用服务器的移植。

  

 

分享到:
评论

相关推荐

    J2EE在企业级应用中的架构实践

    近年来,随着微服务架构的兴起,Spring Boot和Spring Cloud等轻量级框架逐渐成为构建J2EE微服务的首选。 10. **持续集成和自动化**:在J2EE开发中,持续集成工具(如Jenkins)和自动化测试框架(如JUnit和Selenium...

    IBM WebSphere Application Development: J2EE, EJB, WebService

    - **SOAP**:SOAP(Simple Object Access Protocol)是一种轻量级协议,用于在分布式环境中交换结构化信息。它基于XML,可以使用不同的传输协议(如HTTP或SMTP)。 - **XML**:XML是WebService中数据交换的标准格式...

    J2EE学习资料

    10. **Web服务(SOAP和RESTful)**:J2EE还涉及Web服务的开发,包括基于XML的SOAP协议和轻量级的RESTful风格。理解这两种方式的优缺点,以及如何使用JAX-WS和JAX-RS进行开发,对于构建可互操作的服务至关重要。 在...

    J2EE完全参考手册

    - **EJB 3.0+**:引入了更轻量级的注解驱动的编程模型,降低了EJB的使用复杂性。 5. **持久层**: - **JDBC**:Java数据库连接,提供了与多种数据库的接口。 - **JPA(Java Persistence API)**:用于对象/关系...

    J2EE.rar_J2EE项目

    4. **Tomcat**:一个轻量级的Web服务器和应用服务器,常被用作J2EE项目的测试和开发环境。 5. **JBoss AS / WildFly**:完整的J2EE应用服务器,提供了全套J2EE服务。 通过深入研究这些开源项目的源码,开发者可以...

    j2ee原理.PPT

    这种模型将业务逻辑移至服务器端,客户端变得更轻量级,减轻了网络负担并提高了可维护性。然而,早期的Web 应用基于CGI、ISAPI、NSAPI等技术,编程复杂,性能有限。 3. 为什么需要J2EE:为了解决Web应用程序的这些...

    J2EE 基础教程ppt

    - **EJB**:EJB分为三种类型:会话bean(Session Beans)负责业务逻辑,实体bean(Entity Beans)代表持久化对象,消息驱动bean(Message-Driven Beans)处理JMS(Java Message Service)消息。 - **JMS**:提供异步...

    J2EE资料下载点

    5. **消息驱动Bean容器**:支持消息驱动Bean,实现异步通信。 ### J2EE的技术栈 J2EE技术栈包括但不限于以下技术: 1. **Servlets**:用于处理客户端请求并生成动态响应的标准接口。 2. **JSP (JavaServer Pages)...

    java+j2ee项目系统原理和技术介绍

    Spring框架是J2EE开发中常用的一个轻量级框架,它提供了依赖注入、AOP(面向切面编程)等功能,简化了项目的开发和维护。 此外,为了提高开发效率和团队协作,开发者还会使用版本控制系统(如Git),构建工具(如...

    美河提供 J2EE1.4编程指南

    例如,无状态会话bean的引入减少了内存占用,轻量级EJB容器的出现降低了部署复杂性。 总之,J2EE 1.4 是一个强大的平台,为开发者提供了构建复杂企业级应用所需的工具和API。其丰富的功能和强大的架构设计,使得...

    J2EE学习经典课程,外文翻译过来的。

    JAX-WS用于SOAP协议,而JAX-RS(也称为RESTful Web Services)则适用于构建基于HTTP的简单、轻量级服务。 10. **容器管理**:J2EE应用运行在应用服务器(如Tomcat、GlassFish、WildFly等)提供的容器中,容器负责...

    J2EE Tutorial中文版

    1. **客户端层**:通常由Java应用程序或轻量级客户端如Web浏览器构成,负责与用户交互。 2. **Web层**:包含Servlets、JSP(JavaServer Pages)和JSF(JavaServer Faces),处理HTTP请求,生成动态网页内容。 3. *...

    J2EE交流文档

    - Spring Framework:一个轻量级的企业级应用开发框架,简化了EJB的复杂性。 - Hibernate:用于对象关系映射(ORM)的技术,简化了数据库操作。 - Struts:基于MVC模式的Web应用框架,帮助构建结构清晰的Web应用...

    j2ee的13中技术

    EJB的版本随着Java EE的发展不断演进,以适应现代开发需求,如轻量级容器和Java Persistence API(JPA)的引入,使得EJB更加灵活和易于使用。 总结来说,J2EE的JDBC、JNDI和EJB技术分别解决了数据库访问、资源管理...

    魔乐科技 J2EE详细笔记 很经典的

    - Spring:全面的轻量级框架,包括IoC(Inversion of Control,依赖注入)、AOP(Aspect-Oriented Programming,面向切面编程)、数据访问支持等。Spring MVC是其Web开发模块。 - Hibernate:对象关系映射(ORM)...

    数据结构 J2ee JAVA知识点总结

    - Spring框架:轻量级的Java企业应用框架,提供依赖注入、AOP(面向切面编程)等功能。 - Struts、JSF(JavaServer Faces):MVC(模型-视图-控制器)架构的Web应用框架。 3. JAVA语言: - 类与对象:面向对象...

    J2EE培训由山东史永讲述

    Oracle XE则是一款轻量级的数据库系统,适合小型企业和学习用途。它具有许多Oracle数据库的核心功能,但资源需求较低,易于安装和使用,适合初学者和小型应用。 通过结合这些工具和技术,J2EE培训将引导学员掌握...

    J2EE架构师(WROX PRESS)

    on-One J2EE Development without EJB》可能会探讨在不使用EJB的情况下,如何利用其他技术和框架(如Spring或Hibernate)来实现相同的企业级功能,这反映了随着技术发展,对轻量级架构的需求。 10. **项目管理和...

    J2EE电子讲义基于EJB

    从EJB 3.0开始,J2EE向轻量级框架靠拢,降低了EJB的复杂性。主要改进包括: - 注解(Annotations):通过注解简化部署描述符,使得配置更加直观。 - POJO(Plain Old Java Object):允许使用普通的Java类作为bean,...

    J2EE 1.3.1 API.chm,J2EE 1.4 API.chm,J2MEAPI07.CHM

    4. **JPA(Java Persistence API)1.0**:取代了EJB 2.x中的CMP(容器管理持久性),提供了轻量级的对象关系映射。 5. **JMX(Java Management Extensions)1.4**:增强了管理系统和监控功能。 6. **JSTL(Java...

Global site tag (gtag.js) - Google Analytics