卸载JBoss工作流引擎Jbpm的工作流定义

2023-11-29 03:08

本文主要是介绍卸载JBoss工作流引擎Jbpm的工作流定义,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

卸载 JBoss 工作流引擎 Jbpm 的工作流定义
上次写了一个部署Jboss的工作流引擎Jbpm的工作流定义的助手类,并写了一篇文章 《编程方式部署jBPM工作流》。有部署,就必然要有卸载。今天,我又写了一个卸载Jbpm工作流定义及其相关实例的助手类。下面是源代码:
接口:
package com.withub.common.util;
public interface IUninstallProcessDefinition {
    /**
      * 删除给定 业务程序定义 名称的 所有版本的业务程序定义,以及业务程序实例
      * @param name
      */
    public abstract void uninstallJbpmProcessDefinitionsTransaction(String name);
    /**
      * 删除给定版本的业务程序定义及其所有实例。
      * @param name
      * @param version
      */
    public abstract void uninstallJbpmProcessDefinitionTransaction(String name,
           int version);
    /**
      * 删除最新版本的业务程序定义及其实例。
      * @param name
      */
    public abstract void uninstallLatestJbpmProcessDefinitionTransaction(
           String name);
}
实现类:
/**
*
*/
package com.withub.common.util;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jbpm.JbpmConfiguration;
import org.jbpm.JbpmContext;
import org.jbpm.db.GraphSession;
import org.jbpm.graph.def.ProcessDefinition;
/**
* @author 沈东良 shendl_s@hotmail.com
* 10:50:42 AM
* 这个类,用来卸载已部署的业务程序定义
* *Transaction 这样命名的方法名,表示可以直接在前台调用。已经处理了事务和数据库连接。
*
* *Service 是助手方法。 可以被任意调用。
*
* *Dao 是使用数据库、事务的Service助手方法。 不能直接被前台调用。
* 否则,会出现数据库连接、事务未创建和管理的问题。 数据库访问和事务处理可能会失败。
*/
public class UninstallJbpmProcessDefinition implements IUninstallProcessDefinition {
private Log log=LogFactory.getLog(this.getClass());
private static IUninstallProcessDefinition instance;
public static IUninstallProcessDefinition getInstance(){
if(UninstallJbpmProcessDefinition.instance==null){
UninstallJbpmProcessDefinition.instance=new UninstallJbpmProcessDefinition();
}
return UninstallJbpmProcessDefinition.instance;
}
/* (non-Javadoc)
* @see com.withub.common.util.IUninstallProcessDefinition#uninstallJbpmProcessDefinitionsTransaction(java.lang.String)
*/
public void uninstallJbpmProcessDefinitionsTransaction(String name){
JbpmContext jbpmContext = JbpmConfiguration.getInstance().createJbpmContext();
try {
this.uninstallJbpmProcessDefinitionsDao(name);
}finally{
jbpmContext.close();
}
}
/**
*
* @param name
*/
private void uninstallJbpmProcessDefinitionsDao(String name){
JbpmContext jbpmContext = JbpmConfiguration.getInstance().getCurrentJbpmContext();
GraphSession graphSession=jbpmContext.getGraphSession();
List processDefinitions=graphSession.findAllProcessDefinitionVersions(name);
if(processDefinitions!=null){
Iterator iterator=processDefinitions.iterator();
while(iterator.hasNext()){
graphSession.deleteProcessDefinition((ProcessDefinition)iterator.next());
}
}
log.info("卸载工作流:"+name);
}
/* (non-Javadoc)
* @see com.withub.common.util.IUninstallProcessDefinition#uninstallJbpmProcessDefinitionTransaction(java.lang.String, int)
*/
public void uninstallJbpmProcessDefinitionTransaction(String name,int version){
JbpmContext jbpmContext = JbpmConfiguration.getInstance().createJbpmContext();
try {
this.uninstallJbpmProcessDefinitionDao(name, version);
}finally{
jbpmContext.close();
}
}
private void uninstallJbpmProcessDefinitionDao(String name,int version){
JbpmContext jbpmContext = JbpmConfiguration.getInstance().getCurrentJbpmContext();
GraphSession graphSession=jbpmContext.getGraphSession();
graphSession.deleteProcessDefinition(graphSession.findProcessDefinition(name, version));
log.info("卸载工作流:"+name+"第"+new Integer(version)+"版");
}
/* (non-Javadoc)
* @see com.withub.common.util.IUninstallProcessDefinition#uninstallLatestJbpmProcessDefinitionTransaction(java.lang.String)
*/
public void uninstallLatestJbpmProcessDefinitionTransaction(String name){
JbpmContext jbpmContext = JbpmConfiguration.getInstance().createJbpmContext();
try {
this.uninstallLatestJbpmProcessDefinitionDao(name);
}finally{
jbpmContext.close();
}
}
/**
*
* @param name
*/
private void uninstallLatestJbpmProcessDefinitionDao(String name){
JbpmContext jbpmContext = JbpmConfiguration.getInstance().getCurrentJbpmContext();
GraphSession graphSession=jbpmContext.getGraphSession();
ProcessDefinition processDefinition=graphSession.findLatestProcessDefinition(name);
graphSession.deleteProcessDefinition(processDefinition);
log.info("卸载工作流最新版:"+name);
}
/**
* @param args
* 测试
*/
public static void main(String[] args) {
/**
*1,一个参数,全部
*2,二个参数 名字,latest 最新版本
*                版本号
*/
IUninstallProcessDefinition uninstallJbpmProcessDefinition=UninstallJbpmProcessDefinition.getInstance();
if(args.length==1){
uninstallJbpmProcessDefinition.uninstallJbpmProcessDefinitionsTransaction(args[0]);
}else if(args.length==2){
if(args[1].equalsIgnoreCase("latest")){
uninstallJbpmProcessDefinition.uninstallLatestJbpmProcessDefinitionTransaction(args[0]);
}else{
uninstallJbpmProcessDefinition.uninstallJbpmProcessDefinitionTransaction(args[0], Integer.parseInt(args[1]));
}
}else{
throw new RuntimeException("参数数目不正确! 参数:1,一个参数,提供要卸载的工作流的名称; 2,两个参数,第一个是要卸载的最新版本的工作流名称,第二个参数是latest; 3,两个参数," +
"第一个是要卸载的工作流名称,第二个参数是要修改的工作流的版本号。");
}
}
}

