- 浏览: 712717 次
- 性别:
- 来自: 重庆
文章分类
最新评论
-
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 1571摘要:货币,记账相关的领域模型,使用值对象 快年底了,假如 ... -
Activiti5.12 + Mysql connection错误
2013-07-22 14:21 5863项目使用的工作流引擎是Activiti 5.12,数据库是M ... -
基于Pushlet和ExtJS3的Web即时通讯应用
2013-07-09 17:01 0前段时间学习了Pushlet,再加上网上也搜索了一下这方面的一 ... -
@MatrixVariable的使用
2013-07-08 16:03 15929在Spring3.2 后,一个@MatrixVariable出 ... -
SpringMVC中form:select的使用
2013-07-08 15:40 63067最近使用Spring MVC的多,发下在Spring MVC下 ... -
Hibernate Transformers之三种结果转换说明
2013-06-06 22:57 13556在hibernate使用的过程中.我们通常需要对结果进行解释. ... -
Pushlet白皮书中文版下载
2013-04-23 11:36 1807最近研究Pushlet的比较多,确实觉得资料文档比较少呀。 分 ... -
Pushlet二次开发重点
2013-04-22 16:16 45251 Pushlet自带事件源分析 Pushl ... -
Maven+SVN+jenkins在linux的环境搭建
2013-03-20 17:14 4601就来工作上用到了这几个东西来做项目的持续集成管理 以前看《M ... -
Linux下的端口被占用解决办法
2013-03-20 17:02 1637在重启tomcat的时候,报错: java.net.Bin ... -
项目启动报错: Acquisition Attempt Failed!!!
2013-03-20 16:58 6330项目启动报错: Acquisition Attempt Fai ... -
Activiti定时任务示例
2013-01-25 13:36 47010工作流其实做的事情还是很多的, 这不,这周公司经理叫我在前段时 ... -
Struts2标签调用静态方法
2012-12-14 16:13 2016这几天使用工作流的时候,很多地方在页面需要调用静态方法获取内容 ... -
Activiti获取历史任务信息
2012-12-06 22:42 15551在项目中的工作流操作中,需要用到工作流的流程历史信息列表显示, ... -
JSP页面调用Spring容器注入的Bean
2012-12-04 15:55 3245首先在jsp中导入: <jsp:directive.pa ... -
无限级菜单数据库设计
2012-11-14 14:59 10041第一种方案: 表为两张,一张分类表,一张信息表。 表1: ... -
Hadoop:java.io.IOException: Tmp directory
2012-08-30 11:16 2819今天在机器上搭建Hadoop测试,第一次运行: bin/had ... -
多多研究Spring3源码
2012-08-14 15:58 1511最近自己写一个Ioc容器。 基本上全部采用直接方式支持Ioc, ... -
Spring MVC HelloWorld入门例子
2012-07-05 21:36 61732本例子为你讲解在spring3中如何使用基于注解的mvc框架. ... -
jBPM4之请假流程例子
2012-05-28 15:33 2122最近项目需要工作流,所以就准备采用jBPM4作为工作流引擎, ...
相关推荐
Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...
Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...
Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个...
Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...
Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...
Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...
Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...
Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...
Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...
Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...
Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...
Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...
Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...
Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...
Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java源码...