Activiti7体系架构

摘要:
一.Activiti7体系架构通过加载activiti.cfg.xml文件得到ProcessEngineConfiguration对象,通过ProcessEngineConfiguration对象可以得到ProcessEngine对象得到该对象后,可以通过流程引擎对象ProcessEngine来得到各种Service,每一种Service接口有每个用途RepositoryServiceactivi

一.Activiti7体系架构
通过加载activiti.cfg.xml文件得到ProcessEngineConfiguration对象,通过ProcessEngineConfiguration对象可以得到ProcessEngine对象
得到该对象后,可以通过流程引擎对象ProcessEngine来得到各种Service,每一种Service接口有每个用途
RepositoryService activiti 的资源管理类
RuntimeService activiti 的流程运行管理类
TaskService activiti 的任务管理类
HistoryService activiti 的历史管理类
ManagerService activiti 的引擎管理类
二.Activiti使用步骤:
1.流程定义
使用Activiti Designer工具创建流程图
新建一个BPMNFile流程图,可更改该流程图的ID和每个任务环节的执行人,流程图就是一个xml文件,每一个流程需要生成一张流程图保存,首先将.bpmn文件改为.xml文件
然后右键该xml文件Diagrams--->show BPMN 2.0 Designer就能生成一张流程图,将流程图导出保存到项目对应目录即可,然后将xml改回bpmn即可
2.流程部署
需要将流程部署到Activiti当中,代表当前有该流程
/**
* 流程部署
* `act_ge_bytearray` 流程定义的资源信息,包含bpmn和png流程文件信息
* `act_re_deployment` 流程部署信息,包含流程名称,ID,Key等
* `act_re_procdef` 流程定义信息
*/
@Test
public void deployment(){
//获取ProcessEngine对象 默认配置文件名称:activiti.cfg.xml 并且configuration的Bean实例ID为processEngineConfiguration
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//获取RepositoryService对象进行流程部署
RepositoryService repositoryService = processEngine.getRepositoryService();
//进行部署,将对应的流程定义文件生成到数据库当中,作为记录进行保存
Deployment deployment = repositoryService.createDeployment()
.addClasspathResource("bpmnfile/holiday.bpmn") //加载流程文件
.addClasspathResource("bpmnfile/holiday.png")
.name("请假流程") //设置流程名称
.key("holidayKey")
.deploy(); //部署

//输出部署信息
System.out.println("流程名称:"+deployment.getName());
System.out.println("流程ID:"+deployment.getId());
System.out.println("流程Key:"+deployment.getKey());
}
3.创建流程实例
流程定义相当于类
流程实例相当于类的实例(对象)
/**
* 启动流程实例
* `act_hi_actinst` 已开始和执行完毕的活动信息
* `act_hi_identitylink` 历史参与者信息
* `act_hi_procinst` 流程实例信息
* `act_hi_taskinst` 历史任务实例
* act_ru_execution 任务执行信息
* act_ru_identitylink 当前任务参与者
* `act_ru_task` 任务信息
*
*/
@Test
public void startInstance(){
//获取ProcessEngine对象 默认配置文件名称:activiti.cfg.xml 并且configuration的Bean实例ID为processEngineConfiguration
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//获取到RuntimeService对象
RuntimeService runtimeService = processEngine.getRuntimeService();
//创建流程实例
ProcessInstance holiday = runtimeService.startProcessInstanceByKey("holiday");
//输出实例信息
System.out.println("流程部署ID:"+holiday.getDeploymentId());
System.out.println("流程实例ID:"+holiday.getId());
System.out.println("活动ID:"+holiday.getActivityId());
}
4.用户查询代办任务
/**
* 查看代办任务
*/
@Test
public void getTask(){
//获取ProcessEngine对象 默认配置文件名称:activiti.cfg.xml 并且configuration的Bean实例ID为processEngineConfiguration
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//获取一个TaskService对象
TaskService taskService = processEngine.getTaskService();
//查询代办业务 createTaskQuery查询任务 taskCandidateOrAssigned查询任务执行者 processDefinitionKey:查询流程
/**
* taskCandidateOrAssigned匹配规则:1.Assigned 2.配置bpmn文件中定义的值
* taskAssignee匹配规则:1.Assigned
*/
/*List<Task> list = taskService.createTaskQuery().taskCandidateOrAssigned("lisi").processDefinitionKey("holiday").list();*/
List<Task> list = taskService.createTaskQuery().taskAssignee("zhangsan").processDefinitionKey("holiday").list();
//分页:List<Task> list = taskService.createTaskQuery().taskAssignee("zhangsan").processDefinitionKey("holiday").listPage(i,j);
for (Task task:list) {
System.out.println("任务名称:"+task.getName());
System.out.println("任务执行人:"+task.getAssignee());
System.out.println("任务ID:"+task.getId());
System.out.println("流程实例ID:"+task.getProcessInstanceId());
}
}
5.用户进行任务处理
/**
* 任务处理:当所有任务处理完毕,对应当前流程实例信息删除,但是可以在历史中查看到该信息
*/
@Test
public void completeTask(){
//获取ProcessEngine对象 默认配置文件名称:activiti.cfg.xml 并且configuration的Bean实例ID为processEngineConfiguration
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//获取一个TaskService对象
TaskService taskService = processEngine.getTaskService();
//任务处理
taskService.complete("10002");
}
6.流程结束
7.当业务流程结束后通过历史可以查看到已经走完的流程
/**
* 查看历史任务
*/
@Test
public void getHistory() {
//获取ProcessEngine对象 默认配置文件名称:activiti.cfg.xml 并且configuration的Bean实例ID为processEngineConfiguration
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//获取HistoryService接口
HistoryService historyService = processEngine.getHistoryService();
//获取历史任务
HistoricActivityInstanceQuery historicActivityInstanceQuery = historyService.createHistoricActivityInstanceQuery();
//获取指定流程实例的任务
historicActivityInstanceQuery.processInstanceId("2501");
//获取任务列表
List<HistoricActivityInstance> list = historicActivityInstanceQuery.list();
for (HistoricActivityInstance ai : list) {
System.out.println("任务节点ID:"+ai.getActivityId());
System.out.println("任务节点名称:"+ai.getActivityName());
System.out.println("流程实例ID信息:"+ai.getProcessDefinitionId());
System.out.println("流程实例ID信息:"+ai.getProcessInstanceId());
System.out.println("==============================");
}
}

