(计算机软件与理论专业论文)面向方面在信息系统性能优化上的应用.pdf_第1页
(计算机软件与理论专业论文)面向方面在信息系统性能优化上的应用.pdf_第2页
(计算机软件与理论专业论文)面向方面在信息系统性能优化上的应用.pdf_第3页
(计算机软件与理论专业论文)面向方面在信息系统性能优化上的应用.pdf_第4页
(计算机软件与理论专业论文)面向方面在信息系统性能优化上的应用.pdf_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要 本文的主要目标是通过运用面向方面软件开发技术,给出针对信息系统性能 的优化实现方法。信息系统性能问题是开发人员容易忽视的一种非业务功能需求 或关注( c o n c e r n ) 。常常在信息系统进入到运行维护阶段后,性能问题才能被表 现出来。使用传统的软件开发方法,难以按照软件工程中的局部化和松散耦合原 则来实现信息系统性能方面的改进。结果系统业务功能方面的代码与性能优化方 面的代码相互交叉混杂,导致系统软件的可理解性和可维护性差。 面向方面具有对关注的分解与组合能力,并可为软件创造隐含接口。本文通 过应用面向方面技术,以学生成绩系统作为实验对象,对它的数据检索和报表生 成性能进行挖掘与优化,并在优化前后进行实验比较。实验结果表明面向方面的 优化实现方法与传统实现方法,对性能效率的提升基本相同。但面向方面的优化 实现方法不需要修改系统原有的代码与设计,优化过程简单,性能代码精简,系 统性能易于管理与维护。系统模块独立性得到保证,复用性得到提高。 关键词:面向方面,信息系统,性能优化,数据库,软件工程 a b s t r a c t t h eg o a lo ft h ep a p e ri st op r o v i d es o m eo p t i m i z a t i o nm e t h o d st oi m p r o v et h e p e r f o r m a n c e o fi n f o r m a t i o n s y s t e m st h r o u g ha p p l y i n g t l l e t e c h n o l o g y o f a s p e c t 0 r i e n t a t i o n t h ep e r f o r m a n c e o fi n f o r m a t i o n s y s t e m s i sas o r to f n o n b u s i n e s sr e q u i r e m e n t c o n c e r nt h a ti se a s i l yl i e 西e c t e db yt h ed e v e l o p e r u s u a l l y , t h ep e r f o m a 盯船p r o b l e m so c c u ra f t e r 陆ed e v e l o p m e n to f i n f o r m a t i o ns y s t e m s 矗e n u s i n gt r a d i t i o n a l s o f t w a r em e t h o d st oi m p r o v et h ep e r f o r m a n c e ,t h em o d u l a r i n d e p e n d e n c eo fi n f o r m a t i o ns y s t e m sc a n n o tb ea c h i e v e d ,c a u s i n gb u s i n e s sf u n c t i o n c o d e sa n dp e r f o r m a n c e - i m p r o v i n gc o d e st a n 皿e de a c ho t h e r , s ot h eu n d e r s t a n d a b i l i t y a n dm a i n t a i n a b i f i t yo f i n f o r m a t i o ns y s t e m sa r eb a d l yd a m a g e d t h ea s p e c t o r i e n t e dt e c h n o l o g yi sc a p 曲l co fs e p a r a t i n gc e n c e m sa n d r e - w e a v i n gt h e m a n dt h i st e c h n o l o g yc a ni n j e c ti m p l i c i t - i n t e r f a c e si n t ot h es o f t w a r e b a s e do nt h a t ,as t u d e n tg r a d es y s t e mw a s p r o v i d e da sat e s t i n go b j e c t t h e n ,i t sd a t a a c c e s sa n dr e p o r tg e n e r a t i n gp e r f o r m a n c ew a sm i n e da n do p t i m i z e dt h r o u 【g hu s i n gt h e t e c h n o l o g y b e f o r ea n da f t e rt h eo p t i m i z a t i o n ,t h es y s t e mw a st e s t e dt oc o m p a r et h e e f f e c t i v e n e s s t h er e s u l to ft h et e s t ss h o w st h a tt l l ep e r f o r l l q a n c co ft h es y s t e mi s n e a r l yt h es a l i l ew h e t h e ru s i n gt h ea s p e c t - o r i e n t e di m p l e m e n t a t i o no rt h et r a d i t i o n a l o l l e b u tt h ea s p e c t o r i e n t e do n ec a nh a v eas i m p l e ro p t i m i z a t i o np r o c e s sa n dm o r e c o n c i s ec o d e s i nt h em e a n t i m e , t h e r ei sn oc o d em o d i f i c a t i o nh a p p e n e d t h es y s t e r n a n di t sp e r f o r m a n c ec a nb em a n a g e da n dm a i n t a i n e dw e l l t h em o d u l a ri n d e p e n d e n c e o f t h es y s t e mc a nb eg u a r a n t e e d ,a n dt h er e u s a b i l i t yo f t h es y s t e mc a l lb ei m p r o v e d k e yw o r d s :a s p e c t - o r i e n t a t i o n ,i n f o r m a t i o ns y s t e m s ,p e r f o r m a n c eo p t i m i z a t i o n , d a t a b a s e ,s o f t w a r ee n g i n e e r i n g 学位论文独创性声明: 本人所呈交的学位论文是我个人在导师指导下进行的研究工作 及取得的研究成果。尽我所知,除了文中特别加以标注和致谢的地方 外,论文中不包含其他人已经发表或撰写过的研究成果。与我一同工 作的同事对本研究所做的任何贡献均已在论文中作了明确的说明并 表示了谢意。如不实,本人负全部责任。 论文作者( 签名) : 丝啦 扩6 年5月17 日 学位论文使用授权说明: 河海大学、中国科学技术信息研究所、国家图书馆、中国学术期 刊( 光盘版) 电子杂志社有权保留本人所送交学位论文的复印件或电 子文档,可以采用影印、缩印或其他复制手段保存论文。本人电子文 档的内容和纸质论文的内容相一致。除在保密期内的保密论文外,允 许论文被查阅和借阅。论文全部或部分内容的公布( 包括刊登) 授权河 海大学研究生院办理。 论文作者( 签名) : 铷 河海大学硕士论文 面向方面在信息系统性能优化上的应用 1 1 研究背景 第一章绪论 1 1 1 信息系统性能问题的延迟性 从信息技术的发展史中,可以列举很多由于当时条件所限而在设计中考虑不 充分所造成未来( 扩展) 的各种麻烦,如著名的“千年虫”问题、d o s 操作系统 的内存限制问题、i p 地址耗尽问题等。同样信息系统开发时,没有人能保证它可 以满足若干年后的需求,也没有人能肯定若干年后它依然能像设计时的那样流畅 运行。究其原因,是因为信息系统往往有很长的运行维护阶段,几乎占到生命周 期的6 7 。1 ,却要在有限的时间进度内完成。因此,开发人员对所开发的系统是 否能够正确执行其业务功能予以了过分的关注。而对于“系统是否能在五年后保 持着刚刚交付使用时的性能? ”这样的问题,开发人员根本无暇顾及。这种问题 或者是用户自己也不能明确,或者是充满了太多的不确定性,使得具有有限预见 能力的开发人员无法为系统未来的性能留下软件扩展的余地。既使对整个系统进 行强度测试和性能测试,由于系统环境及状态的不同,也难以创造出系统性能出 现问题时的效果。如果退一步设想强度测试和性能测试发现了性能问题,但此时 的信息系统己经编码结束。因此,只能通过修改系统中的某些模块或代码来使系 统满足要求。无论上面哪一种情况发生,开发人员对信息系统性能问题的重视和 处理都将会被拖到系统生命周期的最后几个阶段。这就是信息系统性能问题的延 迟性。从软件工程的角度来看,这种延迟性与软件工程中所描述的“错误发现得 越早就越易修改”的情况相违背,所以修复所需的代价通常也很大另一方面, “越早犯下的错误,往往发现的越迟”1 提示人们性能问题在开发的早期阶段就 应该得到足够的重视。 1 1 2 传统软件开发方法的不足 近些年,计算机与网络技术的高速发展与推广使得信息系统软件演变得非常 复杂。信息系统从两层结构到多层结构转变的同时也反映出信息系统的研究者们 为减轻信息系统复杂性所做的努力。诸女i j j 2 e e ,n e t ,c o r b a 等技术框架的出现, 使得开发人员可以充分利用各种服务器容器所提供的服务来避免他们陷入一些 非业务功能的烦杂细节,例如持久性,安全,事务,远程方法调用,同步等等。 这些中间件技术或构件技术虽然很有效,但还是有其不足之处: 河海大学硕士论文 面向方面在信息系统性能优化上的应用 1 使用这些服务必须要了解相关的技术,并在有关的业务功能代码中掺插 一些调用服务接口所需的代码。结果混合后的代码可读性差,更糟糕的是可维护 性也不好。例如,基于j 2 e e 体系的信息系统在开发时,按照e j b l 1 标准使用了远 程方法接口。运行了一段时期以后,为了提升性能,准备改用e j r 2 o 标准新推出 的本地方法接口。虽然业务功能代码不受影响,但是两种接口的转换将涉及到系 统大部分模块的修改。甚至对调用e j b 服务的客户程序都必须进行相应的改动。 2 对于系统性能这样的关注没有办法将其封装成一个构件,也更不可能在分 析设计阶段对它进行规划。既使系统开发平台提供了池( p o o l i n g ) ,离速缓存 ( c a c h i n g ) ,甚至集群( c l u s t e r i n g ) 等一些提高系统性能的手段,也难免存 在着一些限制。比如说,可供提高性能的项目范围有限,且难以定制与调控,或 者性价比不能令人满意等。 总之,以结构化,面向对象和构件技术为主要代表的传统软件开发方法所开 发的信息系统中,总会有类似于以上这些不符合软件工程中所规定的“软件功能 应局部化”和“功能模块之间应松散耦合”的情况存在。而原因就是因为传统软 件开发方法没有足够的关注分离( s e p a r a t i o no fc o n c e r n s ) 能力”1 。 i i 3 面向方面及其在软件优化上的发展与现状 早在面向对象软件方法趋于成熟之时,即上世纪9 0 年代初,软件理论领域 的一些研究者和工作者就发现了面向对象的不足之处。由于他们工作领域的特 定范围不同,各自提出了不同的针对面向对象的扩展方法,其中最主要的也是 最有影响的一些扩展方法包括:面向主题编程( s u b j e e t - 0 r i e n t e d p r o g r a m m i n g ,s o p ) “”、组合过滤器( c o m p o s i t i o nf i l t e r s ,c f ) 吼”、适 应性编程( a d a p t i v ep r o g r a m m i n g ,a p ) ”1 、面向方面编程( a s p e c t o r i e n t e d p r o g r a m m i n g ,a o p ) “”和元层次编程( m e t a - l e v e lp r o g r a m m i n g ,m l p ) “”等。 这些方法,尤其是a o p ,对面向方面的发展具有重大的推动作用,使人们对面向 方面的认识不再局限于某一领域。这些方法的相互熔合贯通造就了今天面向方面 思想的逐渐成熟。目前,a o p 的主要代表,a s p e c t j 语言,己被广大j a v a 开发领域 的用户所接受,并已被翻译转换到c ,c + 十等其它的编程语言上 。使用a s p e c t j 来开发一些软件的非业务功能十分方便,如持久性,权限安全,事务处理,同步, 臼志记录,监控追踪,错误定位及纠错,软件配置,方法参数有效性检查等“”, 同时可以令软件具有更高的可读性与可维护性;a s p e c t j 可以实现各种设计模式 1 3 , 1 4 j ,但显得更简单也更清晰;如果用a s p e c t j 来实现业务规则“,则易于扩展, 替换和删除。a o p 除了带来编程上的轻松和便利,更重要的一点是:a o p 能帮助开 发者轻松应对软件系统运行维护阶段中的些不可预料的变化,其中包括性能问 2 塑塑查兰堡主堡苎 堕塑查堕垄笪皇墨竺竺! i 垡垡圭塑壁旦 题。从另一个角度看,它也促进了那些已存在并已测试过的软件模块的复用性1 。 近年来,对已运行维护中的软件系统进行面向方面的重构和优化成为了面向 方面的研究热点之一。当前,涌现出了不少对已有系统中的方面进行挖掘( a s p e c t m n i n g ) 、查找( d i s c o v e r y ) 、探索( e x p l o r a t i o n ) 和管理的工具“,例如 a s p e c t b r o w s e r 、a m t ( a s p e c tm i n i n gt 0 0 1 ) 等。而最先将面向方面应用在软件 性能优化上的例子出现在第一篇以a o p 命名的论文中。1 ,这个非常经典的范例说 明a o p 不仅可以保持程序代码的简洁性和易读性,还可以优化提升程序的性能。 而传统开发方法却不能同时满足这两种要求。目前a o p 在软件性能优化方面,常 常被用来实现池和高速缓存等机制。除了带来前面所说的好处以外,还可以得到 较好的执行时间内存空间互换( t i m e s p a c et r a d e o f f ) 调控效果“”。 在软件优化的实际应用层次上, 1 6 中y v o n n ec o a d y 等人提出将面向方面应 用在对操作系统的磁盘数据预存取上,以节省存取时间:再j n j b o s s 应用服务器 中的集群、缓存、资源池等加速软件性能的服务功能皆由面向方面技术进行整合 “”。以上这些研究与应用基本上由国外所主导。而国内对面向方面的研究情况总 体来讲,还处于认识与初步应用阶段。 1 2 研究意义 如今,信息系统已经普及到世界各地的各行各业中。信息业的讯猛发展,行 业竞争的异常激烈,使得人们对信息系统的期望值越来越高。一方面,人们希望 不断提高信息系统收集、存储和处理数据的能力;另一方面,人们又想充分挖掘 以往对信息系统投资的价值,即延长遗留系统( l e g a c ys y s t e m s ) 的生命周期。 可见这里一定会引发矛盾,即旧的系统不能满足新的要求。原因就在于传统软件 开发方法本身的不足,以及开发人员预见能力有限。导致信息系统存在着扩展能 力的限制,其中信息系统性能下降问题更是加大了维护人员的负担。对于运行维 护中的信息系统,目前存在如下的难点:一、信息系统的性能瓶颈点难以查找, 这是因为,一方面,维护人员毕竟不是开发人员,另一方面,随着时间的推移, 相关人员都会对系统内部的设计及编码有所遗忘;二、性能优化难以进行,进行 优化工作必须要对系统多处进行修改,这不仅包括代码修改,还要包括系统设计 文档的修改;三、维护难,在优化完成以后,优化代码散落于系统中的多个地方, 并与系统原有代码相混杂,破坏了原有模块的独立性,不利于后续的维护工作, 如果优化代码出现问题,则还需要再次经历第二点所谈到的不便。 本文吸取了面向方面的关键思想,并进一步研究基于面向方面的信息系统性 能优化方法,扩大了面向方面在软件性能优化上的应用范围。文中的工作成果将 有助于信息系统维护成本的降低,并可以延长信息系统的生命周期。对需要提升 河海大学硕士论文 面向方面在信息系统性能优化上的应用 性能的信息系统而言,本文具有借鉴参考作用。 1 3 本文的工作 本文通过应用面向方面技术,对信息系统的性能优化问题做出了如下的研究 工作: - 首先,本文提出信息系统的优化过程需要有专业的性能优化工具的支持。 据此,使用面向方面技术设计与实现了信息系统性能瓶颈挖掘工具。该 工具可以挖掘出信息系统中存在的性能瓶颈,以及瓶颈的相关信息。 - 本文将学生成绩系统作为案例信息系统,并对其进行性能瓶颈的挖掘工 作。根据挖掘出的性能瓶颈及其相关信息,结合系统设计,选择经典的 性能优化方法,如缓存、池、数据分割等,以面向方面的实现方式对系 统进行改进。 - 对面向方面的优化方案实现方法,进行实验评估。这里通过两次比较来 突出面向方面方法的优点:一、对案例系统进行优化前和优化后的单机 和多机并发实验,确定了面向方面的实现方法可以使得信息系统性能得 到提升;二、对传统实现方法和面向方面实现方法进行比较,确定两者 对性能的提升效果大体相当,但面向方面的实现方法保证了系统原有代 码及相关文档免于修改,因此避免了修改所带来的一切副作用;优化过 程更加简单,优化代码易于维护和理解。 1 4 本文的组织 本文主要内容共分为五章。除了本章以外,其余章节安排如下: 第二章,面向方面及其在软件优化上的研究。对面向方面进行简介;对目前 面向方面在软件优化上的研究热点进行简介。 第三章,面向方面的信息系统性能优化方法。简介案例系统;对该系统进行 性能瓶颈挖掘和分析,并选择适合的优化方案,使用面向方面技术进行优化方案 的设计与实现。 第四章,面向方面优化方案的实验与比较。通过实验,比较案例系统优化前 后性能效率:将传统优化方案实现方法与面向方面实现方法进行效率、优化过程 以及维护上的比较,以证明面向方面优化方案实现方法的优越性。 第五章,总结与展望。对本文工作和成果进行总结;对于不足和有待发展之 处,指明今后进一步工作的重点。 4 河海大学硕士论文面向 面在信息系统性能优化上的应用 第二章面向方面及其在软件优化上的研究 面向方面软件开发所包括的内容主要有四个部分:面向方面基本思想与珲 论、面向方面语言实现机制、面向方面软件工程方法和而向方面相关应用。本章 针对软件性能问题,有选择地介绍一些本文所需要用到的面向方面软件开发中的 知识。 2 1 丽向方面概述 2 1 1 关注与横切关注 要理群甄向方垂,首先需要理解关注、横 切关淀( c r o s s c u t t i n gc o n c e r n ) 和关注分 翅2 1 抽象关注空问 离的概念。关注与需求看似相似却不是同 一概念。开发软件系统首先需要明确需求, 然后才能进行设计与实现。因此需求只是软 件开发生命周期的一个部分,而关注代表了 软件开发生命周期中各方人员( _ 拜l 户、系统 分析员、编程员、项目经理等等) 对系统各 个方面、各个层次、各个阶段特别予以注重 的功能、性能、限制,甚至是一些编程纲节 “8 1 ”1 。因此关注这个概念要大于需求,而需 求只是为了明确关注。分清这两者之润的区 别,将有助于理解面向方亟与传统开发方法 之间的不同之处。 圈2 1 是瓣题域的抽象关注空闻,其中 的每个图形代表了软件系统中的一个特别 的目标,有三种选择来让我们有序组织这个 空闻( 即关注分离,在处理复杂问题的时候, 关注分离原则要求一次只处理廿j 题的一个 方萄,否嗣会引越思维的混乱) :a 按大小, b 按形状,c 按颜色,如图2 2 所示。无论 采取哪种,重新组织的结果可以看成是原 图2 2 组织方法a 按大小,b 按形状,c 按颜色 河海大学硕士论文面向方面在信息系统性能优化上的应用 有抽象关注空间的分类模型,但三个分类模型并不相互关联,因此三个模型的任 何一个都不能独自表示出抽象关注空间中更多的细节和特性。 如果使用传统软件开发方法来对这个空间进行重组分类,那么可将这个空间 按自顶向下逐层分解的方法对其进行分类组织。例如,一种可能的选择就是:先 按颜色做主层分类,再按形状做中间层分类,最后是对大小进行分类,如图2 3 所示。这样形成的树形结构非常符合人的抽象思维逻辑,事实上面向对象中,类 的组织方式和继承机制、组件的构建方式也是这种形式的。但是,这样的分类后 的模型不一定能够正确反映问题域。因为分类之前的抽象关注空间,一种模型与 另一种模型是相对独立的,它们之间不存在从属与包含的关系,如图2 2 。但是 按传统软件开发方法,一种模型却与另一种模型产生了从属与包含的关系,这些 关系是完全被强加的,原因就在于传统软件开发方法对系统的分解 ( d e c o m p o s i t i o n ) 方法不能很好地支持那些既相互关联却不相互包含的关注, 术语称其为横切关注。 横切关注一般会给传纩 软件开发方法所开发的系鸟 带来两个问题:代码的散前 ( s c a t t e r i n g ) 与混杂 ( t a n g l i n g ) 。例如在图2 : 中,圆所代表的关注被分勘 到整个层次模型的各个模块 之中。如果要修改圆形则需 要到各个模块中一一修改, 不能做到一劳永逸,也就是 说可维护性很差:层次模型 虽然是以颜色为主要分解目 标,即颜色关注被清晰地分 解为黑、灰、白。但大小与 形状所代表的关注却与颜色 所代表的关注混杂在一起 图2 3 抽象关注空间的层次化 ( 这里其它关注成为了颜色 关注的从属) 。这会导致可读性不好的结果。 以面向对象开发方法为例,对象占据了系统关注空间的主导地位,于是系统 中其它的关注模型只能服从于对象模型。在企业应用中,这些服从于对象模型的 关注可以包括:同步( s y n c h r o n i z a t i o n ) 、持久性( p e r s i s t e n c e ) 、安全、高 速缓存、配置( c o n f i g u r a t i o n ) 、监控、测试、内存管理、错误检查、事务、 河海大学硕士论文 面向方面在信息系统性能优化上的应用 负载平衡等等3 ,数不胜数。 2 1 2 模块与方面 传统软件开发方法都是按照模块化来进行设计的,一 个模块单元根据不同的软件方法可以是过程、函数、对象 或组件。这样不仅可以减少复杂性、便于修改,而且还容 易实现一个系统不同部分的并行开发。模块化设计中的一图2 4 模块化设计的系统 个关键要素就是模块的独立性,即要求所开发的模块具有单一功能以及与其他模 块之间没有过多的交互。高内聚性低耦合性的模块是保证模块化抽象性和信息隐 藏的基础”1 。 根据上一节内容,传统软件开发方法对问题域进行分 析具有层次性的特点。那么一个按传统软件开发方法设计 的系统也是由不同层次的模块所构成的,如图2 4 所示( 图 中每一个方框代表系统中的一个模块,大方框包含小方框 表示系统中高层次的模块对低层次模块的调用关系) 。由 于传统软件开发方法不能对横切关注给予支持,因此这样 竺篓兰尝宴i 孳挈差鋈要带来的代码散布与混杂问题,而 图2 , 5 含有方面的系统 导致模块独立性大打折扣。 。 面向方面最初的思想是作为传统软件开发方法的一种扩展。通过把横切关注 模块化或局部化成个模块( 这种模块就称为方面) ,并根据一种特殊的组合机 制( 这个组合过程称为编织,w e a v i n g ) 使得方面能和其他模块进行交互完成所 规定的功能。如图2 5 中,灰色多边形为一 个方面,它为系统中的多个模块增加了相应 的功能。对于不同的横切关注,只要向系统 中叠加相应的方面即可。这种方式消除了代 码散布与混杂问题,可以让系统达到较高的 模块独立性,系统的可读性与可维护性也随 之提高。 现在还有一种观点认为纯的面向方面应 篓芝粤竺兰粤当作是一个由多黧关注组成 图2 6 多维超空间 的多维超空间( h y p e r s p a c e ) 。”,这个空间 中的每一个坐标轴代表一种关注维度,如图2 6 显示了一个三维的超空间,图中 楔形体象征实际问题,三个维度形成的切片代表了三种关注。方面就是以程序的 形式包装起来的多维超空间中的每一维关注。同样,需要有特殊的组合机制才能 河海大学硕士论文 面向方面在信息系统性能优化上的应用 将不同的方面组合为最终的系统。 2 1 3 编织机制 面向方面编程语言使用方面来描述和实现系统中不同的关注,即实现了关注 分离。而编制好的系统代码要能够运行,就需要编织机制将不同的关注实现代码 按照编织规则进行重新组合来达到目标系统的执行效果,如图2 7 所示。根据a o p 语言的不同,编织机制也有所不同。最简单的编织器( w e a v e r ) 可以是一个预编 译器,它根据编织规则将不同关注代码相互交叉。新形成的串行代码就可以交给 非面向方面的编译器进行编译,这样就完成了系统所要求的功能。而复杂的编织 器可按编织过程发生的时间分为两大类:静态的和动态的。静态的编织器在程序 运行之前完成编织工作,一般在编译阶段完成。其好处是在程序运行的时候没有 过多的内部开销,不足在于不能处 理程序运行时的动态环境信息;而 动态的编织器在程序运行时进行 编织工作,一般需要有特殊的动态 指令代码修改插入机制的支持。其 优缺点与静态编织器相反。 2 1 4 隐含接口 图2 7a o p 语言通过编织机制来形成系统 传统软件开发方法设计实现的构件( 为了以下行文方便,这里暂用构件代替 提供服务的模块) 需要将其功能代码封装起来,通过其接口向外提供服务。系统 中的其他模块需要按照该接口的调用规则明确地在需要该构件功能的地方提供 接口调用代码,如图2 8 - a 所示。这种明确的接口调用是造成传统软件开发方法 不能封装横切关注的原因之一。因为,如果构件接口发生变化将产生前面所描述 的代码散布情况,会使所有调用模块遭受修改。 面向方面技术所封装的方面通过编织器来向系统中的其他模块提供服务,如 图2 8 - b 所示。其他模块需要方面功能的地点在面向方面中称为连接点( j o i n p o i n t ) 。上文所提到的编织规则有一个很重要的作用,就是定义面向方面中所 谓的切点( p o i n t c u t ) 。切点可以像正则表达式匹配字符串一样和相应的连接点 进行匹配,匹配上连接点的模块可以接受方面所提供的服务。从系统最终执行的 角度来看,面向方面技术和构件技术所得到的执行结果是相同的。不同的地方在 于:构件技术使得模块对构件有明确的依赖性,这通过明确的接口调用反映出来; 面向方面使得模块对方面没有依赖性。当模块需要方面所提供的服务时,通过编 织器实现依赖性注入机制( d e p e n d e n c yi n j e c t i o n ,d i ,又称为控制反转机制, 河海大学硕士论文 面向方面在信息幂统性能优化上的应用 i n v e r s i o no fc o n t r o l ,i o c ) 。2 “得到相关服务。这种d i 机制为系统中的其他 模块创造了可以功能扩展隐台接口,为系统未来盼扩展提供了捷径,系统的生命 周期也不会被限制在李刃始的设计之中。 这种扩展不需要去修改系统原有代码和文档,完全以种增量的方式现实系 统新功能的增期、系统原有功能的修改乃至删除。实际,为了配合这种扩展方 式,阿向方面提供了一种导入( i n t r o d u c e ) 机制或称为类型间声明( i n t e rt y p e ) ”1 。通过导入机制,方面可以对系统 韵静态类登层次结构进行增量式变 动。其巾主要包括:添加成员( 方法、 构造函数、域属性) 到类型中;添加 具体的实现到接曩中;扩展新类型或 实现新的接口;声明方面之间的优先 级;声明自定义的编译错谡或警告; 对异常类型进行转换。 2 1 5a s p e c t j 调用代碍 i 雌瑁斗圆 模块执行进程 图 j b 扣 。 图28 不同的接几方法a 构仆技术b 面向方面 a s p e c t j 是施乐公司帕洛阿尔托研究中心( x e r o xp a r c ) 的一系列研究项目的 结晶。最初的a s p e c t j o 1 版本只能针对同步控制和远程调用, g 序的核心功 能使用j a v a 语言,而同步控制功能使用c o o l 语言描述,远程调用功能使用r i d l 语言描述。1 。经过多年的发展,如今的a s p e c t j 已是一个具有通用能力的a o p 语 言,且列于众多h o p 语占之首,它体现了面向方面软件开发中多数的概念与开发 理念。h s p e c t j 的语言构造是 从j a v a 语言中扩展而来的, 因此所有合法的j a v a 程序也 都是合法的a s p e c t j 程序。 a s p e c t j 编译器生成的是符合 j a v a 字节码规范的c l a s s 文 件,这使得所有符合规范的 j a v a 虚拟机都可以解释、执行 其所生成的代码。a s p e c t j 还 提供了许多有用的工具,其中 包括方面编织器、调试器、文 档生成工具以及可视化方面 浏览器“。a s p e c t j 项目组目 图2 9 连接点示例 9 河海大学硕士论文 面向方面在信息系统性能优化上的应用 前已经提供了一些主要的j a v a 集成开发环境( 1 d e ) 的a s p e c t j 开发插件,其中 包括e c l i p s e 、e m a c s 、j b u i l d e r 、和n e t b e a n s 。 a s p e c t j 在j a v a 语言的基础上,主要加入了如下的语言构造扩展: - 连接点:程序执行过程中明确定义的点,比如程序中调用某个类的特定 方法的地方。连接点可以在方法调用与执行、条件检测、循环的开始或是赋 值动作处,但并不是任何连接点都值得利用。另外,连接点有一个与之相关 联的上下文可以为方面提供有关信息。在a s p e c t j 中主要有以下几个可用连 接点:方法的调用( c a l l ) 和执行( e x e c u t i o n ) 、构造器( c o n s t r u c t o r ) 的调用 和执行、对属性( f i e l d ) 的读写访问、异常处理的执行、对象和类的初始化 执行。例如图2 9 中显示了c l e a r i n g h o u s e 对象7 t r a n s f e r 方法执行处的 e x e c u t i o n 连接点,以及在t r a n s f e r 方法内部调用a c c o u n t 2 对象的d e p o s i t 方法处的c a l l 连接点。 - 切点:用来指明所需连接点、控制流和程序构造。同时,还可以为连接 点上执行的通知( a d v i c e ) 传递连接点所提供的上下文信息。以下面一行代 码为例说明切点是如何定义的: p o i n t c u tl o g o b j e c t c a l l s ( ) :e x e c u t i o n ( * l o g g e r ( ) ) 其中,p o i n t c u t 关键字表明其后是一个命名的切点声明, l o g o b j e c t c a l l s 0 是切入点的名字,e x e c u t i o n ( * l o g g e r ( ) ) 捕获所需的 连接点,e x e c u t i o n 表明此切点捕获对指定方法的e x e c u t i o n 连接点, * l o g g e r 对旨明将要捕获的方法的类名,其中丰为通配符,“”表示任何形式 的参数列表均在范围内。 - 通知:指定当到达特定切入点处应执行的代码。a s p e c t 提供了三种通 知关联到连接点的方式:b e f o r e 、a f t e r 及a r o u n d 。b e f o r e 通知在连接点的 前面运行;a f t e r 通知在连接点的后面运行;a r o u n d 通知在连接点的外层运 行,并有权决定是否运行此连接点处的代码。 - 导入( i n t r o d u c e i n t e r t y p e ) :是一个增加方法或者属性到一个存在 的类中的机制。它们甚至允许改变当前存在的类的显式接口,并且可以引入 一个混合的类,这个类实现了新的接口。导入机制允许将多继承引入到一般 的j a v a 类。 - 方面( a s p e c t ) :a s p e c t j 的模块单元,将切点和通知封装在一起,和 类的概念相似,方面也可以包含方法和属性。方面可以从其它的类或方面扩 展( e x t e n d ) 而来,以及可以实现( i m p l e m e n t ) 某个接口等。 河海大学硕士论文 面向方面在信息系统性能优化上的应用 图2 1 0 说明了一次使用方面来进行事务处理的工作逻辑序列。图中 c l e a r i n gh o u s e 对象有一个t r a n s f e r 方法用于与两个a c c o u n t 对象进行资金转 移业务,如图2 9 中c l e a r i n gh o u s e 从a c c o u n t l 中w i t h d r a w ,然后d e p o i s t 到a c c o u n t 2 中。显然t r a n s f e r 方法需要有事务管理来支持以保持数据一致性。 于是图2 1 0 中的方面t x m a n a g e m e n t 定义了3 个切点: - b e f o r e ,用于在t r a n s f e r 方 法执行前先执行 t r a n s a c t i o n 对象的事务开 始方法b e g i n 。 - a f t e r r e t u r n i n g ,用于 t r a n s f e r 方法正常返回后执 行对象t r a n s a c t i o n 的事务 提交方法c o m m i t 。 - a f t e r t h r o w i n g ,用于 t r a n s f e r 方法出现异常时执 行对象t r a n s a c t i o n 的事务 回滚方法r o ll b a c k 。 这些事务管理的功能无须 c l e a r i n gh o u s e 对象的参与,即它 , 们之间不存在依赖性。方面 图2 1 0 方面的工作逻辑 t x m a n a g e m e n t 的各种变动对 c l e a r i n gh o u s e 对象没有任何影响。 2 1 6 方面的浏览与挖掘 本文在对a s p e c t j 的介绍中 提到,a s p e c t j 项目组目前已经提 供了一些主要的j a v a 集成开发环 境的a s p e c t j 开发插件。这些插 件为开发环境提供了可视化的方 面浏览和导航功能。开发者可以 通过这些功能掌握和调整面向方 面程序中的连接点分布、切点影 响范围和方面所产生的横切结构 等。这使得面向方面的编程工作 图2 1 1 a m t 的主窗口 河海大学硕士论文 面向方面在信息系统性能优化上的应用 十分的方便。这些可视化工具可以进一步地进行扩展,使其具有方面挖掘功能, 如图2 1 1 中所示的a m t 。这一类方面挖掘工具主要通过对软件系统的代码进行 词汇分析( 通过对模式和子串的匹配) 和结构分析( 对代码中类型的使用方式进 行搜索) ,从而发现系统中不同的类模块中所存在的横切关注“。这些工具在 静态代码的分析上确实能够起到方便直观的作用,而对于软件运行时的动态特性 还不能进行支持。 2 2 面向方面在软件性能优化上的应用 软件性能的提高除了针对特定问题进行结构上的优化和算法上的优化外,更 多的情况是通过减少那些耗时资源的存取时间来达到的 ”1 ,例如资源的预存取 ( p r e f e t c h i n g e a g e r l o a d i n g ) 、延迟装载( l a z y l o a d i n g ) 、高速缓存( c a c h i n g ) 和资源池( p o o l i n g ) 等。 按照面向方面的思想,软件性能是软件系统的一种关注。将面向方面应用到 软件性能优化上,还是要通过以上的一些机制来完成。不过面向方面的优点在于 能够将核心业务代码与性能优化代码分离开来,将原本散落在软件系统各处的 性能优化代码集中起统一管理,而这一点是传统软件开发方法所无法办到的。下 面以资源池和缓存的例子来做一个比较。 2 2 1 优化资源池 一般情况下,资源的使用分为“创建一使用一释放”三步,如表2 1 中的伪代 码所示。 表2 1 资源使用伪代码 当资源的创建与释放对于系统来说不需要太多开销的时候,以上的代码没有 河海大学硕士论文 面向方面在信息系统性能优化上的应用 任何毛病可以挑。但是,很多常用的资源,如数据库连接( d bc o n n e c t i o n ) 、 网络s o c k e t 连接和线程等的创建与释放是非常耗费时间的。这些资源如何能被 一次创建多次利用,对于节省时间提高性能就显得非常重要。因此,资源池的出 现就是要解决此类问题。一个典型的资源池接口和其常规的使用方式如表2 2 中的伪代码所示。 ,资源池接口 p u b l i ci n t e r f a c er e s o u r c e p o o l p u b l i cr e s o u r c eg e t r e s o u r c e ( r e s o u r c e d e s c r i p t i o nr d ) ; 从池中得到资源 p u b l i cb o o l e a np u t r e s o u r c e ( r e s o u r c e r ) ;鸺资源放入池中 ) 使用资源池的常规方式 ,r e s p o o l 对象属于r e s o u r c e p o o l 类型 r e s o u r c er e s o u r c e = r e s p 0 0 1 g e t r e s o u r c e ( r d ) ;首先从池中获取资源 i f ( r e s o u r c e n u l l ) 如果池中没有所需资源,就进行资源创建工作 r e s o u r c e - = r e s o u r c e f a c t o r y c r e a t e r e s o u r c e ( r d ) ; ) 臌用资源对象y e s o u r c e 使用完资源后,将资源放入池中,如果池已满则释放资源 i f ( r e s p 0 0 1 p u t r e s o u r c e ( r e s o u r c e ) 一f a l s e ) ( r e s o u r c e d i s p o s e ( ) ; ) 使用资源池需要考虑关于内存空间与执行时间转换的问题。即资源池所带来 的时间性能的提升是以资源池所占用的内存空间耗费为代价的。由于系统中模块 的不同,以及受系统生命周期的影响,开发时,软件设计者对这个空间与时间的 转换要有一个最终的决策似乎是不可能的。因此,是否使用资源池,需要根据系 统的不问模块,不同的生命周期阶段来动态地进行调整。如果按常规资源池的使 用方式,就需要修改系统中那些需要或不需要资源池的模块。显然,这样的修改 任务存在着代码散布的问题。 相比之下,使用面向方面的方式来实现资源池的功能,能让以上的问题迎刃 而解。因为,面向方面的方式完全是一种即插即用( p l u g a n d p l a y ) 的方式。 使用资源池的客户完全可以不用考虑资源池的存在,只要按表2 1 中资源的“创 建一使用一释放”三步走就可以了。资源池完全由方面来进行管理,这样为未来资 源池的扩展提供了方便之门。表2 3 中的伪代码是管理资源池的方面模板。 河海大学硕士论文面向方面在信息系统性能优化上的应用 表2 3 资源池方面的伪代码 定义资源池方面 p u b l i ca s p e c tr e s o u r c e p o o l i n g a s p e c t 在方面中声明一个资源池对象_ r p o o l p r i v a t er e s o u r c e p o o l _ r p o o l = n e wr e s o u r e e p o o l l m p l 0 ; 定义资源创建时的切点 p o i n t c u tr e s o u r c e c r e a t i o n ( r e s o u r c e d e s c r i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论