<%-- JSP全站自动生成HTML下载新闻系统 V3.1 作者:JSP天空网站长 曹进 QQ:173241393 --%> J2EE的异步消息机制(下)
 
用户名:
密码:
终身会员
  首页 网络文摘 技术专题 下载中心 JSP培训 公司产品 JSP虚拟主机 技术论坛 会员 JSP免费空间  
  技术文摘: JSP基础 | JSP高级 | JSP环境 | JAVA基础 | JAVA高级 | JAVA工具 | JAVA数据库 | WEB框架 | XML相关 | JAVA考试 | J2EE相关 | J2ME相关 |
  视频下载: 程序设计数据库相关教程计算机基础教程图形图像网络技术网络安全时空书库EasyShop虚拟主机JSP培训技术论坛
  书籍教程: JSP教程Java教程图像软件XML教程数据库教程网页教程工具软件服务器相关ASP教程PHP教程CGI教程.NET教程
  代码下载: ASP代码下载JSP代码下载PHP代码下载CGI代码下载Flash代码C/C++/VCPowerBuilderDelphiVisualBasicVisualFoxpro
您的位置: 首页 -> 文章分类 -> J2EE相关 -> J2EE的异步消息机制(下)
 文摘搜索
 
 文摘资源分类
 
 文摘总排行榜TOP10
 
 最新更新文摘TOP10
 

J2EE的异步消息机制(下)

[来源]www.jspsky.com管理员   [作者]网络文摘   [时间]2005-3-5
推荐等级: 点击:
三.消息驱动豆简介
  异步消息也可以由消息驱动豆来实现。在EJB 1.1规范中,定义了两种类型的EJB。分别是实体豆(Entity Bean)和会话豆(Session Bean)。客户端通常是以同步的,阻塞方式来调用豆的方法。消息驱动豆将EJB和JMS的功能结合在一起。

  正如前述,会话豆通常实现商务逻辑,客户端不能共享一个会话豆。实体豆通常和一些在永久存储中的一些实体条目相对应的。这两种豆通常都有REMOTE和HOME接口,用来与客户端交互。并且,这些交互都是同步的,阻塞方式进行的。比如,一个请求发送给一个豆,通过阻塞式方法调用,服务器返回一个相应。调用者在收到返回后,才能进行下一步处理。消息驱动豆通常配置成是一个特别的主题(topic)或队列的客户端,作为消息的使用者。但消息驱动豆没有HOME和REMOTE接口。一个消息产生者将消息写入TOPIC或队列时,并不知道使用者是一个消息驱动豆。这就允许集成一个分布式的计算系统时,有很大的灵活性。消息驱动豆没有会话性质的状态,所有的实例在不处理请求时是相同的,这与无状态会话豆是类似的。将豆的实例放在缓冲池里,也是高效处理消息驱动豆的一种方法。一个消息驱动豆必须间接或直接地从javax.ejb.MessageDrivenBean接口继承而来。这个接口是由javax.jms.MessageListener继承而来。这个方法的一个参数是javax.jms.Message。可以是任何有效的JMS消息类型。方法的申明中并不包含一个thrown语句。因此在消息处理中,不会仍出应用程序异常。当容器接收到消息时,它首先是从一个缓冲池里得到现成的一个消息驱动豆,然后,如果配置文件需要的,容器还要设置一个和事务处理上下文的一个联系。当这些管理任务完成时,接收到的消息传递给onMessage()方法。一旦方法完成,事务确认或返回,豆又被重新放回到缓冲池。

  ejbRemove()在把消息驱动豆从任何存储上删除时调用。并进行清楚操作和垃圾收集。必须在ejbRemove()方法中释放所有豆的实例用到的资源。

  setMessageDrivenConnection()方法只有一个参数-javax.ejb.MessageDrivenContext的实例。MessageDrivenContext类与在实体和会话豆中的上下文类似。当一个豆的实例创建时,容器传入豆用的上下文。上下文中得到环境信息的方法,以及JTA UserTranscation类,用于豆管理事务处理的场合。

  另外,豆提供者必须提供一个ejbCreate()方法(无参数),用于在EJB服务器对豆进行设置。豆实例可以在ejbCreate()方法中取得任何需要的资源。

  消息驱动豆大大地简化了创建一个JMS使用者,创建和配置一个JMS消息使用者这些功能都交由EJB容器来做了。开发人员只需简单地实现消息驱动豆的接口,配置给EJB服务器,用来创建一个接收消息的商业逻辑部件。

四.一个实例
  本文为了说明上面的概念,编写了一个消息驱动豆,一个Publisher和一个Subscriber的代码。请参见附录的源代码。

  下面讲一下怎样运行实例。这里假设读者已经从SUN主页上下载了J2EE SDK 1.3 Bate,并已经安装好了。

  1.创建一个WeatherReport

  主题(Topic):

  j2eeadmin -addJmsDestination WeatherReport topic

  可以用下面命令看一下是否正确创建:

  D:j2sdkee1.3in>j2eeadmin -listJmsDestination JmsDestination

  一般显示结果如下:

  < JMS Destination : jms/Topic , javax.jms.Topic >

  < JMS Destination : jms/Queue , javax.jms.Queue >

  < JMS Destination : WeatherReport , javax.jms.Topic >

  2.运行Subscriber:

  D:mysourcecode estjms>java -Djms.properties=%J2EE_HOME%configjms_client.properties jmssub

  一般显示结果如下:

  Topic name is WeatherReport

  Java(TM) Message Service 1.0.2 Reference Implementation (build b10)

  To end program, enter Q or q, then

  Reading message: A sunny day.

  3.运行Publisher:

  打开另一个命令行窗口,输入下面命令:

  set classpath=%J2EE_HOME%libj2ee.jar;.

  java -Djms.properties=%J2EE_HOME%configjms_client.properties jmspub

  一般显示结果如下:

  Topic name is WeatherReport

  Java(TM) Message Service 1.0.2 Reference Implementation (build b10)

  Publishing message: A sunny day.

  4.删除一个话题

  D:j2sdkee1.3in>j2eeadmin -removeJmsDestination MyTopic

  5.使用消息驱动豆

  下面是用消息驱动豆实现接受消息。使用deploytool将附录中的Bean部署好,可以看到下面的信息:

  Deploying message driven bean MsgBean, consuming from WeatherReport

  Application testjms deployed.

  然后再次运行Publisher。可以看到消息驱动豆输出下面的结果:

  MESSAGE BEAN: Message received: A sunny day. 
[收藏][打印][关闭]
在线咨询服务 在线咨询服务 在线咨询服务 在线咨询服务
Copyright©2005-2006陕西思远数码科技有限责任公司 服务电话:029-88212987 传真:029-88278265 售后服务QQ:173241393
地址:陕西省西安市吉祥路186号太白新苑C座2104 陕ICP备05004508号