`

JbpmUtil 工具类分享 (jbpm4.x工作流)

 
阅读更多

/**
 *
 */
package com.zwl.util;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;
import java.util.Map;
import java.util.zip.ZipInputStream;

import org.jbpm.api.Execution;
import org.jbpm.api.ExecutionService;
import org.jbpm.api.HistoryService;
import org.jbpm.api.ManagementService;
import org.jbpm.api.ProcessDefinition;
import org.jbpm.api.ProcessEngine;
import org.jbpm.api.ProcessInstance;
import org.jbpm.api.RepositoryService;
import org.jbpm.api.TaskService;
import org.jbpm.api.model.OpenExecution;
import org.jbpm.api.task.Participation;
import org.jbpm.api.task.Task;
import org.jbpm.pvm.internal.model.ExecutionImpl;
import org.jbpm.pvm.internal.task.OpenTask;
import org.jbpm.pvm.internal.task.TaskImpl;

/**
 * jbpm简单工具类 。
 *
 * @author lijian
 *
 */
public class JbpmUtil {

    private ProcessEngine processEngine;

    private RepositoryService repositoryService = null;
    private ExecutionService executionService = null;
    private TaskService taskService = null;
    private HistoryService historyService = null;
    private ManagementService managementService = null;

    public JbpmUtil() {

    }

    /**
     * 通过构造方法,传递流程引擎,实例化相关实体类。
     *
     * @param processEngine
     */
    public JbpmUtil(ProcessEngine processEngine) {
        this.processEngine = processEngine;
        repositoryService = processEngine.getRepositoryService();
        executionService = processEngine.getExecutionService();
        taskService = processEngine.getTaskService();
        historyService = processEngine.getHistoryService();
        managementService = processEngine.getManagementService();
    }

    // ------------------- 实用方法 --------------------

    /**
     * 部署新流程定义通过路径。
     *
     * @param resourceName
     * @return
     */
    public String newDeployDefinitionByPath(String resourceName) {
        return repositoryService.createDeployment().addResourceFromClasspath(
                resourceName).deploy();
    }

    /**
     * 部署新流程定义通过zip包
     *
     * @param resourceZipName
     * @return
     */
    public String newDeployDefinitionByZip(String resourceZipName) {
        ZipInputStream zis = new ZipInputStream(this.getClass()
                .getResourceAsStream(resourceZipName));
        return repositoryService.createDeployment()
                .addResourcesFromZipInputStream(zis).deploy();
    }

    /**
     * 部署新流程定义通过url请求。
     *
     * @param urlStr
     * @return
     * @throws MalformedURLException
     *             网络异常
     */
    public String newDeployDefinitionByUrl(String urlStr)
            throws MalformedURLException {
        URL url = new URL(urlStr);
        return repositoryService.createDeployment().addResourceFromUrl(url)
                .deploy();
    }

    /**
     * 开始一个流程实例
     *
     * @param id
     * @param map
     * @return
     */
    public ProcessInstance startProcessInstanceById(String processDefinitionId,
            Map<String, ?> variables) {
        return executionService.startProcessInstanceById(processDefinitionId,
                variables);
    }

    /**
     * 完成任务
     *
     * @param taskId
     * @param variables
     */
    public void completeTask(String taskId, Map<String, ?> variables) {
        if (null == variables) {
            taskService.completeTask(taskId);
            return;
        }
        taskService.completeTask(taskId, variables);
    }

    /**
     * 完成任务
     *
     * @param taskId
     * @param outcome
     */
    public void completeTask(String taskId, String outcome) {
        if (null == outcome) {
            taskService.completeTask(taskId);
            return;
        }
        taskService.completeTask(taskId, outcome);
    }

    /**
     * 获得所有发布的流程
     *
     * @return
     */
    public List<ProcessDefinition> getAllProcessDefinitionList() {
        return repositoryService.createProcessDefinitionQuery().list();
    }

    /**
     * 获得所有的流程实例
     *
     * @return
     */
    public List<ProcessInstance> getAllProcessInstanceList() {
        return executionService.createProcessInstanceQuery().list();
    }

    /**
     * 根据流程实例executionId与variableName,获取指定的变量值
     *
     * @param executionId
     * @param variableName
     * @return
     */
    public Object getVariableByexecutionId(String executionId,
            String variableName) {
        return executionService.getVariable(executionId, variableName);
    }

    /**
     * 根据任务taskId与变量名variableName,获取指定变量值
     *
     * @param taskId
     * @param variableName
     * @return
     */
    public Object getVariable(String taskId, String variableName) {
        return taskService.getVariable(taskId, variableName);
    }

    /**
     * 设置变量
     *
     * @param taskId
     * @param variables
     */
    public void setVariables(String taskId, Map<String, ?> variables) {
        taskService.setVariables(taskId, variables);
    }

    /**
     * 获取指定用户Id的任务
     *
     * @param userId
     * @return
     */
    public List<Task> findPersonalTasks(String userId) {
        return taskService.findPersonalTasks(userId);
    }

    /**
     * 根据任务id获取任务
     *
     * @param taskId
     * @return
     */
    public Task getTaskByTaskId(String taskId) {
        return taskService.getTask(taskId);
    }

    /**
     * 通过主任务,参与会签者,创建子任务
     *
     * @param task
     * @param users
     */
    public void createSubTasks(Task task, List<String> users) {

        // OpenTask才有createSubTask方法,Task接口是没有的
        OpenTask oTask = (OpenTask) task;

        // 这个对象非常重要,没有它,通过子任务无法跟主任务获得联系
        Execution execution = executionService.findExecutionById(task
                .getExecutionId());
        // 获得所有的参与者
        for (String userId : users) {
            TaskImpl subTask = (TaskImpl) oTask.createSubTask();
            subTask.setAssignee(userId);
            subTask.setName(task.getName());
            subTask.setFormResourceName(task.getFormResourceName());
            // 这句话是关键 只有设定同样的实例 子任务才能获得主任务设定的变量
            subTask.setExecution((ExecutionImpl) execution);
            taskService.addTaskParticipatingUser(task.getId(), userId,
                    Participation.CLIENT);
        }
    }

    /**
     * @param execution
     * @return
     */
    public Task getByOpenExecution(OpenExecution execution) {
        // 获得实例ID
        String pid = execution.getProcessInstance().getId();
        return taskService.createTaskQuery().processInstanceId(pid)
                .activityName(execution.getName()).uniqueResult();
    }

    /**
     * Saves the given task to persistent storage.
     *
     * @param task
     * @return
     */
    public String saveTask(Task task) {
        return taskService.saveTask(task);
    }

    /**
     * 级联删除流程定义,直接删除该流程定义下的所有实例
     *
     * @param deploymentId
     *            流程定义id
     */
    public void deleteDeploymentCascade(String deploymentId) {
        if (deploymentId == null) {
            return;
        }
        repositoryService.deleteDeploymentCascade(deploymentId);
    }

    // setter-getter方法

    public ProcessEngine getProcessEngine() {
        return processEngine;
    }

    public void setProcessEngine(ProcessEngine processEngine) {
        this.processEngine = processEngine;
        System.out.println("processEngine=" + processEngine);
        repositoryService = processEngine.getRepositoryService();
        executionService = processEngine.getExecutionService();
        taskService = processEngine.getTaskService();
        historyService = processEngine.getHistoryService();
        managementService = processEngine.getManagementService();
    }

    public RepositoryService getRepositoryService() {
        return repositoryService;
    }

    public void setRepositoryService(RepositoryService repositoryService) {
        this.repositoryService = repositoryService;
    }

    public ExecutionService getExecutionService() {
        return executionService;
    }

    public void setExecutionService(ExecutionService executionService) {
        this.executionService = executionService;
    }

    public TaskService getTaskService() {
        return taskService;
    }

    public void setTaskService(TaskService taskService) {
        this.taskService = taskService;
    }

    public HistoryService getHistoryService() {
        return historyService;
    }

    public void setHistoryService(HistoryService historyService) {
        this.historyService = historyService;
    }

    public ManagementService getManagementService() {
        return managementService;
    }

    public void setManagementService(ManagementService managementService) {
        this.managementService = managementService;
    }

}

分享到:
评论

相关推荐

    jBPM4.x使用前的准备工作

    **jbPM4.x使用前的准备工作** jbPM(Java Business Process Management)是一个开源的工作流和业务流程管理系统,它提供了一套完整的解决方案来管理和执行业务流程。在开始使用jbPM4.x之前,理解其核心概念、环境...

    jbpm jbpm4.3.jar

    jbpm jbpm4.3.jar DDDDDDDD

    jBPM3.x-4.x-5.X资料大全

    jBPM,全称Java Business Process Management,是一个开源的工作流管理系统,用于实现业务流程自动化。这个资料大全包含了jBPM从3.x到5.x不同版本的相关文档,为开发者提供了全面的学习资源。 首先,我们来看看...

    JBPM采购申请系统——05_构建JBPM数据库.7z

    JBPM采购申请系统——05_构建JBPM数据库.7z JBPM采购申请系统——05_构建JBPM数据库.7z JBPM采购申请系统——05_构建JBPM数据库.7z JBPM采购申请系统——05_构建JBPM数据库.7z JBPM采购申请系统——05_构建JBPM...

    jbpm3.2.x开发所需jar包

    **其他依赖库**:如log4j.jar(日志记录)、commons-logging.jar(日志接口)、commons-lang.jar(通用语言工具类)、commons-collections.jar(集合操作工具类)等,这些都是Java开发中常用的第三方库,为Jbpm提供...

    jBPM4工作流应用开发指南.pdf

    - **jBPM4工作流应用开发指南:** 表明这是一个专注于jBPM4版本的工作流应用开发的指南,由胡奇编写。 - **胡奇:** 该标签重复提及胡奇,强化了指南作者的身份和该作品的关联性。 ### 部分内容知识点: 由于提供...

    jbpm4.rar_jbpm_jbpm designer_jbpm4

    jBPM,全称Java Business Process Management,是一个开源的工作流管理系统,主要负责处理业务流程的建模、执行和管理。jBPM 4是该系统的第四个主要版本,它引入了诸多新特性和改进,旨在提供更高效、灵活且可扩展的...

    jbpm2.rar_java 工作流_jbpm_工作流

    "java 工作流"和"jbpm 工作流"标签进一步明确了主题,这是一份关于使用Java语言和JBPM框架实现工作流的材料。 描述中提到的“jbpm工作流视频文件,B5实战_将复杂业务数据模型关联到流程”表明,这份资料可能是以...

    Spring 3.1.x + Hibernate 4.2.x+JBPM 5.2 + Ecache例子源码

    标题中的"Spring 3.1.x + Hibernate 4.2.x + JBPM 5.2 + Ecache例子源码"代表了一个集成开发环境,其中包含了四个关键的技术组件: 1. **Spring 3.1.x**:这是一个开源的应用框架,主要用于简化Java企业级应用的...

    JBPM5工作流引擎 S2SH+JBPM4.4开发工作流的一个完整的请假流程例子

    JBPM5工作流引擎 S2SH+JBPM4.4开发工作流的一个完整的请假流程例子。带有文档教程和所有源码+JAR包。在网上找了半天jbpm6\jbpm7的资料,都很少。所以 环境:Myeclipse2015 JDK1.7 mysql 5.0 Struts2+Spring3.1 1...

    jbpm3.2 .jar

    jbpm是一个开源项目,它提供了全面的工作流和业务规则管理功能,使开发人员能够构建灵活且可扩展的业务应用程序。 jbpm-jpdl.jar是jbpm的Job Process Definition Language(JPDL)实现的库文件。JPDL是一种XML方言...

    jbpm-4.4.zip part03

    【jbpm-4.4.zip part03】这个压缩文件是关于jbpm 4.4版本的组成部分,jbpm(Java Business Process Management)是一个开源的工作流管理系统,它提供了业务流程建模、部署、执行和监控的功能。jbpm 4.4是该系统的一...

    jbpm.4.4.jar

    jbpm是一个开源的工作流管理系统,它提供了一套全面的工具和服务,用于设计、部署和执行业务流程。jbpm-4.4.jar包含了jbpm的主要功能,包括流程定义、流程实例管理、任务服务、事件处理以及与数据库交互的持久化层。...

    安装和配置jBPM4.docx

    jBPM4 是一个基于 Java 的工作流引擎,它提供了一个灵活的流程管理系统,允许开发者构建、部署和管理复杂的企业流程应用。在本文中,我们将介绍如何安装和配置 jBPM4,包括安装先决条件、下载和解压 jBPM4 软件包、...

    JBossjBPM.rar_工作流引擎

    【JBoss jBPM——工作流引擎】 工作流引擎是一种软件系统,用于自动化业务流程,它根据预定义的规则和步骤来协调..."jbpm.nh"文件中的具体实践经验和案例分析将进一步加深对jBPM的理解,帮助读者更好地运用这一工具。

    jbpm-3.1.2.zip_jbpm_jbpm 3.1.2_jbpm-3.1.2.rar_jbpm3.1.2_工作流

    jbpm-3.1.2.zip 文件包含了 jBpm 的一个重要版本——jBpm 3.1.2,这是一个开源的工作流管理系统,专为构建灵活且可扩展的业务流程解决方案而设计。jBpm 提供了一种方式,使得开发者能够用简单而强大的语言来表达业务...

    JBPM4.chm jbpm4 帮助文档,英文版javaDoc

    JBPM4.chm jbpm4 帮助文档,英文版javaDoc

    jbpm4.jar 下载

    jboss jbpm4最新开发包 采用了pvm框架

    spring-modules-jbpm31.jar

    spring-modules-jbpm31.jar

Global site tag (gtag.js) - Google Analytics