1 编写activiti.cfg.xml配置文件

 <!--数据源-->
    <bean   class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/activiti-y2170"/>
        <property name="username" value="root"/>
        <property name="password" value="123"/>
    </bean>

    <!--配置Activiti使用的processEngine对象   默认命名为processEngineConfiguration-->
    <bean   class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
        <!--注入数据源-->
        <property name="dataSource" ref="dataSource"/>
        <!--配置数据源方式二:-->
        <!--<property name="jdbcDriver" value="com.mysql.jdbc.Driver"/>-->

        <!--指定数据库生成策略-->
        <property name="databaseSchemaUpdate" value="true"/>
    </bean>

2编写日志配置文件

# Set root category priority to INFO and its only appender to CONSOLE.
#log4j.rootCategory=INFO, CONSOLE            debug   info   warn error fatal
log4j.rootCategory=debug, CONSOLE, LOGFILE

# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE

# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m


# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=d:axis.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m

3 编写测试代码进行部署

 @Test
    public void deployment(){
        //获取ProcessEngine对象   默认配置文件名称:activiti.cfg.xml  并且configuration的Bean实例ID为processEngineConfiguration
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //获取RepositoryService对象进行流程部署
        RepositoryService repositoryService = processEngine.getRepositoryService();
        //进行部署,将对应的流程定义文件生成到数据库当中,作为记录进行保存
        Deployment deployment = repositoryService.createDeployment()
                .addClasspathResource("bpmnfile/holiday.bpmn")     //加载流程文件
                .addClasspathResource("bpmnfile/holiday.png")
                .name("请假流程")       //设置流程名称
                .key("holidayKey")
                .deploy();              //部署

        //输出部署信息
        System.out.println("流程名称:"+deployment.getName());
        System.out.println("流程ID:"+deployment.getId());
        System.out.println("流程Key:"+deployment.getKey());
    }

编写测试代码

@Test
    public void startInstance(){
        //获取ProcessEngine对象   默认配置文件名称:activiti.cfg.xml  并且configuration的Bean实例ID为processEngineConfiguration
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //获取到RunimeService对象
        RuntimeService runtimeService=processEngine.getRuntimeService() ;
        //创建流程实例
        ProcessInstance holiday=runtimeService.startProcessInstanceByKey("holiday");
        //输出实例信息
        System.out.println("流程部署ID:"+holiday.getDeploymentId());
        System.out.println("流程实例ID:"+holiday.getId());
        System.out.println("活动 ID:"+holiday.getActivityId());
    }

4. 用户查询代办任务

代码测试

 //查看代办任务
    @Test
    public void getTask(){
        //获取ProcessEngine对象   默认配置文件名称:activiti.cfg.xml  并且configuration的Bean实例ID为processEngineConfiguration
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //获取一个TaskService对象
        TaskService taskService=processEngine.getTaskService();
        //查询代办业务 createTaskQuery查询任务   taskCandidateOrAssigned查询任务执行者   processDefinitionKey:查询流程
        /**
         * taskCandidateOrAssigned匹配规则:1.Assigned   2.配置bpmn文件中定义的值
         * taskAssignee匹配规则:1.Assigned
         */
        List<Task> list=taskService.createTaskQuery().taskCandidateOrAssigned("lisi").processDefinitionKey("holiday").list();
        for (Task task:list){
            System.out.println("任务名称:"+task.getName());
            System.out.println("任务执行人:"+task.getAssignee());
            System.out.println("任务ID:"+task.getId());
            System.out.println("流程实例ID:"+task.getProcessInstanceId());

        }
    }

