收稿日期:2003-10-16作者简介:高 燕(1976—),女,四川人,硕士研究生,主要研究方向为计算机网络与信息系统。
E JB 中用JMS 模拟多线程机制的设计和实现高 燕,李旭伟,文 震(四川大学计算机学院,四川成都610064)摘 要:多线程机制是提高系统执行效率的关键,但对于采用E JB 技术的服务器端,由于E JB 规范限制使用多线程机制,因此执行效率往往不那么令人满意。
针对E JB 中不能使用线程这一缺陷,文中给出了在E JB 中如何用J MS 来模拟多线程机制并提供了一个具体的实现方案,将该方案用于网管系统中并发的获取各网络设备的MIB 信息以计算某一网络性能指标时取得了令人满意的成绩,大大缩短了系统运行的时间。
从而可知在E JB 中采用J MS 技术来模拟多线程机制不仅在理论上可行,在实际应用中也是可行的。
关键词:多线程机制;企业JavaBean ;Java 消息服务中图分类号:TP311.52 文献标识码:A 文章编号:1005-3751(2004)07-0040-03Design and Implementation of Simulating MultithreadArchitecture with JMS in EJBG AO Yan ,L I Xu 2wei ,WEN Zhen(Department of Computer Science ,Sichuan University ,Chengdu 610064,China )Abstract :It is a kind of key technology of multithread architecture to improve system executive efficiency ,but server uses E JB technology has not satisfying executive efficiency ,because E JB technology prohibits developers from using multithread architecture.This paper has explained how to simulate multithread architecture with J MS and presented a design according to the fact that multithread architecture can not be used in E JB ,when network management system uses the design to collect MIB information of network devices by which a network performance index can calculated ,the result is very good and executive time is shortened.So the design of simulating multithread architec 2ture with J MS in E JB is feasible not only in theory ,but also in application.K ey w ords :multithread architecture ;E JB ;J MS 随着J2EE 规范的成熟,E JB 技术已经在很多企业级的解决方案中得到了应用。
针对软件执行效率这一客户关心的问题,一般采用的是多线程机制实现并发处理,但是对采用E JB 技术的应用服务器端这一问题却没能解决,因为E JB 规范为了消除与E JB 容器管理死锁、线程和并发问题的责任相冲突的可能性,限制使用任何方法启动、停止和管理线程。
这就提出一个问题:在E JB 中如何实现多线程的机制?答案是采用J MS 技术。
1 相关技术介绍1.1 EJB (E nterprise JavaB eans)简介E JB 是实现了特定商业逻辑的JavaBean ,它部署在应用服务器端的Container 中,可以灵活地加载、载出[1]。
J2EE 使用E JB Server 作为商业组件的部署环境,在E JB Server 中提供了分布式计算环境中组件需要的所有服务,例如组件生命周期的管理、数据库连接的管理、分布式事务的支持、组件的命名服务等等,因此开发人员可以将精力更多的放在业务逻辑的实现上。
E JB 支持多种客户端的访问,HTTP 的客户端可以通过Web Server 上的Java Servlet 或者J SP 发出请求,由J SP 中嵌入的Java 代码调用运行在E JB Server 中的E JB 。
而其它的客户端,可以通过IIOP 直接访问运行在E JBServer 中的组件。
E JB 主要由会话bean (Session Bean )和实体bean (Entity Bean )、消息驱动bean (Message -DrivenBean )构成。
会话bean 代表客户端代码需要调用的操作。
它是业务处理对象,实现了业务逻辑、业务规则、算法和工作流程。
实体bean 用来代表底层的对象。
最常用的是用实体bean 代表关系库中的资料。
消息驱动bean 是在E JB2.0规范中新增的一种Bean 类型。
它是一种可以接收J MS 消息的特殊的组件。
由于MDB 不是RPC 组件,因此区别于其它类型的E JB ,MDB 不需要Remote 和Home 接口。
1.2 JMS(Java Message Service)简介(1)J MS 产生背景。
第14卷 第7期2004年7月 微 机 发 展Microcomputer Development Vol.14 No.7J uly 2004随着分布式系统的规模和复杂度的提高,一直在中间件中占主导地位的同步式通讯方式越来越显示出它的局限性,于是面向消息的中间件(Message Oriented Middle2 ware,MOM)孕育而生:发送者将消息发送给消息服务器,消息服务器将消息存放在若干队列中,在合适的时候再将消息转发给接收者,这种模式下,发送和接收是异步的,但是已有的MOM系统由于没有一个通用的标准,系统之间很难实现互操作和无缝连接。
Java Message Service(J MS)是SUN提出的旨在统一各种MOM系统接口的规范,它包含点对点(Point to Point,PTP)和发布/订阅(Publish/ Subscribe,pub/sub)两种消息模型,提供可靠消息传输、事务和消息过滤等机制[2]。
(2)消息系统的两种模式。
Pub/Sub消息系统支持一个事件驱动模型,消息产生者和使用者都参与消息的传递。
产生者发布事件,而使用者订阅感兴趣的事件,并使用事件。
产生者将消息和一个特定的主题(Topic)连在一起,消息系统根据使用者注册的兴趣,将消息传给使用者。
Pub/Sub必须保证某个节点的所有发布者发布的信息准确无误地发送到这个节点的所有消息订阅者。
在点对点的消息系统中,消息分发给一个单独的使用者。
这类消息传输建立在消息队列(Queue)的基础上,每个客户端对应一个“进入”消息队列,客户端发送消息到对方的消息队列中,从自己的消息队列读取消息。
(3)J MS概述。
E JB2.0中的J MS E JB2.0以两种方式支持J MS的集成[3]:作为一种bean可用的资源和作为一个Mes2 sageDrivenBean,当将J MS用作一种资源时,使用J MS API 的bean就是消息的产生者或发送者。
在这种情况下, bean将消息发送给称为主题或队列的虚拟信道。
另一方面,MessageDrivenBean(MDB)则是消息的使用者或接收者,它监听特定的虚拟信道(主题或队列),并处理发送给该信道的消息。
消息是J MS中的一种类型对象,由两部分组成:报头和消息主体。
报头由路由信息以及有关该消息的元资料组成;消息主体则携带着应用程序的资料或有效负载。
根据有效负载的类型来划分,可以将消息分为几种类型,它们分别携带:简单文本(TextMessage)、可序列化的对象(ObjectMessage)、属性集合(MapMessage)、位元组流(BytesMessage)、原始值流(StreamMessage),还有无有效负载的消息(Message)。
J MS定义了Java中访问消息中间件的接口。
J MS只是接口,并没有给予实现,实现J MS接口的消息中间件称为J MS Provider。
J MS主要接口见表1[2]:其中:ConnectionFactory:连接工厂,J MS用它创建连接。
Connection:J MS客户端到J MS Provider的连接。
Destination:消息的目的地。
Session:一个发送或接收消息的线程。
MessageProducer:由Session对象创建的用来发送消息的对象。
MessageConsumer:由Session对象创建的用来接收消息的对象。
表1 J MS主要接口MS父接口PTP Pub/SubConnectionFactory QueueConnectionFactory TopicConnectionFactory Connection QueueConnection TopicConnectionDestination Queue TopicSession QueueSession TopicSessionMessageProducer QueueSender TopicPublisherMessageConsumer QueueReceiver,QueueBrowsey TopicSubscriber3 网管系统中性能指标监测的设计和实现(1)问题提出。
网管系统中,在进行性能指标监测时,性能指标绝大部分是通过设备或网络上取得的原始数据计算而成。
例如对于链路利用率,它的计算公式为:链路利用率= (Δif InOctets+ΔifOutOctets)×8ifSpeed×Δt×100,它是由五个采集的原始数据计算而成。
在实际的计算过程中需要将五个原始数据分别得到才能计算。
为了提高获得原始数据的速度,在此采用J MS技术,系统可以一次向应用服务器发送五条采集相关原始数据的命令,服务器就可以采用模拟多线程的方法执行并返回,这样获得原始数据的速度就比以往提高了五倍,从而使系统的总体执行时间降低。