APP下载

基于AppFuse开源框架的人力资源管理系统设计与研究

2008-12-29高纪文

中国市场 2008年35期

  摘要:本文围绕人力资源管理系统的设计与实现,结合软件工程的开发理论,根据部门外聘人力资源管理业务进行系统需求分析,在AppFuse开源框架的基础上,对Struts+Spring+Hibernate的Web开发流程做了深入的研究。
  关键词:人力资源管理系统;MVC模式;开源框架
  
  企业人力资源管理是企业管理的一个重要内容,随着时代的进步,企业规模也逐渐扩大。如何管理好企业内部员工的信息,成为企业管理中的一个重要问题。建立一个界面友好、架构设计合理的人力资源管理系统是十分必要的。它可以为部门进行有效的人力资源管理,并为公司节约大量的人力、物力,减少工作中容易出现的一些问题。本系统的主要功能主要实现部门对外聘员工招聘管理、外聘员工薪金管理、项目资源管理、综合信息查询、报表生成等。使用该系统不仅可以方便部门人力资源的各层管理人员处理日常事务,而且方便项目经理采用外聘员工、人力资源秘书计算外聘员工薪金等工作。使用后期可在此基础上扩展本系统,使之涵盖业务管理的各个方面,形成更全面更完善的产品。
  
  一、J2EE技术结构
  
  由众多知名厂商共同制定的J2EE平台规范利用了Java2平台的技术优势,为企业整体解决方案的开发、部署和管理提供了一套完整的体系结构。J2EE技术的基础就是Java2平台,不仅加强了该平台中的许多优点,还提供了对业务逻辑封装的EJB组件技术、支持HTTP访问的Servlets和JSP,以及XML的全面支持,另外它还定义了关于事务管理的JTA和JTS接口及保证消息传递的JMS服务等。
  
  二、基于MVC系统模型的AppFuse框架
  
  用AppFuse进行开发通常有三种模式:“自上而下”、“自下而上”以及“混合模式”。“自上而下”是由Java对象向数据库对象创建的过程,比较符合面向对象的设计思维,但是为此要编写大量的XDoclet的tag。“自下而上”是由数据库对象生成Java对象的过程,只需要提供数据库表结构即可。然而,对于较为复杂的系统,尤其是类之间具有大量关联的情形,仍然需要采用“自上而下”的创建模式。因此,在实际的项目开发中,将两种模式进行混合使用比较常见,这也就是“混合”模式。
  
  三、基于Struts框架在人力资源管理系统实现中的应用
  
  1.人力资源管理系统的基本框架
  本系统采用基于AppFuse的开发模式,可以生成60%左右的代码,并且不同模块代码风格一致,有利于开发人员快速上手。系统的各个子模块之间功能独立,可根据用户的需要动态进行组合,各个子模块之间没有直接耦合,而是通过数据库之间的联系由框架进行组合,子模块的修改只是模块内的局部修改,不会导致修改的蔓延,从而使系统的可维护能力大大提高,降低了系统开发的风险。人力资源管理系统是基于AppFuse的三层体系结构,采用了Struts+Spring+Hibernate三种开源框架,使用了基于MVC模式的Struts的框架,并使用Hibernate进行数据持久层操作,使用Spring对各个组件进行依赖注射。人力资源管理系统共分三个层次:数据持久层、业务逻辑层、Web层。根据人力资源管理系统需求的相关内容,系统总体模块框图如下页图所示。
  2.人力资源管理系统的开发过程
  人力资源管理系统,主要实现对外聘员工所有相关信息的信息化管理和生成报表等功能。由于篇幅有限,这里仅对身份验证、外聘员工招聘管理、综合信息查询和报表生成模块说明系统的设计与实现。
  
  (1)用户界面设计。用户界面是Web应用和用户交互的窗口。用户界面可以向用户输出信息,也可以接收用户的输入信息。根据需求分析,可以制定出用户界面,包括用户界面的功能、与用户交互的信息,以及用户界面之间的相互切换关系。ActionForm Bean是Struts提供的表单数据传输对象,用于在视图层和控制层之间传递HTML表单数据。控制层可以从ActionForm Bean中读取用户输入的表单数据,也可以把来自模型层的数据存放到ActionForm Bean中,然后把它返回给视图。
  (2)登录验证模块设计。人力资源管理系统采用了AppFuse用户管理,用到了容器管理的Form认证方式。采用基于表单的登录验证方式,登录请求由login.jsp处理。通过静态应用,login.jsp将登录请求委派给loginForm.jsp处理。
  login.jsp
  容器启动时,调用监听器StartupListener,初始化Spring上下文环境,设置DAO type,通过LookupDAOHibernate.getRoles取得角色信息,存于application scope中。接着调用UserCounterListener监听器,记录用户的登录改变,然后通过容器Form认证,将请求转给login.jsp;Login.jsp静态引用loginForm.jsp,由其进行主要的权限认证工作。loginForm.jsp表单提交后,将请求转向/authorize,/authorize的请求被login servlet处理。
  (3)外聘员工招聘模块设计。在人力资源管理系统中,外聘员工招聘管理模块是系统的重要组成部分,它提供了软件开发经理录用外聘员工的相关功能。当部门需要招聘外聘员工时,派遣公司会提供外聘人员简历,首先由部门人力资源秘书将外聘人员简历录入至外聘员工简历库。软件开发经理根据部门招聘员工的具体要求来筛选简历,并进行首轮面试。通过面试的外聘员工正式进入部门报到,部门为其申请办公资源,员工等待进入项目。项目经理根据项目需求,进行二次面试。符合项目组要求的外聘员工正式进入部门项目组,不满足要求的外聘员工等待其他项目。系统利用Spring声明式的事务管理机制,系统的所有service类都声明在applicationContext-service.xml中,该文件中包含有一个“txProxyTemplate”bean的声明,它定义了基本事务策略。其他的service类从“txProxyTemplate”继承,并可以“重写”事务策略。
  (4)综合信息查询模块设计。系统在综合信息查询中,主要完成以下模块的查询工作:外聘员工查询条件、人力资源秘书查询条件、项目经理查询条件、软件开发经理查询条件。这个查询条件涉及多表关联,在系统数据量非常大的情况下,为了提高系统性能,必须对SQL语句进行优化,其中not in与not exists的用法就显得格外重要。因为在子查询中,not in对子查询中的表执行了一个全表遍历。为了避免使用not in,在开发过程中通常采用外连接(Outer Joins)或not exists。系统采用的是Hibernate2进行数据持久层操作,由于Hibernate2不支持外连接以及一些复杂的SQL语句,对于这种情况,系统采用创建视图(Vi