陈路路,周凤
(贵州大学 计算机科学与技术学院,贵州 贵阳 550025)
摘要:随着当前信息技术突飞猛进的发展,各行各业对于办公效率都有了更高的要求,尤其是在一些财政审批、贷款办理等这些流程较多的行业,工作流技术成了其业务办理不可或缺的一部分。传统的工作流框架只支持事先设定的、循环的业务流程,对于一些动态变化和复杂的业务显得捉襟见肘。该设计采用Activiti5和Struts2+Spring3+Hibernate4 3种轻量级框的整合,添加柔性表单,并且引入角色的权限机制来提高访问的安全性。该设计不仅能方便不同部门的协同工作,而且能满足动态流程的变化,提高办公效率。
关键词:Activiti5;柔性表单;工作流;Struts2+Spring3+Hibernate4
0引言
为进一步增强和完善该公司的售后服务质量及用户体验,使售后服务管理流程化、规划化,进一步提升公司的市场竞争力,满足实际项目的需要,开发本系统,实现售后管理业务的规范化、信息化。该设计是对车辆混燃系统的一套售后服务系统。伴随公司业务的扩大,人工的管理和服务消耗了大量的物力、财力,而且对于一些设备安装等流程化问题,工作人员稍有疏忽,就会出错,实时性很差,不能跟踪和监控,降低客户的满意度,因此,在公司业务需要下,开发和设计一套流程化的、满足动态业务的、可随时监控的售后信息平台。该平台的开发采用S2SH轻量级开发框架[13],敏捷开发,代码复用率高,便于移植、扩展和后期的维护;采用MVC的设计模式[4],降低Model、View和Control之间的耦合度,使其分离开来,极大削弱其相互之间的依赖,减少了工作量和降低开发难度。在S2SH轻量级框架的基础上,整合Activiti5框架,采用其核心ProcessEngine类调用TaskService、RepositoryService、RuntimeService、 HistoryService 等组件,然后对流程定义、启动和删除以及流程任务和历史的流程管理等进行管理,另外增加柔性表单设计,动态地响应流程的变化,来满足实际项目的需求。该系统还增加了角色管理,该系统有管理员、普通职员、技术主管3个主要角色,根据不同的角色,分配不同的权限,这样保证了系统的高效性和安全性。
1主要相关技术简介
1.1柔性工作流技术
柔性,顾名思义就是在外界条件改变或者外力冲击的情况下,自身有一定的张力和适应力,从而保持自己原有特性的一种能力。柔性工作流管理系统就是当系统的流程或者系统的某些功能模块发生变化时,仅仅对相应的流程定义或者相关参数和规则进行调节即可,而系统本身的业务逻辑代码不需要大的改动,这种柔性的实现原理主要是靠代码逻辑的低耦合、高内聚来实现的。系统的功能设计很大程度上决定系统的柔性限度,在柔性管理系统中最重要的一方面就是要设计出统一通用的算法以及相关的业务逻辑,这样能够使系统在不同的环境下实现真正的柔性适应。该设计采用柔性化的工作流管理系统,可以避免二次开发带来的成本开销,减少不必要的人力和物力。
1.2S2SH轻量级框架
S2SH框架是当前开发者首选的框架之一,其便捷的开发、极高的松散性、较短的开发周期等优点成为开发人员首选的一种开发框架。该系统采用Struts2+Spring3+Hibernate4这3种技术整合的开发框架[5]。其中,Struts2是在Struts1和WebWork的基础上出现的一种轻量级框架。该系统采用Struts2的原因在于它是表示层框架,通过struts2.xml配置文件可以让框架结构一目了然,方便开发人员缩短开发周期。另外一个优势在于,其特有的核心过滤器和拦截器可以对一些非法的操作进行过滤和拦截,通过拦截器后才可以进入控制层进行下一步的操作,提供面向抽象类编程,还提供对于接口类的开发。Spring3是整个S2SH框架中核心地位,一方面是它可以与Struts2进行向上整合,与Hibernate4进行向下整合;另一方面它可以解决软件耦合性差和复用性弱的问题,将系统进行分层设计。该框架中,最引人注目的就是控制反转( Inversion of Control, IOC)和面向切片编程(Aspect-Oriented Programming, AOP)这两个功能,前者是将对象的创建交给外部容器,系统中所用到的组件都可以绑定到配置文件中,通过配置文件和核心类库来完成容器的各种操作;后者面向切面编程,主要是由JDK Proxy以及Ciglib来完成切面工作,AOP模块被直接嵌入到了框架,只需要在Spring的核心配置文件中配置相应文件,然后通过调用AOP接口即可完成AOP需求的任务。最后一种整合框架是Hibernate4,它是一种对象关系映射框架,早期的编程人员采用的都是JDBC,采用这种方式进行开发代码显得臃肿,复用性太差。而Hibernate4则只需要对JDBC进行一次编写,就能完成任何地方都能进行引用的效果,并且使用Hibernate4框架可以很容易生成数据库表,在SQL语句的书写上,省去了很多不必要的操作,只需要书写HQL就可以操作数据库。
2Activiti5与S2SH框架整合的系统结构
2.1系统的整体架构图
该设计采用的结构是B/S结构,选取Eclipse IDE开发平台,运用Struts2+Spring3+Hibernate4组合的Web框架,采用jQuery等开发技术,有表现层、业务逻辑层、持久层等。在业务逻辑层中整合Activiti5引擎[67]。另外采用MVC设计模式,使层与层之间的耦合度降低,增强代码的复用性,便于开发人员对后期功能的扩展和维护。系统总体结构如图1所示。
2.2该系统设计的原理
该系统采用的是3层架构[8],即表现层、逻辑层、持久层。表现层采用的主要技术有BootStrap、JSP和Jquery,当用户向Web应用器提交一个请求时,这个请求可以是触发一个事件或者提交一个表单,请求参数会通过HTTP协议提交到Web服务器,Struts2的拦截器经过过滤后,通过访问ActionService类中对应的Action,由其Struts.xml 中的映射进而调用相应的JSP等。在业务逻辑层,Activiti工作流引擎则由Spring管理,因为Activiti工作流底层框架是基于Spring和ibatis的,其中Activiti引擎[9]可以解析基于BPMN2.0绘制的流程图,进而对流程进行管理。Activiti中的Activiti Designer是一个Eclipse插件,允许在IDE环境内用BPMN2.0建立流程模型,这方便了设计人员和开发人员的沟通,使他们不用进行面对面的交流就可以使开发人员进行编程和代码设计。持久层的Hibernate与Spring集成时,在Spring的配置文件中只需要配置Hibernate需要的资源即可,例如一些DataSource的配置等,将Hibernate框架与系统集成起来完成对数据的操作。整个系统的实现是由这几种框架整合集成来的,这样可以充分利用各个框架自身的优势,相互补充,避免了单独使用的不便。
3该售后业务平台的实现
3.1数据库初始化
数据库初始化代码如下。
/**使用代码创建工作流需要的23张表*/
@Test
public void createTable(){
ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();//连接数据库的配置
processEngineConfiguration.setJdbcDriver("com.mysql.jdbc.Driver");
processEngineConfiguration.setJdbcUrl("jdbc:mysql://localhost:3306/itcast0711activiti?useUnicode=true&characterEncoding=utf8");
processEngineConfiguration.setJdbcUsername("root");
processEngineConfiguration.setJdbcPassword("111");
processEngineConfiguration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE)
//工作流的核心对象,ProcessEnginee对象
ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();
System.out.println("processEngine:"+processEngine);
}
在Activiti5中,创建核心的流程引擎对象时会自动建表。如果程序正常执行,MySQL会自动建库,然后创建23张表。
3.2工作流程图设计
该设计的流程图是用Activiti5 Modeler工具来制作的,业务流程以图形化的方式呈现出来,这样方便开发人员使用,从而避免业务人员和开发人员由于地理上的局限而带来的难以沟通的问题。该流程图有开始节点和结束节点,这是流程图绘制过程中必不可缺少的,另外还有任务节点和排他网关,当流程执行到排他网关时,流程引擎会自动检索网关出口,从上到下检索,如果发现第一条决策结果为true或者没有设置条件的(默认为成立),则流出。图2所示为本系统中某任务的流程图。
4结论
该设计主要以Activiti5工作流引擎为核心,集成了Struts2、Spring3、Hibernate4这几种轻量级框架的最新版本,添加了安全访问机制,提高了系统的访问安全性。另外采用MVC的设计模式,使模型、视图、控制器这三者彻底分离开来,降低了视图层、业务层和数据层的耦合性,使它们的松散性增强,极大方便了开发人员的开发。除此之外还增加了柔性表单,可以让工作流管理系统有一点的柔性,这样可以在业务流程改变或者功能模块改变的时候,不需要对业务代码进行大的改动,只需要修改流程定义或者流程参数或规则即可。该设计的可扩展性和复用性提升了工作流管理系统的性能,进一步提升了公司信息化水平。
参考文献
[1] 李刚.轻量级Java EE企业应用实战[M].北京: 电子工业出版社,2011.
[2] 张耀民.SSH框架在Web项目开发中的构建和应用实践[J].微型机与应用,2013,32(15):1821.
[3] 范新灿,赵明.基于Struts + Hibernate + Spring的轻量级架构开发应用研究[J].现代计算机(专业版),2010(1):176 179.
[4] 唐永瑞,张达敏.基于Ajax与MVC模式的信息系统的研究与设计[J].电子技术应用,2014,40(2):128131.
[5] 王学伟.基于S2SH2和Fireflow工作流的办公自动化系统的设计与实现[D].武汉:武汉科技大学,2011.
[6] 王虎. 基于jBPM的计量管理信息系统的设计与实现[D].合肥:合肥工业大学,2010.
[7] 贾松浩,杨彩,刘军. 基于S2SH框架的个性化实验室管理系统[J].实验室研究与探索,2014,33(8):232235.
[8] 葛扬瑛. 基于JavaEE和工作流的项目申报系统的设计与实现[D].成都:电子科技大学,2013.
[9] 曹伟. 面向办公自动化的工作流引擎研究和设计[D].南京:南京理工大学,2013.