关于jbpm4.4更改以及增加已部署流程资源文件

本文讨论在jbpm中对已发布流程的资源文件进行修改以及增加的相关问题
在项目需求中,当流程设计器设计好流程定义文件后,需要对流程定义的xml进行相关的设置,主要有设置人员,设置表单两个操作。
设置任务分配人员需要修改xml的相关属性;
设置任务表单的时候需要往jbpm4_lob表中增加一条记录,保存表单;
修改xml文件的时候,可以通过jbpm的api中提供的
((RepositoryServiceImpl)this.repositoryService).updateDeploymentResource("670001", "org/jbpm/examples/oo/process.jpdl.xml", is) 方法进行xml更新。
可如果需要增加新的资源文件,就比较麻烦了;
此时,有两种解决办法:
一, 继续跟踪jbpm源码,找出增加新的资源文件的方法;(该方法正在探索中。。。)
二, 获取之前发布的xml文件,然后删除之前的版本,再创建一个发布实例,把需要增加的资源文件一并发布,这样的话,每次有需要增加新的资源文件的时候,就必须删除前一次发布的版本。(不适合对已有流程实例的流程定义进行更改)


改进:

//不管哪种发布方式,最终都会得到这个输入流
    InputStream inputStream = streamInput.openStream();
    try {
      byte[] bytes = IoUtil.readBytes(inputStream);
      // Since this method is probably called outside an environment block, we
      // need to generate the dbid of the Lob later (during the actual deployment).
      //update by wangjun 2011/3/22
      Lob lob = new Lob(bytes, true);
     
      //Lob lob = new Lob(bytes, false);
      resources.put(name, lob);
对于流程定义文件的修改于新增,需要修改JBPM源码,把new Lob对象的时候传的参数false改为true;
Lob对象对应的是数据库中JBPM4_Lob表,这个表是通过hibernate的Map集合方式映射到Jbpm4_Deployment表的,就是一个发布流程可以有一个或者N个资源文件,资源文件包含zip包,png图片,html等表单文件。。在new Lob对象的时候设置为true的话,就是把数据库中已持久化的对象重新游离化,这样不管是更新还是增加,hibernate都会把该流程定义文件之前对应的资源文件删除,而更新为重新处于游离状态下的资源文件。

注意:也许在hibernate的一些配置中可以达到要求,就可以不用改源码,但目前JBPM4.4中对hibernate的具体应用还在探索中。。。。。。。














你可能感兴趣的:(xml,jbpm,OO)