Activiti工作流概念及入门案例HelloWorld

   第一章 认识Activiti

1.1什么是Activiti

1.Activiti是什么?

  答:Activiti是一个针对企业用户,开发人员,系统管理员的轻量级工作流业务管理平台。

2.Activiti的核心是什么?

  答:使用JAVA开发 的快速,稳定的BPMN2.0流程 引擎。

Activiti可以允运行在任何类型的JAVA程序中,例如服务器,集群,云服务。

Activiti可以完美滴与Spring集成。同时,基于思想的设计使Activiti非常轻量级。

1.2工作流基础

1.2.1什么是BPM(业务流程管理)IT工具。

      企业流程管理:生产流程层,运作层,计划层,战略,四个层次。

BPM最早是由工作流+企业应用集成逐步融合发展起来的。

现在的BPM是一种企业集成技术,作为对面向 服务系统架构SOA,企业应用集成EAI,企业服务总线ESB的补充。

 

  BPM:管理规范,软件工程

 

 

1.2.2工作流的声明周期

 

生命周期分为 5步,并且迭代循环。

1.定义:总是由流程定义开始。此阶段的任务是收集业务服务需求并转化为流程定义。

业务------>开发

2. 发布:发布流程定义。再具体的流程引擎汇总包括定义文件,自定义表单,任务监听类。

3.执行:流程引擎(Activiti)按流程处理线路以任务驱动方式执行。

4.监控:此阶段是依赖阶段。收集每个任务的结构并作出处理。

5.优化:此阶段,一个完整的流程已经结束。需要做的是优化与设计,再次流程上改进,并开始下一个新的周期。

1.2.3什么是BPMN(业务流程建模标注)

定义了业务流程图。

 

    

1.3Activiti的特点

1.数据持久化:使用MyBatis(最优SQL执行Command),保持最高性能。

2.引擎Server接口:7大接口,通过ProcessEngine获取,并且支持API编程风格。七大接口的作用。

 

3.流程设计器

有专业的流程设计器:BPMN2.0-------Eclipse Designer,还有基于WebActiviti Modeler流程设计器。

4.原生支持Spring:轻松的与Spring集成。非常方便管理事务和解析表达式。

5.分离运行时与历史数据

 

1.4Activiti的应用

1.在系统继承方面应用

 1ESB(企业服务总线)整合,例如Mule.

 2.与规则引擎整合

 3.嵌入已有平台

2.在其他产品中应用

1.5Activiti架构与组件

 

  


知识点就先这些 ,我们来看一下我们的示例:HelloWorld

首先我们用的软件是Eclipse,事先的准备工作挺多的,你需要安装


这个插件,安装好了之后我们就开始吧,

首先建一个Maven的项目,然后在pom.xml中导入我们需要的节点

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>cn.happy</groupId>
  <artifactId>ActivitiTest</artifactId>
  <version>0.0.1-SNAPSHOT</version>
 	<packaging>jar</packaging>
	<name>BPMN 2.0 with Activiti - Examples</name>
	<properties>
		<activiti-version>5.14</activiti-version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.activiti</groupId>
			<artifactId>activiti-engine</artifactId>
			<version>${activiti-version}</version>
		</dependency>
		<dependency>
			<groupId>org.activiti</groupId>
			<artifactId>activiti-spring</artifactId>
			<version>${activiti-version}</version>
		</dependency>
		<dependency>
			<groupId>org.codehaus.groovy</groupId>
			<artifactId>groovy-all</artifactId>
			<version>2.0.4</version>
		</dependency>
		<dependency>
			<groupId>com.h2database</groupId>
			<artifactId>h2</artifactId>
			<version>1.3.168</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>1.7.2</version>
		</dependency>
		<dependency>
			<groupId>commons-io</groupId>
			<artifactId>commons-io</artifactId>
			<version>2.4</version>
		</dependency>

		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.15</version>
			<exclusions>
				<exclusion>
					<groupId>com.sun.jdmk</groupId>
					<artifactId>jmxtools</artifactId>
				</exclusion>
				<exclusion>
					<groupId>com.sun.jmx</groupId>
					<artifactId>jmxri</artifactId>
				</exclusion>
				<exclusion>
					<artifactId>jms</artifactId>
					<groupId>javax.jms</groupId>
				</exclusion>
				<exclusion>
					<artifactId>mail</artifactId>
					<groupId>javax.mail</groupId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-jdk14</artifactId>
			<version>1.7.2</version>
		</dependency>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.11</version>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.43</version>
		</dependency>
	</dependencies>
