1、开发环境搭建1.1必须安装的软件1)jbpm-4.4.zip2)jdk5或者更高版本3)支持的数据库有hsqldb、mysql、oracle、postgresql、sybase,本说明以oracle作为数据库。4)GPD插件(jbpm在IDE中的流程设计器),eclipse(建议3.6版本以上)或者myeclipse(建议8.1版本以上)安装插件所需的zip在解压后jbpm-4.4\install\src\gpd中的jbpm-gpd-site.zip,本说明以eclipse3.6为例。1.2配置JBPM运行时1)打开windowpreferences2)选择JBossjBPM--jBPM4--RuntimeLocations3)点击Add...4)在AddLocation对话框中,输入一个名字,比如jbpm-4.0然后点击Search...5)在BrowseForFolder对话框中,选择你的jbpm根目录,然后点击OK6)点击OK在AddLocation对话框中1.3定义jBPM用户库1)点击窗口--属性(Windows--Preferences)2)选择Java--创建路径--用户类库(Java--BuildPath--UserLibraries)3)点击新建(New)4)类型名字jBPMLibraries5)点击添加JARs(AddJARs...)6)找到jBPM安装程序下的lib目录7)选择lib下的所有jar文件并点击打开(Open)8)选择jBPMLibraries作为入口9)重新点击添加JARs(AddJARs)10)在jBPM的安装程序的根目录下选择jbpm.jar文件11)点击打开(Open)12)在jbpm.jar下选择源码附件(Sourceattachment)作为入口13)点击编辑(Edit)14)在源码附件的配置(SourceAttachmentConfiguration)对话框中,点击目录(ExternalFolder...)15)找到jBPM安装程序下的src目录16)点击选择(Choose)17)点击两次'确定'(Ok)会关闭所有对话框1.4在目录中添加jPDL4模式如果你想直接编辑XML源码,最好是在你的XML目录中指定一下模式(schema),这样当你在编辑流程源码的时候,可以更好的帮助你编写代码。1)点击窗口--属性(Windows--Preferences)2)选择XML--目录(XML--CataLog)3)点击添加(Add)4)添加XML目录(AddXMLCatalogEntry)的窗口打开5)点击map-icon的图标下面的按钮并选择文件系统(FileSystem)6)在打开的对话框中,选择jBPM安装目录下src文件夹中jpdl.xsd文件7)点击打开(Open)并且关闭所有的对话框2、实例教程讲解这节我们将使用建立一个简单请假流程项目2.1建立项目在eclipse中新建一个DynamicWebProject的项目jbpm4leave。2.2加入jbpm用户库1)邮件点击新建的项目jbpm4leave—Properties2)如下图说示加入用户库2.3加入jbpm所需要的配置文件大家可以从jbpm-4.4解压后的文件下,在路径\examples\src中找到以下文件,加入到项目工程的src中其中jbpm.hibernate.cfg.xml是配置jbpm4.4的hibernate配置文件,包括数据源的配置,和一般的hibernate.cfg.xml配置文件差不多。Jbpm.mailkit开头的文件,是用于邮件功能的配置。2.4新建简单的请假流程1)新建一个jbpm4.4的流程定义文件右键点击srcNewOther,选择JBossjBPM下的Jbpm4ProcessDefinition,文件名写leave,版本号写4.4即可。3)用流程设计器打开新建的leave.jpdl.xml。右键点击leave.jpdl.xmlOpenWithjBPMjPDL4Editor,,看见如下效果3)设计请假流程在这个简单的请假流程中,包含开始(start)、结束(end)、任务(task)、决策(decision)四种流程元素。流程设计如下:4)详细设计流程中的各任务节点的流转条件①选中“申请”任务节点,在properties(属性)中,General标签的Name(属性值)填为“申请”,Assignment标签的Type选择assignee(参与者,选择这个,可以指定该任务节点的直接参与者),Expression的属性值填为#{owner}(即指定这个任务节点的直接参与者就是这个流程的启动者)。②选中“经理审批”任务节点,在properties(属性)中,General标签的Name(属性值)填为“经理审批”,Assignment标签的Type选择candidate-groups(参与者,选择这个,可以该任务节点有某个用户组来参与),Expression的属性值填为manager(即指定这个任务节点的有manager这个用户组来完成)。③“老板审批”节点同“经理审批”任务节点设置类似,只是Expression改为boss④设置决策节点,选中,在属性标签General中按如下所示填写:Name(节点名称),Expression(判断表达式,其中day是在流程流转过程中的一个记录天数的属性,整个表达式的意思是天数大于3天需要老板审批,如果天数不大于3天,经理审批通过后就直接结束流程,不需要老板审批)。⑤设计好流程后,点击保存,IDE将自动为你生成一个png的流程图片,切记不可在xml源码界面进行保存,否则会生成不完整的流程图片。⑥在点击下方的“Source”属性,即可看到流程定义文件的xml源码一下是leave.jpdl.xml的源码:?xmlversion=1.0encoding=UTF-8?processname=leavexmlns=http://jbpm.org/4.4/jpdlstartg=198,15,48,48name=start1transitionto=申请//starttaskassignee=#{owner}form=request.jspg=175,94,92,52name=申请transitionto=经理审批//tasktaskcandidate-groups=managerform=manager.jspg=176,174,92,52name=经理审批transitiong=-32,-8name=批准to=exclusive1/transitiong=120,199;121,122:-42,-18name=驳回to=申请//taskdecisionexpr=#{day3?'老板审批':'结束'}g=196,259,48,48name=exclusive1transitiong=-39,-10name=结束to=end1/transitiong=344,283:-71,-17name=老板审批to=老板审批//decisiontaskcandidate-groups=bossform=boss.jspg=299,305,92,52name=老板审批transitiong=342,378:to=end1//taskendg=196,354,48,48name=end1//process至此工程的src文件下就有下面这些文件:2.5发布流程Jbpm的流程发布其实很简单,只要使用jbpm已经封装好的方法进行使用,即可。我们新建一个deploy.jsp的页面用户发布流程。在此讲解使用zip文件打包发布流程。1)将之前建立好的leave.jpdl.xml和leave.png文件,一起打包进leave.zip文件。2)deploy.jsp代码如下:%@pagelanguage=javacontentType=text/html;charset=gb2312%%@pageimport=java.io.File,java.io.FileInputStream,java.io.InputStream,java.util.zip.ZipInputStream,java.util.*,org.jbpm.api.*,java.util.zip.*%!DOCTYPEhtmlPUBLIC-//W3C//DTDHTML4.01Transitional//ENhttp://www.w3.org/TR/html4/loose.dtdhtmlheadtitleInserttitlehere/title/headbody%request.setCharacterEncoding(UTF-8);response.setCharacterEncoding(UTF-8);StringdeployFile=request.getParameter(processDef);if(deployFile!=null&&deployFile!=){//必须使用的,流程引擎ProcessEngineprocessEngine=Configuration.getProcessEngine();RepositoryServicerepositoryService=processEngine.getRepositoryService();try{Stringfile=deployFile;//将ZIP文件封转到IO流里InputStreamis=newFileInputStream(newFile(file));ZipInputStreamzis=newZipInputStream(is);//将ZIP流程文件发布到pvm(流程虚拟机中,他会把ZIP包中的xml文件和png图片存储到数据库中)repositoryService.createDeployment().addResourcesFromZipInputStream(zis).deploy();zis.close();is.close();out.println(发布流程成功br/);out.println(ahref='task-write.jsp'返回/abr/);}catch(Exceptione){e.printStackTrace();out.println(发布流程失败);}}%scripttype=text/javascriptfunctionreadFile(obj){document.getElementById(file).value=obj.value;}/scriptfontcolor=red可直接发布zip文件/fontbr/formname=form1method=postaction=deploy.jsplabel发布流程文件inputtype=filename=processDefonchange=readFile(this)/labellabelinputtype=submitname=Submitvalue=提交/label/form/body/html3)测试发布成功结果4)查看已发布成功的流程已经有的一个查看流程的页面task-write.jsp,源码如下:%@pagelanguage=javacontentType=text/html;charset=GB18030pageEncoding=GB18030%%@includefile=/head.jsp%!DOCTYPEhtmlPUBLIC-//W3C//DTDHTML4.01Transitional//ENhttp://www.w3.org/TR/html4/loose.dtd%Stringusername=(Str