基于移动代理的Struts 2框架
2013-09-29陈利学赵永清廖浩德
杨 力,陈利学,赵永清,廖浩德
(1.西南石油大学计算机科学学院,成都 610500;2.四川大学计算机学院,成都 610065)
1 概述
随着Internet复杂程度的不断提高和新型网络分布式应用的出现,基于 DCOM/CORBA/EJB的传统C/S分布式计算模型日益暴露出其缺点,已远不能满足当今快速多变的网络应用需求。移动Agent技术集智能Agent、分布式计算、通信于一体,提供了强大、统一、开放的计算模式,适合提供复杂的业务逻辑,并能够迁移到远程主机执行,大幅降低了网络带宽,能有效克服网络不稳定、负载性能和效能等问题。
但是目前大多数应用都是基于Web的应用开发,由于 Web应用的大型化、功能日益复杂,传统 Web页面与业务逻辑混合开发的开发模式已不能适应快速开发的需要,急需一种既能实现企业 Web开发、缩短开发周期、节省开发成本,又易于修改、维护和扩展的开发框架。
本文通过研究移动 Agent理论和 Web开发框架关键技术,分析Agent与MVC模式的结合优势,提出基于移动代理的Aglet-Struts Web应用集成框架,使Aglet在 Struts控制器 action统一调度下,完成 JSP、action和Aglet的交互,实现了显示和逻辑的完全分离[1]。
2 Aglet与Struts结合的优势
Aglet是最早基于Java的移动Agent开发平台之一,Aglet的名字来源于 Agent和 Applet,可以简单地将其看成具有Agent行为的Applet对象。由于Aglet本身具有的主动性、能动性、社交能力、反应能力,与传统C/S模式、移动代码技术、DCOM等技术相比,Aglet集中了它们的优点。
Aglet使得程序的执行尽可能地靠近数据源,降低网络的通信开销,平均负载,提高完成任务的时效,在各Aglet间交互方面表现出了强大的优势和灵活性[2]。
由于 Web应用的逐渐普及,利用基于 MVC的Struts 2框架已经成为构建灵活、高效、易于部署、跨平台的分布式应用程序的主流技术。Struts框架成功实现服务端的模块化,将 Web应用划分为控制器(action)、模型(javaBean)、视图(JSP)。
各组件间实现了松耦合,为大型项目开发提供优势,主要体现在:(1)组件化便于在开发中划分职责,有利于代码重用;(2)可以通过控制器action控制系统全局流程;(3)模块化,通过 javaBean实现新业务,无需修改整个应用,便于后期维护和业务扩展[3-4]。
Aglet间的交互比较容易,Aglet与 Web的交互却很困难,这样在Web应用中就不能充分体现Aglet的优势。但是把Aglet看作是Struts框架中的模型,即业务逻辑,通过Struts 框架把Aglet、控制器(action)和 JSP页面三者有机结合,实现 Web前端与 Aglet的互操作。这样就可以充分体现Aglet和Struts框架的优势,为构建更加灵活、高效、异构的 Web应用框架提供新的手段,具有重要的意义。
3 Aglet-Struts 2框架
3.1 基于移动代理的Aglet-Struts 2框架模型
如图1所示,把Aglet引入到Struts 2框架中,将应用程序分成 3个核心部件:模型(Aglet、Javabean),视图(JSP),控制器(Action、AgletAction),实现 Struts 2与Aglet的整合[5]。
图1 基于MVC的Aglet-Struts 2框架结构
该整合框架模型由6个层组成,分别是表示层、控制层、业务层、持久层、MA服务层和Aglet子系统层。这种框架使用软件分层的思想,将软件的表示层、控制层和逻辑层分开,各层完成自己的功能,避免了以前的软件开发中各部分的功能集中在一起所带来的维护和修改困难问题。
(1)表示层即MVC模式中的视图部分,此层主要由一组JSP文件组成,完成用户界面展示,用户通过浏览器访问系统界面实现与服务器端控制器交互。该层不应该存在模型信息,只有标签,这些标签可以是标准的JSP标签,也可以是用户自定义的标签[6-7]。
(2)控制层即MVC模式中的控制部分,此层继承action类,扮演中央控制器的角色。利用 struts.xml配置信息,根据action名字与类名的映射关系,调用适当的action对象实现对模型的控制。action类负责调用模型的方法,更新模型的数据状态,并控制一个具体的应用流程,它本身也可以完成一些实际的业务逻辑[8]。
action控制器充当用户请求和业务逻辑处理之间的适配器,将请求与业务逻辑分开。它侧重于控制应用程序的流程,应用程序的逻辑放在单独的 Java文件中,这样可以提高应用程序的灵活性和可重用性。
在Aglet-Struts 2框架中有一个特殊的action,即AgletAction,它用来控制移动Aglet子系统中的业务流程,移动 Aglet子系统中主要由一个或多个AgletServer组件和Context内创建的Aglet组件组成,它们之间的关系如图2所示。
图2 AgletAction与AgletServer的关系
(3)业务层即 MVC模型部分。主要以 JavaBean或 Aglet形式存在,主要处理表现层的请求并利用DAO(封装了对底层数据库的操作)组件进行持久层操作、Remoting与 MA服务层交互并将所得信息在业务层进行汇总并以 JSP页面的形式将信息反馈给用户[9]。
(4)持久层主要利用持久层框架如Hibernate进行底层数据库的持久操作,从而实现对数据库访问的透明化处理。数据库的连接管理、事务处理由框架的容器处理,从而提高数据存储与访问效率。
(5)MA服务层通过一个 Java类,实现自定义的AgletServer,该 Server具有创建 Aglet并为 Aglet的运行提供Aglet上下文环境(Aglet Context)和Aglet间通信的代理机制。创建好的Aglet能够被派遣到子系统执行相应的任务。同时利用 Remoting将此层导出为RMI服务供业务层调用,从而实现业务层与Aglet子系统的整合。
(6)Aglet子系统层直接由Aglet系统提供的Tahiti服务器作为MA的运行环境,接收从MA服务层派遣过来的 Aglet,并由此 Aglet执行相应的业务处理任务。MA服务层和子系统管理层,子系统管理层和子系统管理层间采用ATP(Aglet Transfer Protocol代理传输协议)进行通信,信息的传递通过获取Aglet代理(AgletProxy)来实现。
3.2 工作流程
用户(User)通过浏览器(Browser)访问中心Web服务器,并提出HTTP请求。
HTTP请求被运行在 Web服务器上的 Struts PrepareAndExecuteFilter(实际是一个 Servelet,被定义在 Web.xml文件中)所拦截,并转交给相应的控制器(action)处理。
控制器分为页面跳转控制器、用户控制器、业务逻辑控制器,并定义在 struts.xml文件中。页面跳转主要用于实现页面间的跳转。用户登录控制用于验证用户的操作权限。业务逻辑处理控制用于处理各个模块之间的业务。当控制器处理完转交给它的请求时,通过result属性返回一个携带数据的视图,并通过视图解析器(View Resolver)解析JSP为HTML页面并呈现给用户。控制器通过数据访问对象(DAO)与持久层框架交互实现底层分布式数据库访问。通过 RMI对MA服务(MA Server)的访问,实现控制器与MA的交互,从而实现Web应用与MA交互的整合。
MA服务层(MA Server)处理从控制器传来的请求,生成相应的Aglet并派遣到MA子管理系统上执行任务。比如生成静态Aglet并派遣到子管理系统上,此静态Aglet常驻在子管理系统上,并根据MA服务层所初始的 IP地址表,对派遣到的各子管理系统进行监控。在执行网络任务时,静态Aglet会对所收集的数据进行处理和过滤,并调用DAO与持久层交互并将实时数据存入分布式数据库中。
当中心 Web服务器要获取各个子管理系统所管理的数据时,可以利用 MA服务层生成一个消息Aglet,此消息 Aglet携带各个子管理系统的 IP表,根据这个IP表,此消息Aglet就可以在各个子管理系统间迁移。当消息Aglet到达子管理系统时,它与常驻其上的静态Aglet通信,获得所管理的数据并迁移到下一个子管理系统,直到遍历完所有的子管理系统后返回 MA服务层。MA服务层接收返回的消息Aglet,提取其中的数据,返回给相应的控制器处理。控制器再返回相应的视图JSP,并调用视图解析器解析JSP页面并呈现给用户,供用户查询和分析[10-11]。
4 Aglet-Struts 2集成框架的应用
4.1 数字气田生产管理现状
由于气田的广泛分布性,气田各井站离管理中心一般相距较远,形成了以作业区、气矿(营销部)、分公司3级管理体系。井站数据通过语音电话、手持移动设备或自动化采集等方式经由无线网络实时进入作业区数据库。作业区数据库存储详细的基础数据。气矿(营销部)数据库存储本单位管辖区一定综合数据,同时在作业区和气矿级实施远程 Web监控。分公司数据库存储本公司管辖的各矿区(营销部)的综合数据。作业区与气矿(营销部)之间网络连接形式多样,速率不等,导致其稳定性较低,而客户服务器模式要求实时在线,在数据量大的情况下,可靠性较差。基于移动代理的Struts 2 MVC分布式集成框架,能有效解决系统运行的稳定性和 Web浏览的及时性的矛盾,特别适合气田远程监控分布式计算的需要。
4.2 数字气田远程监控移动代理平台
远程监控移动代理平台负责与作业区移动代理平台交互。采用无线网络作为传输介质。创建监控代理、报警代理、配置代理,并派遣到各现场监控网络点完成相应的执行任务。作业区移动代理平台获取所需生产、安全、设备状态等信息,通过Struts 2框架的agletaction完成代理平台中相应 Aglet与数据持久层的交互,使得数据永久保存到Oracle数据库中。设备状态Bean、数据查询Bean、报警Bean在控制中心的调度下,通过DAO与数据库交互,完成与相应视图的绑定,中心 Web服务器解析 JSP视图页面,然后转发解析后的HTML页面,分别呈现给生产、安全、管理部门以及移动 Web用户,最终实现现场数据的远程监控和现场设备的控制。该平台体系结构如图3所示。
图3 Aglet-Struts 2移动代理平台体系结构
4.3 系统实现
系统基于 MVC Struts 2框架,采用 IBM Aglet Workbench作为Mobile Agent开发支撑平台。开发工具选择Eclipse,服务器操作系统为Linux,中心Web服务器为tomcat,数据库为Oracle。采用Tahiti Server作为服务代理来管理Aglet的移动,并提供通信、安全等服务。
由于要把Aglet整合到Struts 2框架中,因此必须在框架中开发一个服务代理agletaction,由它来控制移动 Aglet的运行。通过控制中心 action启动agletaction服务代理对象,然后利用该服务代理对象调用移动代理 Aglet完成数据库的查询和更新操作。
在Eclipse下无法运行Aglets程序,采用在Eclipse环境下编译Java源程序,然后放到Tahiti下运行。由于气矿移动代理平台与作业区移动代理平台属于主从关系模式,因此气矿移动平台中的master Aglet把任务委派给作业区Slave Agent,Slave Agent移动到现场完成数据采集任务或控制任务后返回结果。
创建作业区Slave Agent是在Aglet类中的run()方法中进行,主要代码如下:
String host=getAgletContext().getHostingURL().toString();
URL dest=new URL(“atp://admin:4500”);
AgletProxy thisProxy=getAgletContext().getAgletProxy(getAgletID());
getAgletContext().createAglet(getCodeBase(),”mySlave”,null);
首先使用 getHostingURL()方法获得当前执行环境的 URL;接着创建一个 URL对象,指定子 Agent将被派往的目标主机地址,通过在getAgletProxy()方法中指定当前Aglet,即主Agent的ID获得其代理;方法 createAglet用于创建子 Agent。其中,getCodeBase()用来获得包含Aglet类代码所在位置。当子 Agent被创建时会首先调用方法:onCreation(Object args){},接着将自身派至目标主机 dispatch(destination)。
5 结束语
本文将Aglet引入到Struts 2框架中,提出了基于移动代理的 Aglet-Struts 2集成框架。该框架通过构建一个服务代理 agletaction,把移动代理平台和Struts 2紧密联系起来,既发挥了移动Agent减少网络开销、平均负载和提高任务时效的优点,又发挥了Web框架Struts 2结构清晰、代码简洁、易于部署、操作简单和跨平台的优势。
将该框架应用到气田生产数据远程监控系统中,较好地解决了移动Agent与Web互操作问题,提高了数据监控的及时性和稳定性。该框架的成功应用为复杂分布式计算提供了新的模式和手段。
[1]Hu Jian, Zhao Rui, Qiu Xiaomei.A Network Management Model Based on Mobile Agent System[C]//Proc.of International Conference on Apperceiving Computing and Intelligence Analysis.[S.l.]: IEEE Press, 2008: 279-283.
[2]Oshima M, Karjoth G, Ono K.Aglets Specification 1.1 Draft[EB/OL]. (2009-05-02). http://www.trl.ibm.com/aglets/spec11.htm.
[3]Chen Caixian, Li Li.The Analysis of Struts Framework and Its Improvement[J].Computer Applications and Software, 2010, 27(1): 26-28.
[4]Papastavrou S, Samaras G, Pitoura E.Mobile Agents for World Wide Web Distributed Database Access[J].IEEE Transactions on Knowledge and Data Engineering, 2000,12(5): 802-820.
[5]Jou Ahyh-Hong, Kao Shang-Juh.Agent-based Infrastructure and an Application to Internet Information Gathering[J].Knowledge and Information System, 2002,4(1): 80-95.
[6]马淑娇, 叶春明, 杨坚争.Mobile Agent在分布式数据库信息查询的应用研究[J].计算机工程与科学, 2010,32(6): 103-108.
[7]Xua Yingyue, Qi Hairong.Mobile Agent Migration Modeling and Design for Target Tracking in Wireless Sensor Networks[J].Ad Hoc Networks, 2008, 6(1): 1-16.
[8]Zgaya H, Hammadi S, Gh’edira K.A Migration Strategy of Mobile Agents for the Transport Network Applications[J].Mathematics and Computers in Simulation, 2008, 76(5-6):345-362.
[9]刘大有, 杨 博, 杨 鲲, 等.基于旅行图的移动Agent迁移策略[J].计算机研究与发展, 2003, 40(6): 838-845.
[10]张云勇, 刘锦德.移动 Agent技术[M].北京: 清华大学出版社, 2003.
[11]Sayyaadi H, Moarref M.A Distributed Algorithm for Proportional Task Allocation in Networks of Mobile Agents[J].IEEE Transactions on Automatic Control, 2011,56(2): 405-410.