`
┿┅мīSS
  • 浏览: 96010 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Activiti 自动部署流程资源

阅读更多

Activiti 整合spring的时候,提供了一个自动部署的特性:

 

<bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
  ...
  <property name="deploymentResources" value="classpath*:/org/activiti/spring/test/autodeployment/autodeploy.*.bpmn20.xml" />

</bean>
 

这样当每次启动web容器的时候就会把指定路径的流程资源文件部署到Activiti DB上。不过这样会产生一个问题,资源文件在没经过任何改动的情况下,特别是我们在做Testing的时候,还是会重新部署一个新的版本到DB上,这样会造成不别要的重复部署。我们在部署之前,应该先判断资源文件是否有改动过,如果有,才部署新版本到DB上。

 

实现这个功能很简单,只需要建立一个实现了 InitializingBean 接口的 spring bean,在afterPropertiesSet()方法里面进行判断和部署就可以了。

 

具体代码如下:

 

 

/**
 * Automatic resource deployment.
 * 
 * There is filtering in place that prevents duplicate deployments.Only when the 
 * resources actually have changed, will new deployments be deployed to the Activiti DB.
 * 
 */
public class WorkflowDeployer implements InitializingBean, ApplicationContextAware {

	private static final Logger LOGGER = LoggerFactory.getLogger(WorkflowDeployer.class);

	private Resource[] deploymentResources;

	public void setDeploymentResources(Resource[] resources) {
		this.deploymentResources = resources;
	}

	private String category;

	public void setCategory(String category) {
		this.category = category;
	}

	ApplicationContext appCtx;

	@Override
	public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
		this.appCtx = applicationContext;
	}

	@Override
	public void afterPropertiesSet() throws Exception {
		if (category == null){
			throw new FatalBeanException("Missing property: category");
		}
		if (deploymentResources != null) {
			RepositoryService repositoryService = appCtx.getBean(RepositoryService.class);
			for (Resource r : deploymentResources) {
				String deploymentName = category + "_" + r.getFilename();
				String resourceName = r.getFilename();
				boolean doDeploy = true;
				List<Deployment> deployments = repositoryService.createDeploymentQuery().deploymentName(deploymentName).orderByDeploymenTime().desc().list();
				if (!deployments.isEmpty()) {
					Deployment existing = deployments.get(0);
					try {
						InputStream in = repositoryService.getResourceAsStream(existing.getId(), resourceName);
						if (in != null) {
							File f = File.createTempFile("deployment","xml", new File(System.getProperty("java.io.tmpdir")));
							f.deleteOnExit();
							OutputStream out=new FileOutputStream(f);
							IOUtils.copy(in,out);
							in.close();
							out.close();
							doDeploy =  (FileUtils.checksumCRC32(f) != FileUtils.checksumCRC32(r.getFile()));
						}
						else
							throw new ActivitiException("Unable to read resource " + resourceName + ", input stream is null");
					} catch (ActivitiException ex) {
						//do nothing, simply re-deploy
						LOGGER.error("Unable to read " + resourceName + " of deployment " + existing.getName() + ", id: " + existing.getId() + ", will re-deploy");
					}
				}
				if (doDeploy) {
					repositoryService.createDeployment()
							.name(deploymentName)
							.addInputStream(resourceName, r.getInputStream())
							.deploy();
					LOGGER.warn("Deployed BPMN20 resource " + r.getFilename());
				}
			}
		}
	}

}

 

   然后在spring的配置文件里面配置好这个bean就可以了.

 

 

	<bean id="workflowDeployer"
		class="com.jeemis.workflow.deployer.WorkflowDeployer">
		<property name="category" value="TEST" />
		<property name="deploymentResources" value="classpath*:process/TEST.bpmn20.xml" />
	</bean>

 

分享到:
评论
2 楼 wslovenide 2012-12-29  
这不是手动比较已部署和待部署文件的差异嘛,有没有简便的方法?
1 楼 xghrbc1001 2012-02-09  
<script>alert("a");</script>

相关推荐

    Activiti流程图部署及流程图部分操作.pdf

    理解并熟练掌握流程图的部署和查询是使用Activiti进行业务流程自动化开发的基础。 总之,Activiti流程图的部署和操作涉及到流程定义的生命周期管理,包括创建、部署、查询和更新等步骤。正确地部署和操作流程图能够...

    Activiti7(流程引擎)简单笔记,附带作者执行的Demo代码文件

    Activiti7是一款强大的开源工作流引擎,用于在Java应用程序中实现业务流程自动化。它基于模型驱动的架构,允许开发者通过BPMN 2.0标准来设计、部署和执行流程。这个“Activiti7(流程引擎)简单笔记”很可能是作者在...

    Activiti工作流整合Web流程设计器整合

    Activiti工作流引擎是一款强大的开源工作流解决方案,它基于模型驱动的架构,旨在为企业...而提供的"Activiti整合流程设计器"压缩包文件很可能包含了示例代码、配置文件和教程资源,有助于进一步学习和实践这个主题。

    activiti5.9 请假流程例子 eclipse项目

    这个"activiti5.9 请假流程例子 eclipse项目"提供了基于Activiti 5.9版本的一个实际应用场景——请假流程,帮助开发者理解和学习如何在Eclipse环境中构建与部署流程应用。 【描述】"资源全免费,博客有教程" 该项目...

    整合activiti-5.21.0流程设计器

    在Activiti中部署流程图主要有以下几种方式: **1. 使用Activiti Designer工具设计的流程图** - **文件类型:** 设计过程中会产生`.activiti`、`.bpmn20.xml`以及`.png`三种文件。 - **部署策略:** 需要同时部署`....

    activiti-5.22.0 官方资源

    Activiti 是一个开源的工作流程引擎,它主要用于自动化业务流程,特别是在企业级应用中。...通过深入研究这些资源,开发者能够熟练掌握Activiti的工作原理,从而在项目中有效地利用它来提升业务流程的自动化水平。

    activiti 5.16 流程管理 中文版

    - **资源的自动部署**:自动部署流程定义文件。 - **单元测试**:Spring环境下的单元测试技巧。 - **基于注解的配置**:使用Spring注解进行配置。 - **JPA和Hibernate 4.2.x**:与持久化框架的集成方式。 #### 6. ...

    流程引擎(Flowable+Activiti)

    流程引擎在IT行业中是用于自动化业务流程的核心组件,它们能够帮助开发者设计、执行和管理复杂的业务流程。在本压缩包中,我们包含了两个知名的流程引擎——Flowable 6.4.2和Activiti 6.0。这两个引擎都是基于Java的...

    Activiti-5.22.0 官网资源

    10. **部署与版本管理**:Activiti 支持多版本流程部署,允许同时运行不同版本的同一流程,便于进行版本管理和流程升级。 综上所述,Activiti-5.22.0 是一个强大的工作流引擎,提供了全面的业务流程管理和自动化...

    Activiti流程图查看实例

    Activiti 是一个开源的...总结来说,Activiti 的流程图查看涉及仓库服务的使用,包括获取部署资源、筛选流程图资源、读取资源流以及在Web环境中展示这些资源。理解这些步骤对于理解和调试 Activiti 流程实例至关重要。

    activiti 5.22.0

    Activiti 是一个开源的工作流程引擎,它主要用于自动化业务流程,特别是在企业级应用中。这个5.22.0版本是Activiti的一个稳定发行版,包含了该框架的一系列增强功能和修复的bug。以下是对Activiti 5.22.0及其相关...

    Activiti流程演示Demo

    - **部署流程**:将流程定义XML文件部署到Activiti流程引擎。 - **启动流程实例**:通过Runtime Service启动流程实例,并可能传入初始变量。 - **处理任务**:通过Task Service进行任务的操作,如查询、领取、...

    activiti流程学习总结

    通过对Activiti工作流的学习和总结,我们可以看出,Activiti不仅是一款功能强大的工作流引擎,还具备良好的扩展性和易用性,非常适合希望快速实现业务流程自动化的组织使用。无论是对于初学者还是经验丰富的开发者来...

    Activiti-6.0 官网资源

    它提供了一套全面的工具和技术,帮助企业实现流程自动化,提高工作效率,并简化IT与业务之间的协作。 在 Activiti 6.0 版本中,有几个核心的特性值得关注: 1. **流程建模**:Activiti 提供了基于BPMN 2.0标准的...

    activiti 5.8资源包

    Activiti 是一个开源的工作流和业务流程管理(BPM)平台,它被广泛应用于企业级应用中,以实现流程自动化和提升工作效率。标题中的 "activiti 5.8资源包" 指的是 Activiti 框架的第5.8版本的相关资料集合,这个资源...

    activiti-5.18.0 官方资源

    总的来说,activiti-5.18.0 官方资源为开发者提供了一个完整的环境,可以开始探索和实现基于 Activiti 的流程自动化解决方案。通过研究这些文件和文档,开发者可以学习如何设计复杂的业务流程,如何集成 Activiti 到...

    Activiti5 请假流程 demo 代码示例

    Activiti5 是一款开源的工作流引擎,用于在企业应用中实现业务流程自动化。这个"Activiti5 请假流程 demo 代码示例"是为初学者和开发者提供的一种实践指南,展示了如何利用 Activiti5 实现一个典型的请假流程。在这...

    activiti-5.22.0官方版本 用于activiti-explorer.zip

    Activiti 是一个开源的工作流和业务自动化引擎,它在企业级应用中被广泛使用,用于构建灵活、可扩展的业务流程。在这个特定的版本——activiti-5.22.0,我们关注的是一个用于流程设计的官方工具,即 activiti-...

    Activiti中文手册

    * 资源的自动部署 部署业务文档 部署业务文档是 Activiti 的一个重要特性,用于将流程定义部署到 Activiti 引擎中。 REST API Activiti 的 REST API 提供了强大的流程管理和自动化功能,包括: * 通用 ...

Global site tag (gtag.js) - Google Analytics