5. 用户进行任务处理

 @Test
    public void completeTask(){
        //获取ProcessEngine对象   默认配置文件名称:activiti.cfg.xml  并且configuration的Bean实例ID为processEngineConfiguration
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //获取一个TaskService对象
        TaskService taskService=processEngine.getTaskService();
        //任务处理
        taskService.complete("2505");
    }

6.当业务流程结束后通过历史可以查看到已经走完的流程

编写测试代码

 //当业务流程结束后通过历史可以查看到已经走完的流程
    @Test
    public void getHistory(){
        //获取ProcessEngine对象   默认配置文件名称:activiti.cfg.xml  并且configuration的Bean实例ID为processEngineConfiguration
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //获取HistoryService接口
        HistoryService historyService = processEngine.getHistoryService();
        //获取历史任务
        HistoricActivityInstanceQuery historicActivityInstanceQuery = historyService.createHistoricActivityInstanceQuery();
        //获取指定流程实例的任务
        historicActivityInstanceQuery.processInstanceId("2501");
        //获取任务列表
        List<HistoricActivityInstance> list = historicActivityInstanceQuery.list();
        for (HistoricActivityInstance ai : list) {
            System.out.println("任务节点ID:"+ai.getActivityId());
            System.out.println("任务节点名称:"+ai.getActivityName());
            System.out.println("流程实例ID信息:"+ai.getProcessDefinitionId());
            System.out.println("流程实例ID信息:"+ai.getProcessInstanceId());
            System.out.println("==============================");
        }
    }

免责声明:文章转载自《Activiti7体系架构》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇office办公 | onenote2016使用教程(1)-onenote下载,安装Vue AES+MD5加密 后台解密下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

从一层到多层架构的学习笔记

为什么要分层 支持技术复杂性与业务复杂性分离 分层需要明确每层的职责,单一职责,做到关注点分离 需要通过分层来隔离不同的关注点,以此应对不同需求的变化 在项目中约定每层的规范,有利于代码的规范,更好的阅读性 在代码实现中,可以减少耦合,避免一些重复,避免一些臃肿 学习三层的过程 一层架构,二层架构 1.最开始写代码,直接在Controller上写业务逻...

C4 模型

   前言   世界上最难的两件事是:   1. 把我的思想放进你的脑袋   2. 把你的钱放进我的口袋     第二点我们不探讨,因为这是众所周知的,不信?过来试试:)     对于第一点,对我们程序员来说,其实也是我个人一直强调的,很多事情的成败,其实就在于掌舵人的思想层面是否认知是一致的,当我们对于一个事物的认知不在同一层面,就好比我们的划桨是不统一...

C/S框架WebService架构用户凭证(令牌)解决方案

C/S框架-WebService架构用户凭证(令牌)解决方案 http://www.csframework.com/archive/5/arc-5-20110520-1504.htm C/S框架高级版引用WebService技术,WebService架构的应用系统不可忽视其安全性,WebServcie页面(*.asmx)提供了一组接口(WebMethod,...

iOS 处理第三方SDK冲突问题

在一个项目中要集成新颜第三方,需要用到明镜与设备指纹,可能是版本有些老,两个SDK集成进去后发现冲突了,如下图所示,两个里面有很多重复的SDK,于是就考虑修改第三方静态库,把其中的重复文件为删除掉。 方法如下: 1.打开终端cd到所要修改的.a库所在文件目录(最好备份出来到专门的目录) 2.查看静态库文件包含的架构 查看.a库文件所包含的架构库命令:li...

数据中心网络架构演进 — CLOS 网络模型的第三次应用

目录 文章目录 目录 前文列表 CLOS Networking 胖树(Fat-Tree)型网络架构 Fat-Tree 拓扑 Fat-Tree 的缺陷 叶脊(Spine-Leaf)网络架构 Spine-Leaf 拓扑 Spine-Leaf 与光模块 Spine-Leaf 的优势 Spine-Leaf 的缺陷 前文列表 《数据中心网络架构演进...

架构之美阅读笔记之二

今天学习的是架构之美的第二章_两个系统的故事:现代软件神话。这一章主要讲的是两个软件系统的开发实例,最终向我们阐述了软件架构的好坏对于软件系统开发的影响。 首先第一部分讲的是“混乱大都市”。“混乱大都市”式的软件开发在实发性项目的开发中是可怕的,就是大都市的地铁线路一样,无法让人确定,哪一条线路好。“混乱大都市”式的软件开发通常缺少规划,开发到最后,产生了...