请您先登录,才能继续操作

论坛首页 Java企业应用论坛

扩展Activiti 5.12轻松搞定流程实例跟随流程版本一起升级

浏览 14546 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2013-06-24   最后修改:2014-03-20
扩展Activiti 5.12轻松搞定流程实例跟随流程版本一起升级,本文详细介绍之
本功能依托于bboss分支和Activiti 5.12.0版本。

为activiti组件org.activiti.engine.repository.DeploymentBuilder增加以下接口方法:
Deployment deploy(int deploypolicy);
参数deploypolicy为int类型,用来指定流程部署策略,有三个值:
DeploymentBuilder.Deploy_policy_default
DeploymentBuilder.Deploy_policy_upgrade
DeploymentBuilder.Deploy_policy_delete
这三个值作为常量定义在部署接口org.activiti.engine.repository.DeploymentBuilder中。他们的含义分别为:
DeploymentBuilder.Deploy_policy_default 没有执行完毕的旧版本实例任务仍然根据旧版本流程定义运行
DeploymentBuilder.Deploy_policy_upgrade 没有执行完毕的旧版本实例任务迁移到新版本流程定义运行
DeploymentBuilder.Deploy_policy_delete 直接取消没有执行完毕的旧版本实例任务

原来的部署接口方法任然保留:
Deployment deploy();

以下是两个简单的使用扩展接口部署流程示例:
public Deployment deployProcDefByZip(String deploymentName,
			ZipInputStream processDef,int upgradepolicy) {
		DeploymentBuilder deploymentBuilder = processEngine
				.getRepositoryService().createDeployment().name(deploymentName);
		deploymentBuilder.addZipInputStream(processDef);		
		/**
		 * 参数upgradepolicy可以为以下常量值:
		 *  DeploymentBuilder.Deploy_policy_default 
	 	 *	DeploymentBuilder.Deploy_policy_upgrade 
	     *  DeploymentBuilder.Deploy_policy_delete 
	     *
		 */			
		return deploymentBuilder.deploy(upgradepolicy);
	}


public Deployment deployProcDefByPath(String deploymentName,
			String xmlPath, String jpgPath,int deploypolicy) {
		Deployment deploy = null;
		/**
		 * 参数deploypolicy可以为以下常量值:
		 *  DeploymentBuilder.Deploy_policy_default 
	 	 *	DeploymentBuilder.Deploy_policy_upgrade 
	     *  DeploymentBuilder.Deploy_policy_delete 
	     *
		 */
		if(jpgPath != null && !jpgPath.equals(""))
		{
			deploy = repositoryService.createDeployment()
					.name(deploymentName).addClasspathResource(xmlPath)
			.addClasspathResource(jpgPath).deploy(deploypolicy);
		}
		else
		{
			deploy = repositoryService.createDeployment()
				.name(deploymentName).addClasspathResource(xmlPath).deploy(deploypolicy);
		}

		return deploy;
	}
   发表时间:2013-06-25  
解决了这个问题,非常好啊。。。
0 请登录后投票
   发表时间:2013-06-26  
这样容易出问题,你修改流程的时候还要去考虑会不会出问题。。。
我想activiti不做这种功能就是因为不同版本升级要考虑的事情太多
0 请登录后投票
   发表时间:2013-06-26  
cjwkof 写道
这样容易出问题,你修改流程的时候还要去考虑会不会出问题。。。
我想activiti不做这种功能就是因为不同版本升级要考虑的事情太多

呵呵,什么情况下都可能出现问题,注意我们在文中提到了三种策略,一种是最常用的默认策略,一种是升级实例策略,一种是取消实例策略,每种策略都有他适用的场景。更新策略举个最简单的例子,当流程跑到中间某个环节时,跑不下去了,结果发现是流程定义有问题,这时候就会修改一流程定义,业务和前端程序都没修改,这样就可以在部署新流程时选择升级实例策略,将旧版实例全部升级到新版上来了。当然根据实际需要,也可以选择取消实例策略。
0 请登录后投票
   发表时间:2013-06-26  
楼主考虑的很全面,新扩展的功能也是很多场景用到的,支持!
0 请登录后投票
   发表时间:2013-06-27  

请问有在线的流程设计器么?

0 请登录后投票
   发表时间:2013-06-27   最后修改:2013-06-27
个人觉得楼主这样做意义不大,拿更新策略来说,难道你的应用上线时不做测试?还会出现旧流程跑到某个节点走不下去的情况?
0 请登录后投票
   发表时间:2013-06-27  
运行时更改流程的情况还是比较多的,这个设计的意义很重大。。。。
0 请登录后投票
   发表时间:2013-06-27   最后修改:2013-06-27
Jacarri_Chan 写道

请问有在线的流程设计器么?

暂时没有做activiti的在线web流程设计器,不过activiti官方提供了一个activiti modler的web在线流程设计器,感兴趣可以去试用一下。

0 请登录后投票
   发表时间:2013-06-27   最后修改:2013-06-27
zuiyanwangyue 写道
个人觉得楼主这样做意义不大,拿更新策略来说,难道你的应用上线时不做测试?还会出现旧流程跑到某个节点走不下去的情况?


我只是举了个简单的例子而已,例子中的场景更适应于开发环境流程的调试场景,但是也不排除在实际生产环境下使用。

总之,流程实例升级特性一般更多地出现在很多商业bpm产品中,比如ibm bpm,oracle bpm,SoftAG bpm等,开源BPM中很少有提供这种便利功能的,这些商业产品动辄上百万的投资,非常昂贵,我只是希望在开源的产品中也能够具备这些便利的功能,从而为自己的项目提供更多的便利。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics