基于SSH架构的代码自动生成技术的应用研究

来源 :电脑知识与技术·学术交流 | 被引量 : 0次 | 上传用户:bin_go_0820
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:在企业级应用开发中存在着项目开发周期长,开发效率低,不能快速响应需求变化等普遍问题。而代码自动生成技术正是解决这些问题的有效途径之一。SSH架构目前是企业级应用中最广泛的J2EE架构之一,本文对基于该架构的代码自动生成技术进行了探讨,通过对开源框架AppFuse进行研究,提取出了其基于SSH架构的快速开发模块,对该模块进行了改进,进一步增强了其代码自动生成能力,并将改进后的模块应用于一权限管理系统的开发中进行了验证。
  关键词:SSH架构;Appfuse;代码自动生成
  中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)20-20272-03
  
  Application Research on Automatic Code Generation Based on SSH Architecture
  LI Jin-hai
  (Modern Education Technology Center,Qingdao Technological University,Qingdao 266033,China)
  Abstract:There are several common problems in the enterprise-ready application development, such as long project development life, low development efficiency, slow response to changing demands. Automatic code generation technology is the very one of effective ways to solve these problems. SSH architecture is one of the most widespread used J2EE architectures in the present. This paper discusses the automatic code generation technology which can be used in SSH architecture. Through the research on the Open Source framework Appfuse, this paper distracts its fast development module based on SSH architecture, improves the code generation ability of the module, and applies this improved module in the development of a privilege management system to have a check if it works well.
  Key words:SSH Architecture;Appfuse;Automatic Code Generation
  
  随着企业信息化的发展,J2EE技术的应用已经日益广泛。在J2EE体系架构中,基于各种开源框架的J2EE架构的应用逐渐成为主流。优秀的开源框架在J2EE中的应用在一定程度上也促进了企业级应用的发展。然而,在实际开发中仍然存在着项目开发周期长,开发效率低,不能快速响应需求变化等普遍问题。代码生成技术的发展已逐渐成为解决上述问题的有效途径之一。本文将对应用广泛的SSH架构的代码自动生成展开讨论。
  
  
  1 SSH架构
  SSH架构就是一个基于三种开源框架Stuts,Hibernate和Spring的轻量级J2EE架构,目前已是企业级应用开发中应用最广泛的J2EE架构之一。其架构层次主要划分为:表现层,业务层,数据持久层和领域对象层。在表现层中应用了Struts框架,这种基于请求驱动的MVC框架给架构也带来了清晰的MVC划分。在业务层引入Spring,使用其提供的IoC容器对业务类进行装配和管理,使类与类之间的耦合度降到最小,利用其提供的AOP框架对业务层中的事务进行声明式管理。由于Spring对Hibernate提供了良好的支持,通过使用HibernateTemplate可以方便地对数据进行持久化操作。数据持久层正是由Spring和Hibernate共同打造的。其中DAO接口的装配和管理也是由Spring提供的IoC容器实现的。
  该类架构层次清晰,结构明显,同一层中类或接口的代码往往具有类似的结构,非常适于使用代码生成工具实现部分代码自动生成。
  
  2 AppFuse框架
  
  AppFuse 是一个开源项目,它使用了在 Java 平台上构建的开源工具来帮助开发者快速而高效地开发 Web 应用程序。它使用 Ant 来驱动测试、代码生成、编译和部署。它提供了目录和包结构,以及开发基于 Java 语言的 Web 应用程序所需要的库。AppFuse支持的Web框架有:Struts、Spring MVC、WebWork、JSF and Tapestry,支持的持久层框架有:Hibernate和iBates,支持的测试环境有:DBUnit,Junit,Jmock和Canoon’s Web Test。AppFuse中集成了XDoclet,并应用它自动生成代码和相关的配置文件。
  Appfuse实现代码自动生成的核心就是应用XDoclet引擎按照代码模板文件进行代码生成。Appfuse要支持很多不同的框架和技术,所以其中的代码模板就要做到最通用。代码模板通用性的提高,在一定程度上降低了其功能和效率。而且,Appfuse中代码自动生成模块只能生成简单少量的Spring配置文件,大部分的配置工作没有实现自动化。基于此,本文對Appfuse中支持Struts,Hibernate和Spring的代码自动生成模块进行了提取,改进了其中的代码模板文件,增强了该模块的代码自动生成能力,并使得Spring配置文件的大部分配置工作实现自动化。
  
  3 基于Struts,Hibernate,Spring框架的J2EE架构的代码自动生成
  
  3.1 代码自动生成的任务列表
  因为Ant配置文件build.xml是代码自动生成的控制核心,所以可以通过改写build.xml文件提取出Appfuse中的相关模块。修改后的build.xml文件包括:变量配置如项目包的名称、源文件目录等,定义相关类的引用路径,还有一系列的代码生成任务。任务列表如下:
  <target name="help">
  <echo message="提供以下任务:" />
  <echo message="create-dir-->生成工程目录"/>
  <echo message="generate-hbm -->运行HibernateDoclet,生成Hibernate 类的映射文件" />
  <echo message="schemaexport -->运行SchemaExport,利用hbm.xml 文件生成数据表" />
  <echo message="gen-forms --> 运行xdoclet,生成相应的Form类文件"/>
  <echo message="webdoclet -->运行webdoclet,生成Struts配置文件和validation.xml" />
  <echo message="gen --> 运行xdoclet生成相应类的dao,daoHibernate,manager等文件"/>
  <echo message="move-gens--> 把生成相应类的dao,daoHibernate,manager等java文件移到当前工程文件夹下"/>
  <echo message="gen-springxml --> 生成spring的配置文件context-spring.xml" />
  </target>
  3.2 对Appfuse中代码自动生成模块的改进
  使用XDoclet自动生成代码需要有代码模板以及相应模板语言的支持,另外改进该模块时加入了一些通用基类,这些都是代码自动生成模块的基本组成部分。代码模板文件主要应用了Form和Method两个标签,其中Form标签是Appfuse中自定义的,而Method标签则是在原有XDoclet标签的基础上做了扩展。提取出的模块仍然需要Appfuse中FormTagsHandler和MethodExTagsHandler这两个标签类的支持,应把他们置于模块中WEB-INF的Class目录下。以下就是对原有模板文件的修改及改进:
  (1)对Dao.xdt模板文件进行了改进,添加了两个常用方法,merge()以及find()方法。前者是用于在一个session中存在两个相同的对象拥有同一个identifer的情况下,而后者则用于执行HQL查询语言。两者在项目开发中使用频率颇高,所以需要增加。
  (2)对相应的DAOHibernate类模板即DAO的实现类进行相应的改进,实现merge()和find()方法。
  (3)在相应的DAOTest类模板中添加testMerge()和testFind()方法。
  (4)在manager类模板中添加add方法,主要是在添加一个新对象时需要先判断是否有重复,所以应该与save方法分开。
  (5)改进DaoHibernate.xdt文件,原模板文件中的get()只适用于对象的主标示的类型为java.Long.*中的情况,修改模板后使之也适用于long和int的情形。
  (6)修改Manager.xdt,去掉了用不到的import语句。
  (7)在ManagerImpl.xdt文件中添加 import .service.Manager;在改进DaoHibernate.xdt文件后应该相应的修改ManagerImpl.xdt中的remove()和get()方法。
  (8)DaoTest.xdt,添加自己的BaseTestCase,然后修改DaoTest.xdt使所有的DaoTest类继承BaseTestCase。修改testAdd()中“verify a primary key was assigned”的语句,使其也适用于pirmary key是long 和int 的情形。
  (9)ManagerTest.xdt,修改模板使ManagerTest类都继承MockObjectTestCase,修改模板文件中get()和remove()方法,使之也适用于pirmary key是long 和int 的情形。
  (10)去掉了Appfuse框架中context-hibernate.xdt和context-service.xdt模板文件。通过在DaoHibernate.xdt和ManagerImpl.xdt模板文件中添加相应的XDoclet标签(@spring),利用xdoclet.modules.spring.SpringDocletTask任务可以自动生成spring的配置文件,省去了人工维护。
  通过以上的修改和改进,使得这些模板功能更加强大,更符合我们的编程习惯从而更加实用。其中<8><9><10>都是对原有模板文件比较大的改进,在一定程度上比Appfuse中的原有模块更能提高开发效率。
  3.3 代码自动生成模块的应用步骤
  应用该模块的步骤如下:
  (1)在build.xml中设置项目的程序包、源文件目录、生成文件的输出目录、XDoclet模板文件放置目录、输出的Form文件目录、输出的测试类文件目录等一系列变量。
  (2)设置各个库的引用路径,如Spring,Hibernate的jar文件 的引用。
  (3)运行build.xml中的create-dir任务,创建工程详细目录。
  (4)编写领域对象类,类文件中要添加详细的XDoclet标签;在关系数据库中建立一个空数据库文件。
  (5)顺序执行Ant任务generate-hbm,schemaexport,gen-forms,gen-forms,gen,move-gens,gen-springxml,可以自动的连续执行也可以单步执行。
  通过执行以上一系列任务,就会在相应的目录下自动生成Hibernate配置文件,相应领域对象的Struts Form文件以及在Struts-config.xml中的相关配置,领域对象对应的Dao接口及Hibernate实现类,领域对象对应的Manager接口及简单实现类,相应DaoTest类和ManagerTest类文件,还有简单的Spring配置文件。此外,还在已创建的数据库中产生与领域对象对应的数据表。
  3.4 改进后模块的优势
  这样在整个架构中,一旦实现领域对象层,以下内容会自动实现:(1)基于Hibernate的对象关系映射层。(2)基于Hibernate的数据持久层。(3)基于Spring的业务层的部分代码,即Manager接口和Manager实现。对于Manager实现还需要根据不同的业务作相应的修改。(4)基于Struts的表现层的部分代码,即在应用中可能会用到的Struts中的Form类,对应每一个领域对象先自动生成一个Form,以节省可能的工作量。此外,针对数据持久层和业务层接口的测试用例也会自动生成,大部分可以直接应用,只有小部分需要稍作修改以增强测试效果。
  
  4 基于SSH架构的代码自动生成模块在权限管理系统的应用
  
  4.1 RBAC模型
  本权限管理系统基于RBAC模型设计。RBAC(Role-Based Access Control)模型的基本思想就是根据安全策略划分出不同的角色,资源访问许可被封装在角色中,用户被指派到角色,用户通过角色间接地访问资源。RBAC 的最大优点在于它能够灵活表达和实现组织的安全策略,使管理员从访问控制底层的具体实现机制中脱离出来,十分接近日常的组织管理规则。RBAC 被认为是一种更普遍适用的访问控制模型,可以有效地表达和巩固特定事务的安全策略,有效缓解传统安全管理处理瓶颈问题。其中RBAC96模型如图1所示。
  
  4.2参照RBAC模型以及实际需求对权限管理系统进行建模
  此权限管理系统把权限管理和组织机构管理结合起来,分配给用户的角色来自于部门,部门和角色之间是一对多的关系。权限许可是针对某一权限资源对象和权限操作,所以权限许可和权限资源对象以及权限操作都是一对一的关系。通过Borland公司的建模工具Together,将权限管理系统模型建立如下:
  
  4.3 利用代码自动生成模块进行开发
  按照3.3所讨论的步骤,先进行(1)到(3)步。然后根据图2中的模型,开始编写领域对象层代码并在代码中添加XDoclet標签。再依次执行第(4)、(5)步后,就会在相应的目录下自动生成了Hibernate配置文件,User等领域对象的Struts Form文件以及在Struts-config.xml中的相关配置,对应的Dao接口及Hibernate实现类,对应的Manager接口及简单实现类,相应DaoTest类和ManagerTest类文件,还有简单的Spring配置文件。此外,还在已创建的数据库中产生与领域对象对应的数据表。在该系统开发完毕后,将利用该模块自动生成的代码与已经完成的代码进行了比较,经估算可以节省近40%的代码量,于是就节省出了大量的时间用于核心业务逻辑的处理。
  
  5 总结
  
  改进后的自动化模块可以在相对稳定的对象关系映射层和数据持久层实现完全的自动化,而在业务层和表现层也可以减少一部分代码量,并且测试方面的代码量也会大大减少。 所以,在类似基于Struts,Hibernate,Spring的轻量级J2EE架构的系统的开发中应用该自动化模块会大大提高工作效率,缩短项目周期,提高对需求变化的快速响应速度。
  
  参考文献:
  [1] Rod Johnson.J2EE Development Frameworks[J].Computer,2005(01)107-110.
  [2] 汪厚祥,李卉.基于角色的访问控制研究[J].计算机应用研究,2005(4):125-127.
  [3] Eric Evans.Domain-Driven Design Tacking Complexity in the Heart of Software[M].Pearson Education,2004:48-49.
  注:“本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。”