</project>

现在我们看一下架构




首先我们建项目的时候我们可能会少文件夹,这个我们自己加就好。

我们的配置文件必须写在resource下面。

现在我们先看一下配置文件,activiti.cfg.xml

这个主要是连接数据库的。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
   <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activiti"/>
   <property name="jdbcDriver" value="com.mysql.jdbc.Driver"/>

   <property name="jdbcUsername" value="root"/>
   <property name="jdbcPassword" value=""/>
   <property name="databaseSchemaUpdate" value="true"/>
</bean>
</beans>

然后我们需要画一个流程图



然后我们会生成一个图片  .png结尾的  ,并且我们要把这个图生成

bpmn结尾的代码。图片右击-->Open With----->XML Editor就可以了,

然后我们开始写具体的代码,看我的注释。


package Demo;

import java.util.List;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;

public class HelloWorld {
	
     public static void main(String[] args) {
/*    	 ProcessEngineConfiguration processEngine=ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
 		processEngine.setJdbcDriver("com.mysql.jdbc.Driver");
 		processEngine.setJdbcUrl("jdbc:mysql://localhost:3306/activiti");
 		processEngine.setJdbcUsername("root");
 		processEngine.setJdbcPassword("");
 		
 		
 		processEngine.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
 		
 		ProcessEngine buildPRocessEngine=processEngine.buildProcessEngine();*/  	 
    	 
    	 
        ProcessEngine processEngines=ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml")
        		.buildProcessEngine();
        System.out.println("================"+processEngines);
             
        
    	/** 部署流程定义*/	
    	ProcessEngine  processEngine=ProcessEngines.getDefaultProcessEngine();
    	/*  Deployment deployment= processEngine.getRepositoryService()//与流程定义与部署对象相关的service
                                 .createDeployment()
                                 .name("HelloWorld入门程序")//创建一个部署对象
                                 .addClasspathResource("ActivitiHelloWorld.bpmn")//从classpath资源中加载,一次只能加载一个文件
                                 .addClasspathResource("ActivitiHelloWorld.png")
                                 .deploy();//完成部署
             System.out.println("部署ID:"+deployment.getId());
             System.out.println("部署名字:"+deployment.getName());*/
        
        
             
         	/**启动流程实例*/
             /*  String processDefinitionKey="ActivitiHelloWorld";
       ProcessInstance pi=processEngines.getRuntimeService()//与正在 执行流程实例和执行对象相关的service
       	                        .startProcessInstanceByKey(processDefinitionKey);//使用流程定义的key启动流程实例
       	System.out.println("流程实例ID:"+pi.getId());
       	System.out.println("流程定义ID:"+pi.getProcessDefinitionId());*/
        
        
        /**查询当前人的个人任务*/
    	
   	/*String assigine="张三";
        	List<Task> list=processEngine.getTaskService()
        	.createTaskQuery()
        	.taskAssignee(assigine)
        	.list();
        	
        	if(list!=null&&list.size()>0){	
        		for(Task task:list){
        		System.out.println("任务ID:"+task.getId());	
        		System.out.println("任务名称:"+task.getName());
        		System.out.println("任务的创建时间:"+task.getCreateTime());
        		System.out.println("任务的创建人:"+task.getAssignee());
        		System.out.println("流程实例ID"+task.getParentTaskId());
        		System.out.println("执行对象ID"+task.getExecutionId());
        		System.out.println("流程定义ID"+task.getProcessDefinitionId());
        		
        		}
        	}
        */
       
        
        	/**完成我的任务*/
String taskId="302";
        	processEngine.getTaskService()
        	.complete(taskId);
        	System.out.println("完成任务:任务ID:"+taskId);
        	
	}	

}

记着这个是一步一步执行的 ,不可以一起执行,先部署流程定义,在启动流成,查询任务,完成任务。然后你就可以查看你的数据库了,会有数据显示你执行的每一步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值