- 浏览: 718634 次
- 性别:
- 来自: 重庆
文章分类
最新评论
-
superchangme:
show it,you are you:authenticat ...
认证 (authentication) 和授权 (authorization) 的区别 -
深度交流社区:
说的很清楚,学习了
认证 (authentication) 和授权 (authorization) 的区别 -
mazhi4562qq:
你好, 可以请教个关于activiti定时边界事件的问题么?我 ...
Activiti定时任务示例 -
落叶萧萧:
Spring MVC HelloWorld入门例子 -
daniaowansui:
什么垃圾东西?
使用Sping AOP记录操作日志和错误日志
Activiti 整合spring的时候,提供了一个自动部署的特性:
这样当每次启动web容器的时候就会把指定路径的流程资源文件部署到Activiti DB上。不过这样会产生一个问题,资源文件在没经过任何改动的情况下,特别是我们在做Testing的时候,还是会重新部署一个新的版本到DB上,这样会造成不别要的重复部署。我们在部署之前,应该先判断资源文件是否有改动过,如果有,才部署新版本到DB上。
实现这个功能很简单,只需要建立一个实现了 InitializingBean 接口的 spring bean,在afterPropertiesSet()方法里面进行判断和部署就可以了。
具体代码如下:
然后在spring的配置文件里面配置好这个bean就可以了.
原文来自:http://jeemiss.iteye.com/blog/1103431
<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()方法里面进行判断和部署就可以了。
具体代码如下:
/** * */ package com.highcolu.dms.workflow; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.util.List; import org.activiti.engine.ActivitiException; import org.activiti.engine.RepositoryService; import org.activiti.engine.repository.Deployment; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.BeansException; import org.springframework.beans.FatalBeanException; import org.springframework.beans.factory.InitializingBean; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.core.io.Resource; /** * @Description:结合Spring自动部署Activit流程定义文件 * @version:2012-12-20 * @author: <a href="mailto:zhouwentao16@gmail.com">周文滔</a> */ public class WorkflowDeployer implements InitializingBean, ApplicationContextAware { private static final Log LOGGER = LogFactory.getLog(WorkflowDeployer.class); private Resource[] deploymentResources; private String category; ApplicationContext appCtx; public void setDeploymentResources(Resource[] resources) { this.deploymentResources = resources; } public void setCategory(String category) { this.category = category; } @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.appCtx = applicationContext; } @Override public void afterPropertiesSet() throws Exception { if (category == null) { throw new FatalBeanException("缺失属性 : 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("不能读取资源 " + resourceName + ", 输入流为空"); } catch (ActivitiException ex) { 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("文件部署成功 : " + 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>
原文来自:http://jeemiss.iteye.com/blog/1103431
发表评论
-
你真的会数钱吗?
2014-04-15 16:22 1661摘要:货币,记账相关的领域模型,使用值对象 快年底了,假如 ... -
Activiti5.12 + Mysql connection错误
2013-07-22 14:21 5931项目使用的工作流引擎是Activiti 5.12,数据库是M ... -
基于Pushlet和ExtJS3的Web即时通讯应用
2013-07-09 17:01 0前段时间学习了Pushlet,再加上网上也搜索了一下这方面的一 ... -
@MatrixVariable的使用
2013-07-08 16:03 15984在Spring3.2 后,一个@MatrixVariable出 ... -
SpringMVC中form:select的使用
2013-07-08 15:40 63182最近使用Spring MVC的多,发下在Spring MVC下 ... -
Hibernate Transformers之三种结果转换说明
2013-06-06 22:57 13644在hibernate使用的过程中.我们通常需要对结果进行解释. ... -
Pushlet白皮书中文版下载
2013-04-23 11:36 1844最近研究Pushlet的比较多,确实觉得资料文档比较少呀。 分 ... -
Pushlet二次开发重点
2013-04-22 16:16 45691 Pushlet自带事件源分析 Pushl ... -
Maven+SVN+jenkins在linux的环境搭建
2013-03-20 17:14 4649就来工作上用到了这几个东西来做项目的持续集成管理 以前看《M ... -
Linux下的端口被占用解决办法
2013-03-20 17:02 1700在重启tomcat的时候,报错: java.net.Bin ... -
项目启动报错: Acquisition Attempt Failed!!!
2013-03-20 16:58 6425项目启动报错: Acquisition Attempt Fai ... -
Activiti定时任务示例
2013-01-25 13:36 47144工作流其实做的事情还是很多的, 这不,这周公司经理叫我在前段时 ... -
Struts2标签调用静态方法
2012-12-14 16:13 2062这几天使用工作流的时候,很多地方在页面需要调用静态方法获取内容 ... -
Activiti获取历史任务信息
2012-12-06 22:42 15634在项目中的工作流操作中,需要用到工作流的流程历史信息列表显示, ... -
JSP页面调用Spring容器注入的Bean
2012-12-04 15:55 3322首先在jsp中导入: <jsp:directive.pa ... -
无限级菜单数据库设计
2012-11-14 14:59 10103第一种方案: 表为两张,一张分类表,一张信息表。 表1: ... -
Hadoop:java.io.IOException: Tmp directory
2012-08-30 11:16 2877今天在机器上搭建Hadoop测试,第一次运行: bin/had ... -
多多研究Spring3源码
2012-08-14 15:58 1563最近自己写一个Ioc容器。 基本上全部采用直接方式支持Ioc, ... -
Spring MVC HelloWorld入门例子
2012-07-05 21:36 61805本例子为你讲解在spring3中如何使用基于注解的mvc框架. ... -
jBPM4之请假流程例子
2012-05-28 15:33 2193最近项目需要工作流,所以就准备采用jBPM4作为工作流引擎, ...
相关推荐
这通常涉及到将 `activiti-explorer.war` 文件部署到应用服务器(如 Tomcat),或者将其解压并将其资源添加到 Spring 应用的 Web-INF 目录下。同时,需要配置 `activiti.cfg.xml` 文件,以指向我们之前配置的 Spring...
当我们将 `Activiti` 与 `Spring` 结合使用时,可以构建出高效、灵活且易于维护的业务流程管理系统。 `JUnit` 是一个广泛使用的Java单元测试框架,它使得开发者能够编写和运行可重复的自动化测试用例,以确保代码的...
5. **部署流程定义**:在应用程序启动或需要时,使用流程引擎的部署API将流程模型部署到Activiti引擎,这将创建流程定义实例。 6. **操作流程实例**:通过Spring注入的流程API,如`RuntimeService`、`TaskService`...
Activiti是一款流行的开源工作流管理系统,用于实现业务流程自动化。而Spring MVC是Spring框架的一个模块,专门用于构建Web应用程序,提供模型-视图-控制器(MVC)架构。 【描述】"activiti + spring mvc 基础web...
- **资源的自动部署**:自动部署流程定义文件。 - **单元测试**:Spring环境下的单元测试技巧。 - **基于注解的配置**:使用Spring注解进行配置。 - **JPA和Hibernate 4.2.x**:与持久化框架的集成方式。 #### 6. ...
SpringBoot与Activiti集成是一个常见的企业级应用开发实践,它将高效的SpringBoot框架与流程引擎Activiti相结合,用于实现业务流程自动化。这个集成Demo提供了一个快速启动的模板,帮助开发者理解如何在SpringBoot...
在IT行业中,流程管理工具是企业自动化不可或缺的一部分,而Activiti作为一款强大的工作流引擎,被广泛应用在Spring框架中的各种项目。本篇文章将深入探讨如何将`activiti-modeler`集成到Spring项目中,以及利用`...
在实际开发中,你可能还需要学习如何创建和部署流程定义(BPMN XML文件),如何定义用户任务(User Task)并关联外置表单,以及如何使用Activiti提供的API进行流程的启动、查询、干预等操作。 总的来说,"spring-...
在实际应用中,Activiti 可以与 Spring 框架、Hibernate ORM 等技术结合,构建出强大的企业级工作流应用。它提供了丰富的 API 和服务,允许开发者在程序中控制流程的执行,如启动流程实例、完成任务、查询历史记录等...
6. **编写流程相关代码**:包括部署流程定义,启动流程实例,处理任务节点等。可以使用Activiti提供的API,如`runtimeService.startProcessInstanceByKey()`启动流程,`taskService.complete(taskId)`完成任务。 7....
在本项目中,我们重点探讨的是Activiti 6.0版本,它集成了Spring Boot框架,使得开发和部署流程应用程序变得更加便捷。 1. **Activiti 6.0工作流引擎**: Activiti 6.0是Activiti的一个重要里程碑,它提供了许多新...
本文将深入探讨如何将Spring Boot与Activiti模块结合,构建一个高效的工作流程管理系统。 首先,我们需要理解Spring Boot的核心理念:简化Spring应用的初始搭建以及开发过程。它通过自动配置和起步依赖,使得开发者...
将 BPMN 文件存放在项目资源目录下的 `processes` 目录,Spring Boot 启动时会自动部署到 Activiti 引擎。 **5. 创建业务接口和实现** 定义与工作流相关的业务接口,比如启动流程、完成任务等,并实现这些接口。...
Activiti 是一个开源的工作流和业务自动化引擎,它支持业务流程建模、部署、执行和监控。这个"activiti 项目的dome"是基于Spring Boot的Activiti实践项目,可以帮助开发者快速理解和应用Activiti在实际开发中的用法...
5. **部署流程**:在 SpringBoot 应用中,通过调用流程引擎的部署 API 来加载并部署 BPMN XML 文件,使其生效。 6. **业务逻辑集成**:通过注解驱动或编程方式与 Activiti 交互,启动流程实例,完成任务分配、任务...
本案例将探讨如何将Activiti与SpringBoot相结合,以实现高效、灵活的流程管理功能。 **一、流程部署与查询流程定义** 在SpringBoot项目中集成Activiti,首先需要添加相应的依赖到`pom.xml`文件中。接着,我们需要...
它可能还会介绍如何部署流程定义到Activiti Engine,并通过API或服务接口启动、查询和控制流程实例。实战部分可能涉及实际业务场景,比如请假申请、报销审批等,以帮助读者更好地理解Activiti在实际工作中的应用。 ...
标题“activiti整合spring”涉及到的是在企业级应用开发中,如何将Activiti工作流引擎与Spring框架相结合,以实现灵活、可扩展的业务流程自动化。Activiti是一款开源的工作流和业务流程管理(BPM)系统,而Spring是...
例如,我们可能会创建一个`ProcessEngine`实例,部署流程定义,然后使用`RuntimeService`启动新的流程实例。 此外,项目可能还包含了数据库配置,因为Activiti需要一个数据库来存储流程实例、任务和其他相关数据。...
Activiti 是一个开源的工作流和业务自动化引擎,广泛应用于企业级应用中,提供流程定义、执行、监控等功能。本资源包含的"activiti学习思维导图"是一份关于Activiti学习的综合指南,旨在帮助用户从基础到进阶地掌握...