




已阅读5页,还剩43页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
jBPM与SSH框架整合配置1 jBPM简介jBPM,全称是java Business Process Managerment,是一种基于JavaEE的轻量级工作流软件管理包,是JBoss旗下的一个子项目,目前已经成为开源领域较为成熟的工作流引擎。工作流(WorkFlow)技术起源于20世纪70年度办公自动化领域的研究工作,发展到现在已经基本成熟,主要是为了解决企业内部复杂的业务流程,以及流程的多变性。在这里,jBPM的优缺点我就不多介绍,有兴趣的可以参照网络上的相关资料。2 搭建的前期准备工作软件名称软件说明软件版本备注JDK及JREJava的核心基础类库1.6必须安装,且环境变量配置完毕MyEclipse开发环境8.5必须安装MySQL数据库5.0必须安装Ant打包,部署工具1.7或1.8必须安装,也可选择MyEclipse中自带的AntTomcatWeb服务器6.0必须安装,也可选择MyEclipse中自带的TomcatNavicat Premium数据库管理软件9可选,推荐安装jBPM工作流引擎4.4必须安装3 SSH框架的搭建由于我们最终要进行jbpm与SSH的整合,所以我们先来进行SSH框架的搭建,软后再将jBPM加入进来。SSH框架,也就是Struts2,Spring 2.5和Hibernate 3.0的整合。OK,闲话少说,我们直接进入正题:3.1 创建数据库我们以一个简单的用户登录的列子来讲解,如何进行SSH的配置。首先,我们要建立一个数据库和一个用户信息表,存储用户的用户名,密码等信息。数据库起名为jbpmtest,表名就暂定为member_info吧,其中member_info里面的字段如下图:大家也可用如下的SQL语句来创建表:DROP TABLE IF EXISTS member_info;CREATE TABLE member_info ( member_id int(11) NOT NULL default 0, member_name varchar(20) default NULL, password varchar(20) default NULL, role varchar(20) default NULL, email varchar(40) default NULL, phone varchar(20) default NULL, PRIMARY KEY (member_id) ENGINE=InnoDB DEFAULT CHARSET=utf8;3.2 连接数据库在MyEclipse中,切换至MyEclipse Database Explorer的视景下,然后右键点击空白处,创建一个数据库链接,如下图所示:3.3 新建Web项目切换至MyEclipse Java Enterprise视景下面,依次点击FileNewWeb Project,新建一个Web项目:3.4 创建包结构一个好的项目,Java类的存放必然是有序的,请先建立如下的包结构:各个包的用途说明如下:action包:主要是为了存储Struts2的各类action和请求处理类dao包:主要是存储Hibernate自动生成的dao类hbm包:存储Hibernate生成的映射文件po包:存储各种持久类,包括Hibernate生成的po对象service包:存储各种接口service.impl包:存储各种接口的实现util包:存储各种辅助类3.5 添加Struts2框架首先我们为项目添加Struts2架构,右键点击项目,选择MyEclipseAdd Struts Capabilities.,如下图:添加完成之后,大家可以看到项目的类包下多了一个struts.xml的文件,这个就是Struts2的配置文件,另外,在WEB-INF下面的web.xml文件也增添了如下语句: struts2 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter struts2 *.action 下面我们需要对Struts2的配置进行一些修改,首先,我们修改struts.xml文件,具体修改如下: 另外,由于我们修改了action的后缀为htm,故web.xml中也需要更改如下: struts2 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter struts2 *.htm 最后,我们还需要更改一下Struts2的类包。在我们添加Struts2框架的时候,MyEclipse会自动将Struts2的类库添加到我们的系统中,如下图:但是这个类库里面有很多我们用不到的JAR包,而且有一些还跟后面添加Spring和Hibernate的JAR包有冲突,为了避免这个问题,本次添加的所有JAR包,都由我们手动添加,防止JAR包泛滥。因此我们需要将此类库从项目中去除。3.6 添加Spring框架像添加Struts框架一样,右键项目:MyEclipseAdd Spring Capabilities.,如下图:完成之后,可以看到系统在类包下建立了一个applicationContext.xml文件,这个就Spring的配置文件了。然后,我们还需要在web.xml中,添加spring容器的启动配置: contextConfigLocationclasspath:applicationContext.xmlorg.springframework.web.context.ContextLoaderListener3.7 添加Hibernate框架与前面类似,再添加Hibernate框架,如下图:3.8 添加SSH框架所需的JAR包在上一步结束之后,大家会发现MyEclipse会报错,这是当然的啦,因为前面的几步中我们都没有添加JAR包,所以在这里我们统一加入,以下便是SSH框架所需的全部JAR包:可以看出总体JAR包数量并不多,这也是我反复强调项目中的JAR都要手动添加的原因。将这些JAR复制进WEB-INF下面的lib文件夹下,刷新项目即可。这个时候我们发现,MyEclipse依然提示我们applicationContext.xml有错,这是因为我们的数据库连接并不是使用MyEclipse自带的连接类,所以我们更改为c3p0的链接:另外,数据库方言必须更改为MySQLInnoDBDialect,这个主要是为了后续添加jbpm做准备,如果这里不更改的话,后面加入jbpm后运行就一直报错(具体原因不明,大家可在配置完成之后,做一定的研究),故更改如下:truetrueorg.hibernate.dialect.MySQLInnoDBDialect至此,SSH框架的就配置完毕了。3.9 添加Spring事务处理由于我们在做复杂的业务流的时候,一个Service方法里面,经常会涉及到对多个数据表的操作,为了保证事务处理的一致性,我们必须添加Spring的事务管理机制,而这也是我们运用spring最大的好处之一。添加Spring的事务处理,非常简单,只需要在applicationContext.xml中,添加如下配置语句即可:PROPAGATION_REQUIRED,readOnlyPROPAGATION_REQUIRED,readOnlyPROPAGATION_REQUIRED,readOnlyPROPAGATION_REQUIRED,-ExceptionPROPAGATION_REQUIRED,-ExceptionPROPAGATION_REQUIRED,-ExceptiontransactionInterceptor4 测试SSH框架是否搭建成功4.1 添加数据先像数据库表member_info中添加一些数据,方便后面的测试。4.2 进行Hibernate映射切换至MyEclipse Database Explorer视景之下,打开建立的jbpm-test数据库链接,然后找到表member_info,右键Hibernate Reverse Engineering,如下图:然后,大家可以看到在类包中生成了三个文件,我们需要将他们移动到相应的包中,首先,将MemberInfo.java移动至com.tplink.po中,将MemberInfoDAO.java移动至com.tplink.dao中,将MemberInfo.hbm.xml移动至com.tplink.hbm中,另外,大家也可以看到在项目根目录下还生成了一个hibernate.reveng.xml文件,没什么用,可直接删掉。将文件移动到相应包之后,还有两个地方需要修改,如下:1) 修改MemberInfo.hbm.xml里面的类名为类名全称,一定要包含路径。2) 修改applicationContext.xml中的MemberInfo.hbm.xml的映射文件地址。4.3 添加接口任何项目在编码之初,最优秀的做法就是预先定义好接口,这样不同的模块直接就可以并行开发,而且后续面临需求变更时,可以变更接口的实现类,而不会对其他模块造成影响。我们在包com.tplink.service中定义一个IMemberService的接口,并在定义一个判断用户登录的方法,如下:public interface IMemberService /* * 验证用户是否登录 * * param memberName * param password * return */public List checkMemberLogin(String memberName, String password)throws Exception;4.4 定义接口的实现类在包com.tplink.service.impl中定义此接口的实现类MemberServiceImpl.java,如下:public class MemberServiceImpl implements IMemberServiceprivate MemberInfoDAO memberInfoDAO;public List checkMemberLogin(String memberName, String password)throws Exception MemberInfo instance = new MemberInfo();instance.setMemberName(memberName);instance.setPassword(password);return memberInfoDAO.findByExample(instance);public MemberInfoDAO getMemberInfoDAO() return memberInfoDAO;public void setMemberInfoDAO(MemberInfoDAO memberInfoDAO) this.memberInfoDAO = memberInfoDAO;然后我们还需要在Spring中定义依赖注入,在applicationContext.xml中添加如下配置:最后我们还需要把刚定义的MemberService加入到Spring事务处理中,具体配置在上面的3.9节中讲的很清楚了,这里就不再贴出具体配置了。4.5 定义action本次我们的action采用模型驱动(当然,属性驱动也是可以的,这样做是为了让action类看起来简洁下而已,因为加入jbpm后会有很多的属性,造成action类太庞大),故我们先在com.tplink.po中新建一个PO对象封装来回请求的参数,就命名为PageInfo.java吧:public class PageInfo private String memberName;private String password;private String role;/* 以下为get和set方法,故省略*/然后,我们在com.tplink.action包中定义一个LoginAction来处理用户的登录请求,具体代码如下:public class LoginAction extends ActionSupport implementsModelDriven, SessionAware private PageInfo pageInfo = new PageInfo();/ SessionAware拦截器,存储用户名,角色等信息private Map session;private IMemberService memberService;/* * 验证用户登录 * return * throws Exception */public String checkLogin() throws Exception List list = memberService.checkMemberLogin(pageInfo.getMemberName(), pageInfo.getPassword();if(list.size() 0)/登录成功,将用户信息存储在session中MemberInfo memberInfo = list.get(0);session.put(name, memberInfo.getMemberName();session.put(role, memberInfo.getRole();return SUCCESS;elsereturn ERROR;public PageInfo getModel() return pageInfo;public void setSession(Map session) this.session = session;public IMemberService getMemberService() return memberService;public void setMemberService(IMemberService memberService) this.memberService = memberService;4.6 配置action下面我们开始进行action的配置,首先,我们需要在applicationContext.xml中添加此Action定义:然后我们在struts.xml配置文件中添加如下action定义:index.jsperror.jsp其中可以看到,前台login的请求,就由LoginAction来处理,上面的LoginAction就是我们在Spring中定义的,后面的method属性表示采用哪个方法处理这个请求。而请求处理的结果就有两个,一个是index.jsp,一个是error.jsp,分别表示登录成功和登录失败跳转到的页面,下面我们就来编写前台页面。4.7 前台jsp页面本次测试,简单起见,我们只用了三个页面,分别是login.jsp,index.jsp和error.jsp,分别表示登录页面,登录成功以及登录失败的页面。这三个jsp页面都直接放在WebRoot目录下。每个jsp页面的前面,都需要加上:,这是使用Struts2标签需要引入的标签库。login.jsp: 用户名:密码:登录 Index.jsp: ,你好,欢迎你进入系统, 你的角色为:. error.jsp: Sorry,用户名或密码错误。 返回 最后我们还需要将系统的欢迎页面设置为:login.jsp。但是我们如果这个时候部署项目的话,运行依然会报错,这是因为我们在web.xml中只对*.htm的请求做了映射,但是我们直接访问jsp页面,Struts2不知道用什么类来处理了,所以我们再加上一个URL映射: struts2 *.htm /login.jsp OK,至此,我们的SSH框架就正式搭建完毕,大家将其部署在tomcat 6中,然后启动tomcat,在浏览器中输入:http:/localhost:8080/jbpm-test,就可以访问了。试一下登录成功和失败是否能看到预想中的结果。5 在SSH框架中加入jBPM5.1 jBPM插件安装首先,我们在MyEclipse中安装jBPM插件,点击HelpMyEclipse Configuration Center,切换至Software这个Tab页,然后点击add site,再定位到jbpm4.4/install/src/gpd/jbpm-gpd-site.zip,OK后按照提示安装即可。安装完成之后,需配置jBPM的运行环境,在WindowPreferenceJBoss jBPMRuntime Locations中设定为jbpm4.4的安装目录即可。第三步,我们还需要配置流程文件的自动提示功能,其XML文件是XSD文件位于jbpm4.4/src/ jpdl-4.4.xsd,如下图:最后一步,我们还需要设定MyEclipse的编码方式,否则后面定义流程文件的时将会出现乱码,故在此我们一并配置,在MyEclipse的安装根目录下找到myeclipse.ini文件,在后面添加一行语句为:-Dfile.encoding=UTF-85.2 jBPM接口介绍后面的配置需要大家对jBPM有一定的了解,尤其是jBPM的一些常用API和流程定义语言,在这里我们只需要掌握一种jpdl即可。下面简单列出jbpm中的Service API:1)Process Engine:流程引擎。并不负责具体的业务,只是用来获取各种Service,采用Spring的配置之后,我们基本不会用到它。2)RepositoryService:流程资源服务的接口,如流程定义的发布,查询,删除等等。3)ExecutionService:用于操作流程实例的接口,可以进行流程实例的发布,查询,流程推进,设置流程变量等操作。4)TaskService:用户操作人工任务的服务,可以进行任务创建,查询,获取,提交,完成,保存,删除等各类操作。5)HistoryService:用户操作流程历史的服务,提供对流程历史库(就是已经完成的流程实例)的操作。比如历史流程实例,历史活动实例等。6)IdentityService:用户操作用户,用户组以及成员关系的服务。7)ManagementService:流程管理控制服务的接口,指提供异步工作(Job)相关的执行和查询操作。5.3 jBPM数据库安装jBPM本身带有数据库,需要我们提前建立好相关的表结构。定位到jbpm的安装目录,jbpm-4.4/install/src/db/create,由于本次测试我们采用的是MySQL数据库,故选择里面的jbpm.mysql.create.sql文件,然后在MySQL中运行,得到最终的数据库表结构如下图:前面以jbpm4开头的都是jBPM引擎本身会用到的数据库表。5.4 添加jBPM所需JAR包由于在前面我们已经加入了SSH框架所需要的JAR包,故本次添加的JAR包就非常少了,找到jbpm安装目录下,有个jbpm.jar,将其复制到项目中的WEB-INF/lib下。另外,我们们还需要替换一些JAR包,找到Tomcat 6的安装目录,将apache-tomcat-6.0.32/lib目录下面的el-api.jar删掉,然后再将jbpm4-4/lib下面的juel-api.jar,juel-engine.jar,juel-impl.jar复制到Tomcat 6里面的lib下面。之所以进行这样的替换,主要是因为这些JAR之间有冲突。5.5 定义jBPM流程本次测试我们采用网络上最为常见的请假流程来搭建我们的框架。首先,用户提交请假申请,然后经理进行审批,根据用户的请假天数,若超过3天,则由老板再次审批,若不足3天,则经理审批过后,直接流程结束。大致流程如下图:首先,在com.tplink下再建一个process的包,用来存储自定义的流程。然后点击FileOtherjBPM4 Process Definition,创建一个流程定义文件,命名为:leave.jpdl.xml,其中按照上图进行流程定义,结果如下:大家可以看到在上面的流程定义里面,有一个处理类:LeaveHandler,这个类主要是根据用户的请假天数来判断到底是结束流程还是由交由老板进行审批。因此,我们在com.tplink下再建立一个handler的包,存放各种处理类:public class LeaveHandler implements DecisionHandler public String decide(OpenExecution execution) / TODO Auto-generated method stubint day = Integer.parseInt(execution.getVariable(day).toString();if (day 3) return 结束; else return 老板审批;5.6 使用Ant对流程进行打包使用过jbpm的都知道,我们在发布流程的时候,需要将流程定义文件和一个png文件一起打包发布。所以我们使用Ant这个小工具来进行这些工作,方便又简单。在项目的src目录下建立一个build.xml文件,并编写如下脚本:然后运行zip这个target,就会发现在process这个包中,多了一个leave.zip文件,这个就是我们要发布的流程包。5.7 添加jbpm配置这一步最为关键,但其实jbpm4-4的官方文档中已经给我们提供了这方面的配置,我们直接拿来用就可以了。1)在项目src目录下建立jbpm的配置文件,命名为:jbpm.cfg.xml,文件的内容在jbpm4.4的安装目录中,jbpm-4.4/install/src/cfg/jbpm里面,有一个spring.jbpm.cfg.xml,将这个文件的内容复制到刚才建立的jbpm.cfg.xml中,注意要把“jbpm.jobexecutor.cfg.xml”给注释掉,因为我们现在还用不到它: !- - 2)在applicationContext.xml中配置jbpm的各种Service API,在5.2小节中有过介绍,具体配置如下,将下面的配置直接加在applicationContext.xml中:另外,在sessionFactory这个bean中也要将jbpm用到的映射文件加进去:truetrueorg.hibernate.dialect.MySQLInnoDBDialectcom/tplink/hbm/MemberInfo.hbm.xmlclasspath:jbpm.repository.hbm.xmlclasspath:jbpm.execution.hbm.xmlclasspath:jbpm.history.hbm.xmlclasspath:jbpm.task.hbm.xmlclasspath:jbpm.identity.hbm.xmlOK,至此jbpm与SSH框架的配置已经完成了,最终的配置文件和ja
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年驾考刷题宝典试题及答案
- 慢性阻塞性肺疾病合并肺鳞癌护理查房
- 2014年7月国开电大法律事务专科《行政法与行政诉讼法》期末纸质考试试题及答案
- 安徽省合肥市包河区2023-2024学年高三上学期期中考试化学试题含参考答案
- 2025 年小升初上海市初一新生分班考试语文试卷(带答案解析)-(人教版)
- 吉林省2025年上半年一级注册建筑师《建筑材料与构造》:门窗洞口大小考试试题
- 川师大一中初2025级(八年级下)三月月考数学试题
- 湖南省长沙市雨花区雅礼实验毓秀学校2024-2025学年七年级下学期期末考试数学试题(含部分答案)
- 2025年江苏省镇江市句容二中中考物理一模试卷-自定义类型(含答案)
- 酒店委托会议合同范本
- 第五章 三角函数(14类题型清单)-2024-2025学年高一数学单元速记(人教A版必修第一册)
- 《小儿高热惊厥讲解》课件
- 绿化设施设备管理制度
- 2025年甘肃白银有色集团股份有限公司专业技术人员招聘计划(200人)笔试核心备考题库及答案解析
- 专题03词语梳理与辨析-2023年三年级语文暑假专项
- 自愿放弃景点协议书(2篇)
- 2022-2023年铁矿粉购销合同协议书范本
- 信息检索课件 第2章 文献检索方法(1)-2
- 学校网络与信息安全检查表
- CTF信息安全竞赛理论知识考试题及答案
- 石油化工劳务分包合同
评论
0/150
提交评论