由于本人目前使用的是jbpm-3.2.2版本的,现在就以该版本来进行流程模板的发布演示(jbpm 3.x版本的大致都类似)
流程模板发布就是将流程设计器里设计完成的流程模板文件发布到数据库中,以利于流程引擎对数据库的直接操作,实现对流程的控制;以下面我设置的流程模板为例:
这个就是通过可视化设计的流程模板,设置完成后就需要将其发布到数据库中;
1.当我们设计完流程模板后保存,在我们的包下会出现三个文件(jbpm3中,jbpm4中两个),分别是(如图):gpb.xml(节点位置的定位文件);processdefinition.xml(流程定义文件,即定义流程的业务);perocessimage.jpg(由前两个文件产生的流程图片);
发布就是将这个三个文件一起存入数据库中;
2.jbpm的流程发布有两种方式:a.利用jbpm的流程设计器集合可以发布的流程的Servlet来实现;b.将流程文件从设计器中导出为一个zip包文件,然后利用应用程序将其发布到数据库中(这个就是今天要介绍的);
3.下面介绍第二种方式的具体操作:a.不利用流程设计器为我们提供的便利,直接手动来操作:我们将那三个流程模板文件放入到指定的文件夹下(根据自己爱好,但最好别放到中文目录下),然后自己利用工具如winrar进行打包为zip包文件; 打包结束后,我们就可以写应用程序来进行发布,应该程序代码如下:
package jbpm; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.util.zip.ZipInputStream; import org.jbpm.JbpmConfiguration; import org.jbpm.JbpmContext; import org.jbpm.graph.def.ProcessDefinition; public class DeploymentTest { /** * @param args */ public static void main(String[] args) throws Exception{ JbpmContext jbpmContext = JbpmConfiguration.getInstance().createJbpmContext(); try{ //定义打包文件所在的位置 String archiveFile = "E:/workspces/myeclipse_8.5_workspaces/sanitation/WebRoot/jbpm/processdefinition.zip"; InputStream is = new FileInputStream(new File(archiveFile)); //生成ZIP输入流 ZipInputStream zis = new ZipInputStream(is); //根据zip的输入流文件生成jbpm的ProcessDefinition对象 ProcessDefinition pd = ProcessDefinition.parseParZipInputStream(zis); //利用jbpmContext将流程发布到数据库 jbpmContext.deployProcessDefinition(pd); //关闭流 zis.close(); is.close(); }finally{ jbpmContext.close(); } } }
在我们允许该程序前我们还要保证Hibernate的配置文件hibernate.cxf.xml已正确配置,并且已导入相应的包,保证能正确连接数据库;
接下来我们就可以再类中右键选择Run as ---->java application允许该测试类,如果没有看到控制台报错,应该是成功了,为了保证执行的结果正确:
我们可以打开数据库找到JBPM_PROCESSDEFINITION表打开查看(我这里发布了两次):
这样表示我们已经发布成功了;b.在这个操作过程中我们还能利用流程设计器的一个便利之处就是:帮助我们对模板进行打包;打开流程设置器选择Deployment
----->可以看到页面分为四块区域,每块区域的具体操作这里就不说了,我们现在只需要用到files and Folders和local save settings两个区域----->
在files and Folders区域中勾选我们要打包的三个文件,然后在local save settings将Save Process Archive Locally选中------->
接着选择要放在zip包文件的路径,选择完成后,点击Save WithOut Deploying..,这样包文件就打包到的你指定的目录下;