这篇关于卸载JBoss工作流引擎Jbpm的工作流定义的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/431219

相关文章

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

Python利用PySpark和Kafka实现流处理引擎构建指南

《Python利用PySpark和Kafka实现流处理引擎构建指南》本文将深入解剖基于Python的实时处理黄金组合:Kafka(分布式消息队列)与PySpark(分布式计算引擎)的化学反应,并构建一... 目录引言:数据洪流时代的生存法则第一章 Kafka:数据世界的中央神经系统消息引擎核心设计哲学高吞吐

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

linux安装、更新、卸载anaconda实践

《linux安装、更新、卸载anaconda实践》Anaconda是基于conda的科学计算环境,集成1400+包及依赖,安装需下载脚本、接受协议、设置路径、配置环境变量,更新与卸载通过conda命令... 目录随意找一个目录下载安装脚本检查许可证协议,ENTER就可以安装完毕之后激活anaconda安装更

setsid 命令工作原理和使用案例介绍

《setsid命令工作原理和使用案例介绍》setsid命令在Linux中创建独立会话,使进程脱离终端运行,适用于守护进程和后台任务,通过重定向输出和确保权限,可有效管理长时间运行的进程,本文给大家介... 目录setsid 命令介绍和使用案例基本介绍基本语法主要特点命令参数使用案例1. 在后台运行命令2.

Django中的函数视图和类视图以及路由的定义方式

《Django中的函数视图和类视图以及路由的定义方式》Django视图分函数视图和类视图,前者用函数处理请求,后者继承View类定义方法,路由使用path()、re_path()或url(),通过in... 目录函数视图类视图路由总路由函数视图的路由类视图定义路由总结Django允许接收的请求方法http

Java中的xxl-job调度器线程池工作机制

《Java中的xxl-job调度器线程池工作机制》xxl-job通过快慢线程池分离短时与长时任务,动态降级超时任务至慢池,结合异步触发和资源隔离机制,提升高频调度的性能与稳定性,支撑高并发场景下的可靠... 目录⚙️ 一、调度器线程池的核心设计 二、线程池的工作流程 三、线程池配置参数与优化 四、总结:线程

一文详解SpringBoot中控制器的动态注册与卸载

《一文详解SpringBoot中控制器的动态注册与卸载》在项目开发中,通过动态注册和卸载控制器功能,可以根据业务场景和项目需要实现功能的动态增加、删除,提高系统的灵活性和可扩展性,下面我们就来看看Sp... 目录项目结构1. 创建 Spring Boot 启动类2. 创建一个测试控制器3. 创建动态控制器注

MySQL之InnoDB存储引擎中的索引用法及说明

《MySQL之InnoDB存储引擎中的索引用法及说明》:本文主要介绍MySQL之InnoDB存储引擎中的索引用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录1、背景2、准备3、正篇【1】存储用户记录的数据页【2】存储目录项记录的数据页【3】聚簇索引【4】二

SpringBoot集成LiteFlow工作流引擎的完整指南

《SpringBoot集成LiteFlow工作流引擎的完整指南》LiteFlow作为一款国产轻量级规则引擎/流程引擎,以其零学习成本、高可扩展性和极致性能成为微服务架构下的理想选择,本文将详细讲解Sp... 目录一、LiteFlow核心优势二、SpringBoot集成实战三、高级特性应用1. 异步并行执行2