其他文献
摘要:XML文档信息容量的增长、数据敏感程度的增加,对异构数据源集成系统提出了新的挑战。为了降低查询复杂度、提高查询效率、增强数据库文档信息的安全性,本文采用感知情景因素的RBAC扩展模型,用一种新的基于XML的访问控制描述语言描述异构数据库集成系统中的访问控制策略,并使用查询优化技术,构造不确定性自动机(NFA)对用户查询进行重写。通过这些技术,最终过滤掉异构数据库集成系统中不符合安全策略的查询
期刊
摘要:制作软件安装程序是软件开发的一个重要组成部分,如果不能将软件制作成安装程序,软件就不能在其他机器上运行,而有些开发语言本身所带的制作安装程序的功能不尽完善,本文介绍利用Setup Factory 7.0软件来制作安装程,这一软件可以制作出精美的专业性很强的软件安装程序。  关键词:软件;制作;安装程序  中图分类号:TP312文献标识码:B文章编号:1009-3044(2008)20-302
期刊
摘要:本文对SPCE061A芯片的主要特点进行了描述,并运用SPCE061A相关原理提出了一个简单基于SPCE061A的IP电话系统。  关键词:SPCE061A;IP电话;系统设计  中图分类号:TN912文献标识码:A文章编号:1009-3044(2008)20-30229-02  The IP Phone System Based on SPCE061A   BAI Zeng,GUO Cui
期刊
摘要:本文简述了调制解调系统的发展现状及FPGA的相关知识,介绍了QDPSK调制解调系统的理论算法,提出了QDPSK解调调制系统的具体实现方法。  关键词:FPGA;QDPSK;调制解调技术  中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)20-30237-03    The Research and Implementation of the Modem Techn
期刊
摘要:随着网络技术与计算机开发语言的发展,越来越多的程序员利用Java来编写网络程序。本文介绍了Socket的通信机制,并使用Java语言、套接字接口(Socket API)技术和多线程相结合的模式实现了多客户端与服务器的并发通信的多人聊天系统。  关键词:Java;Socket;多客户并发;网络通信  中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)20-30253-
期刊
摘要:采用工作流技术,用户可以根据企业自身的实际业务流程来自定义工作流,从而实现业务流程的自动化。备件管理是每个企业都必须面对的环节,是企业ERP运行的重要组成部分。采用软件工程的方法,通过分析企业职能部门和用户的工作流程,结合工作流技术,按照特性要求和统一原则,采用层次化、组件化、松耦合思想设计并实现了通用型企业备件管理系统。  关键词:工作流;软件工程;层次化;组件  中图分类号:TP311文
期刊
摘要:在分析B语言和面向对象方法的基础上,提出一种具有面向对象特性的形式化描述语言B+,该语言克服原有B语言没有机制形式描述一系列实例变量和不确定的行为的缺点。  关键词:形式化;面向对象;B语言;B+  中图分类号:TP301文献标识码:A文章编号:1009-3044(2008)20-30267-02    An Object-oriented System Research Based on
期刊
摘要:企业经营规模的不断扩大使得传统工作流系统不能适应企业分布式经营的需求,但却促进了基于WEB的工作流系统技术的发展,在此基础上提出了基于.NET3.0的WEB工作流系统,分析了工作流技术的工作原理,给出了工作流元素的相关定义,并在此基础上设计了系统的架构,最后实现了一个企业业务流程的实例。  关键词:工作流; 工作流管理系统; 业务流程模型; Web  中图分类号:TP311文献标识码:A文章
期刊
摘要:教育技术未来的发展趋势之一将会是虚拟现实技术,其交互性、沉浸性和构想性是未来计算机在各领域中应用的理想因素。基于虚拟现实技术的教育、学习环境是实现对现实教学方法、思维方式、感知行为和控制手段等的模拟。本文通过国内外大量前沿应用实例,介绍并总结了虚拟现实技术在教育应用领域中的特点、应用和发展前景。  关键词:虚拟现实技术;教育技术;虚拟现实建模语言;三维  中图分类号:TP393文献标识码:A
期刊
摘要:随着网络的飞速发展,网上购物已经走入日常生活,因此各类在线网站开发一个方便、快捷和人性化的购物系统是非常必要的。而“购物车”在在线购物类网站中又是一项非常重要的功能。纵观ASP购物车功能的方法,目前比较常用的方法有Cookie、Session或者数据库等。通过对Cookie、Session和数据库三种方法的介绍与比较,从而得出各自的优缺点。  关键词:ASP;购物车;Session;数据库 
期刊