动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > J2EE/J2ME教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ J2EE/J2ME教程 ]的信息

本月文章推荐
.HTML表单Form中的get和post方法.
.J2ME最佳实践之RMS操作.
.J2EE、Linux稳固e-business架构.
.Petstore源码追踪记(3)-商业逻辑.
.结合JAVASCRIPT将HTML导入Excel形.
.开源密码管理软件.
.谈谈J2ME解决手机Game的内存问题.
.3D编程指南第五部分:使用M3G渲染.
.入门-J2ME学习日记之-利用定时器.
.基于Java的Web服务器工作原理(一.
.JBPM数据库中取得这个流程实例,.
.保护自己的MIDlet程序.
.漫谈EJB.
.高可靠性移动应用程序-移动数据.
.NetBeans的使用(1).
.J2EETM蓝图摘要.
.Ibatis的学习笔记.
.使用NetBeans5.0建立JAX-WS2.0服.
.创建灵活易扩展的J2EE企业应用程.
.联网并进行RMS永久存储的演示代码.

EnterpriseJavaBeansDistilled..........

发表日期:2007-12-23 |



  消息驱动Bean(续)

使用哪个消息模型?

这两种模型背后的基本原理在JMS规范中。JMS是用于访问现存消息系统,而提供公共API的方式出现的。在现如今的概念阶段,一些消息厂商提供了点对点模型支持,而另一些提供对发布-订阅模型支持。所以,JMS需要提供支持两种模型的API才能赢得业界的广泛支持。JMS 1.0.2规范部要求JMS供应者支持两种模型。然而,EJB 2.0厂商需要提供对两种消息模型的支持。

几乎任何事情都可用pub/sub模型完成,或用点对点完成。反之亦然。以此类推,类似于开发者的编程语言选择。理论上,能够用Pascal写的应用也可以用C完成。用C++能完成的任何事情,也能用Java做。在某些情形下,都有一定的选择,或者取决于对那种模型的熟悉程度罢了。

在大部分情况下,模型的选择取决于模型各自不同的优点。对于发布-订阅而言,任何数目的订阅者都能监听某个topic,并都能够收到相同消息的拷贝。比如,考虑发布者广播了股票报价这样一种情况。如果任何特定的订阅者当前没有连接,并错过了很好的报价,发布者不会去关注。相比之下,点对点Session很可能倾向于另一端特定应用的一对一对话。在这种情形下,每条消息都值要紧。

另外,消息所代表数据信息的范围和多样性也是一个因素。使用pub/sub时,消息是基于特定topic提供的过滤功能来分发到消费者的。即使当消息是用于和某个已知的应用建立一对一对话,使用多个topic的pub/sub来隔离不同类型的消息也是pub/sub的优势所在。每种消息类型能单独通过各自的消费者和onMessage()监听器来处理。

当仅仅想让特定接收者处理一次给定消息时,点对点更加方便。这也许是这两种模型最关键的区别:p2p保证仅仅有一个消费者处理每条消息。当消息需要依次单独处理时,这一点尤为重要。

实体和会话bean不该接收消息

    JmsClient_1用于消费TravelAgent EJB生产的消息。那么,其他的实体,或会话Bean也能接收哪些消息吗?答案是肯定的,但那可不是好办法。

实体和会话Bean会对来自EJB客户的Java RMI调用作出响应,但不能编写为,类似消息驱动Bean一样,对JMS消息的响应。这意味着,不可能写消息驱动的会话,或实体Bean。EJB的这种对JMS消息响应的局限性,使得消息驱动Bean为什么会在EJB 2.0中引入的原因。消息驱动Bean被设计成消费来自topic或queue的消息。消息驱动Bean补充了以前EJB中的不足,我们将在下一节给出如何编写它们的例子。

    开发实体或会话Bean来消费来自业务方法的JMS消息时可能的,但是这个方法必须首先被EJB客户调用。比如,调用Hypothetical EJB中的业务方法,其中设置了JMS session并试着查看来自queue的消息:

public class HypotheticalBean implements javax.ejb.SessionBean {

    InitialContext jndiContext;



    public String businessMethod() {



        try{



            QueueConnectionFactory factory = (QueueConnectionFactory)

                jndiContext.lookup("java:comp/env/jms/QueueFactory");



            Queue topic = (Queue)

                jndiContext.lookup("java:comp/env/jms/Queue");



            QueueConnection connect = factory.createQueueConneciton();

            QueueSession session = connect.createQueueSession(true,0);

            QueueReceiver receiver = session.createReceiver(queue);



            TextMessage textMsg = (TextMessage)receiver.receive();

        

            connect.close();

            

            return textMsg.getText();



        } catch(Exception e) {

            throws new EJBException(e);

        }



    }

    ...

}


消息消费者,QueueReceiver,用于取得queue中的消息。尽管程序设计正确,但这是很危险的操作,因为对QueueReceiver.receive()的调用将诸塞当前线程,直到消息可用为止。如果消息不会发送到接收者的queue中,该线程将一直被诸塞。换句话说,如果没有消息发送到这个queue中,QueueReceiver将一直等待下去。

当然也有一些择中的办法,使得receive()方法变得更安全。比如,receive(long timeout)给出了等待时间,一旦超过了这个时间,如果消息还没到达,QueueReceiver将停止诸塞当前线程,并放弃该消息。同时,也有receiveNoWait()方法,它会检查消息,如果没有等待,则返回null,因此避免了线程诸塞。

    尽管这些receive()方法更安全,但仍然是危险的操作。不能够保证receive()方法预期运行、或者程序员的失误(比如,使用了错误的receive()方法),等等这些所带来的风险都是很大的。另外,消息驱动Bean提供了强有力、简单的企业Bean ,并专门为消费JMS消息而设计的。本书建议不要试着在实体,或会话Bean 中消费消息。

JMS更多内容

    JMS(包括一般意义上的企业消息),代表了分布式计算中一种强有力的典范。用本人的观点理解,Java消息服务和EJB自身同等重要,在使用JMS开发之前一定要理解它。

    尽管本章给出了JMS的总体概述,但只是给出足够的材料为下一节讨论消息驱动Bean打下基础。JMS具有很多的特性和细节,以至于本书不可能包含内容广泛的JMS。为理解JMS以及如何使用它,需要读者独立研究它。JMS的详细材料,《Java消息服务》,Richard Monson-Haefel和David Chappell(O’Reilly)。花时间学习JMS是很值得的。

待续。。。。。。。。

bill-转自:csdn进入讨论组讨论。

(出处:http://www.knowsky.com)


上一篇:EnterpriseJavaBeansDistilled 人气:358
下一篇:EnterpriseJavaBeansDistilled...... 人气:375
浏览全部J2EE/J2ME的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-10-12 team论坛 v2.0.4 bulid 080916 A
2008-10-12 Roclog v3.1.6
2008-10-12 SupeV v1.0.1 简体中文 GBK
2008-10-12 NetCMS v1.6.0.1010 正式版
2008-10-12 PHP考试系统PPFrame v1.2.7
2008-10-12 LPAS个人相册 v1.6.3
2008-10-12 快问仿百度知道系统 动态-静态-互
2008-10-12 方卡广告防点击系统 V1.0 GB2312
2008-10-12 泡菜内容管理系统[PCMS] v1.0 Bu
2008-10-11 联系人分组工具 v1.1 中文破解版
2008-10-11 FaceMelter变脸 v2.0 汉化破解版
2008-10-11 PathTracker道路跟踪仪 v1.2 破解
2008-10-11 Rooms手机聊天室 v0.6.7 破解版
2008-10-11 RemoteDesktop远程桌面 v1.0 破解
2008-10-11 ProRemote远程调音台 v1.0.1 破解
2008-10-11 PicShare照片共享 v1.0.0 破解版
2008-10-11 Photogene照片编辑器 v1.5 汉化破
2008-10-11 WriteRoom共享文档 v1.0 破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵
SEO対策 中国語教室 ホームページ作成