JBPM4学习总结第一季作者:suhuanzheng7784877http://suhuanzheng7784877.iteye.comJBPM4学习总结http://www.iteye.com-做最棒的软件开发交流社区第1/45页本书由ITeye提供的电子书DIY功能自动生成于2011-06-27目录1.jbpm1.1JBPM4学习总结之1——配置环境.....................................................31.2JBPM4学习总结之2——发布流程模板、流程实例........................................91.3JBPM4学习总结之3——State(状态活动)............................................121.4JBPM4学习总结之4——Decision(判断活动).........................................151.5JBPM4学习总结之5——Fork-join(分支/聚合活动)....................................201.6JBPM4学习总结之6——Task之任务..................................................261.7JBPM4学习总结之7——Task之任务分配器............................................311.8JBPM4学习总结之8——Task之任务泳道和Task任务变量.................................341.9JBPM4学习总结之9——子流程(sub-process).......................................381.10JBPM4学习总结之10——复杂的子流程(sub-process)................................42http://suhuanzheng7784877.iteye.com第2/45页1.1JBPM4学习总结之1——配置环境发表时间:2011-03-051.前言JBPM,全称是JavaBusinessProcessManagement(业务流程管理),它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。jBPM是公开源代码项目,它使用要遵循ApacheLicense。jBPM在2004年10月18日,发布了2.0版本,并在同一天加入了JBoss,成为了JBoss企业中间件平台的一个组成部分,它的名称也改成JBossjBPM。随着jBPM加入JBoss组织,jBPM也将进入一个全新的发展时代,它的前景是十分光明的。目前官方网站上最新的版本是JBPM5,不过它还尚未成熟,建议大家不要做实验室里面的小白鼠。2.配置JBPM4开发环境JBPM4目前最稳定的版本是4.4。从https://sourceforge.net/projects/jbpm/files/jBPM%204/jbpm-4.4/可以下载最新的开发包jbpm-4.4.zip。下载之后解压缩,将里面的一个jbpm.jar和lib下面所有的jar包拷贝到实际项目工程当中。下面我们安装JBPM的Eclipse插件,让我们的Eclipse具有JBPM的Feature。在已经下载的{%JBPM4_PATH%}/install/src/gpd下面就是插件包,利用eclipse的updateSite方式即可安装JBPM4插件,安装完成后。在Eclipse的New-》Other下面会这样的效果。http://suhuanzheng7784877.iteye.com1.1JBPM4学习总结之1——配置环境第3/45页以上是建立一个工作流程,点击next后输入流程模板的名字,如下图http://suhuanzheng7784877.iteye.com1.1JBPM4学习总结之1——配置环境第4/45页http://suhuanzheng7784877.iteye.com1.1JBPM4学习总结之1——配置环境第5/45页之后就可以利用可视化编辑器编辑(GEF)流程了,效果如下加入JPDL4的schema效验,在{%JBPM4_PATH%}/src/文件夹下面有jpdl-4.0.xsd——jpdl-4.4.xsd的xml效验,将其引入到Eclipse中来,就可以使用快捷键编辑xml流程了。引入步骤如下:Preferences-Myeclipse-filesandeditors-XML-XMLschema-XMLschemaSource即可添加新的schema验证了。1.JBPM默认的配置文件说明jbpm.cfg.xml:整个工作流引擎总配置文件,它描述了该引擎需要加载的其他配置文件,它相当于一个所有配置文件的核心管理配置。内容如下:?xmlversion=1.0encoding=UTF-8?jbpm-configurationimportresource=jbpm.default.cfg.xml/importresource=jbpm.businesscalendar.cfg.xml/http://suhuanzheng7784877.iteye.com1.1JBPM4学习总结之1——配置环境第6/45页importresource=jbpm.tx.hibernate.cfg.xml/importresource=jbpm.jpdl.cfg.xml/importresource=jbpm.bpmn.cfg.xml/importresource=jbpm.identity.cfg.xml//jbpm-configuration当然我们可以按照自己定义的总配置文件来加载自定义配置,比如自己新建一个myjbpm.cfg.xml,而真正开始流程发布的时候就可以显示的在代码中明确加载myjbpm.cfg.xml配置文件,而不去加载默认的配置,此为后话以后再表。jbpm.mail.properties:描述了邮件信息,当流程中引发了邮件处理的时候,会按照其中的配置信息发送相关邮件。jbpm.hibernate.cfg.xml:工作流引擎是依靠自身的一些数据库的,这个就是数据库相关的配置信息,因为JBPM底层就是引用了Hibernate来做持久层维护的,所以此文件就是Hibernate配置文件。内容如下:?xmlversion=1.0encoding=utf-8?!DOCTYPEhibernate-configurationPUBLIC-//Hibernate/HibernateConfigurationDTD3.0//ENhttp://hibernate.sourceforge.net/hibernate-configuration-3.0.dtdhibernate-configurationsession-factory!--此处如果不是org.hibernate.dialect.MySQL5InnoDBDialect,会发生Couldnotsynchronizedatabasestatewithsession--propertyname=hibernate.dialectorg.hibernate.dialect.MySQL5InnoDBDialect/propertypropertyname=hibernate.connection.driver_classcom.mysql.jdbc.Driver/propertypropertyname=hibernate.connection.urljdbc:mysql://localhost:3306/jbpm4demo?useUnicode=true&characterEncoding=UTF-8/propertypropertyname=hibernate.connection.usernameliuyan/propertypropertyname=hibernate.connection.password111111/property!--propertyname=hibernate.hbm2ddl.autocreate-drop/property--propertyname=hibernate.hbm2ddl.autoupdate/propertypropertyname=hibernate.format_sqltrue/propertymappingresource=jbpm.repository.hbm.xml/http://suhuanzheng7784877.iteye.com1.1JBPM4学习总结之1——配置环境第7/45页mappingresource=jbpm.execution.hbm.xml/mappingresource=jbpm.history.hbm.xml/mappingresource=jbpm.task.hbm.xml/mappingresource=jbpm.identity.hbm.xml//session-factory/hibernate-configurationhttp://suhuanzheng7784877.iteye.com1.1JBPM4学习总结之1——配置环境第8/45页1.2JBPM4学习总结之2——发布流程模板、流程实例发表时间:2011-03-051.发布流程模板当我们通过流程编辑器编辑好了流程之后就可以将这个流程模板发布到数据库中。我觉得定义一个流程模板更像是定义一个JavaClass类,发布一个流程模板就好像是编译这个类成为class,而流程实例就好像是一个Java类的一个实例对象。最常用的是用Java代码的方式发布流程~~~还有一个是利用Ant脚本发布流程,不过一般在开发阶段十分少用。//加载默认的jbpm.cfg.xml文件ProcessEngineprocessEngine=newConfiguration().buildProcessEngine();/***发布流程*/publicvoidtest01Deploy(){StringdeployId=repositoryService.createDeployment().addResourceFromClasspath(decision.jpdl.xml).deploy();System.out.println(deployId);}这样就把流程模板为decision的流程发布到了数据库中,发布成功后,jbpm相关表会变化如下:jbpm4_deploymentjbpm4_deploypropjbpm4_lobjbpm4_propertyhttp://suhuanzheng7784877.iteye.com1.2JBPM4学习总结之2——发布流程模板、流程实例第9/45页比较重要的几个服务接口,其他服务接口都是从主接口——引擎服务接口ProcessEngine获得的。//引擎服务接口ProcessEngineprocessEngine=newConfiguration().buildProcessEngine();//资源服务,流程模板的部署、查询、删除RepositoryServicerepositoryService=processEngine.getRepositoryService();//执行服务,设置流程实例的发起、执行ExecutionServiceexecutionService=processEngine.getExecutionService();//流程管理接