1.Activiti定义:业务流程管理(BPM)框架
2.提供了eclipse插件,开发人员可以通过插件直接绘画出业务流程图
3.activiti框架搭建步骤

(1)安装activiti插件,本人用的是myeclipse2014,安装完成后需要重启myeclipse2014
(2)创建一个流程图
(3)创建一个acitiviti.cfg.xml文件,主要是用于存放后面acitivi部署流程中,创建的相关联的一些表
     <1>一般与spring集成
     <2>数据库配置信息同样与spring集成
<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="jdbcDriver" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activititest?useUnicode=true&characterEncoding=utf8"></property>
<property name="jdbcUsername" value="xxxxxx"></property>
<property name="jdbcPassword" value="xxxxxxxx"></property>
<!--创建表的策略-->
<property name="databaseSchemaUpdate" value="true"></property>
</bean>
</beans>
(4)导入Activiti的包--------当然也可以直接通过Maven进行依赖包的管理
(5)创建一个数据库生成的测试。(注意:要保证本地有对应名字的数据库)
    <1>运行测试方法成功之后,再进入数据库,我们会看到产生了如下多张数据表(23张)
public class ActivitiTable {
/**
* 创建Activiti流的相关的数据库表
*/
@Test
public void creatTable(){
ProcessEngine processEngine = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml")
.buildProcessEngine();
}
}

4.进行流程部署的重点开发(按照下面的流程进行)------------重点的重点

/**
* @desc 用于进行演示Activiti的首例程序,即描述如何在代码中实现学生进行请假申请,班主任审核,教处审核
**/
public class ActivitiTest {
/**
* 1、部署流程
* 2、启动流程实例
* 3、请假人发出请假申请
* 4、班主任查看任务
* 5、班主任审批
* 6、最终的教务处Boss审批
*/
/**
* 1:部署一个Activiti流程
* 运行成功后,查看之前的数据库表,就会发现多了很多内容
*/
@Test
public void creatActivitiTask(){
//加载的那两个内容就是之前已经弄好的基础内容(生成的流程图)。
//得到了流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
processEngine.getRepositoryService()
.createDeployment()
.addClasspathResource("shenqing.bpmn")
.addClasspathResource("shenqing.png")
.deploy();
}
/**
* 2:启动流程实例
*/
@Test
public void testStartProcessInstance(){
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
processEngine.getRuntimeService()
.startProcessInstanceById("shenqing:1:4"); //这个是查看数据库中act_re_procdef表
}
/**
* 完成请假申请
*/
@Test
public void testQingjia(){
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
processEngine.getTaskService()
.complete("104"); //查看act_ru_task表
}
/**
* 小明学习的班主任小毛查询当前正在执行任务
*/
@Test
public void testQueryTask(){
//下面代码中的小毛,就是我们之前设计那个流程图中添加的班主任内容
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
List<Task> tasks = processEngine.getTaskService()
.createTaskQuery()
.taskAssignee("小毛")
.list();
for (Task task : tasks) {
System.out.println(task.getName());
}
}
/**
* 班主任小毛完成任务
*/
@Test
public void testFinishTask_manager(){
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
engine.getTaskService()
.complete("202"); //查看act_ru_task数据表
}
/**
* 教务处大毛完成的任务
*/
@Test
public void testFinishTask_Boss(){
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
processEngine.getTaskService()
.complete("302"); //查看act_ru_task数据表
}
}

5.对于流程处理
(1)就是要进行流程的部署操作
(2)上面的代码中,主要是采取读取bpmn和png的资源文件的方法
(3)这里还有其他方法

方法一:和上面的方式一样(读取bpmn和png的资源文件)
/**
* 通过bpmn和png资源进行部署
*/
@Test
public void testDeployFromClasspath(){
//得到流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
processEngine.getRepositoryService()
.createDeployment()
.addClasspathResource("shenqing.bpmn")
.addClasspathResource("shenqing.png")
.deploy();
}
方法二:通过 inputstream完成部署
@Test
public void testDeployFromInputStream(){
InputStream bpmnStream = this.getClass().getClassLoader().getResourceAsStream("shenqing.bpmn");
//得到流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
processEngine.getRepositoryService()
.createDeployment()
.addInputStream("shenqing.bpmn", bpmnStream)
.deploy();
}
方法三:通过zipinputstream完成部署
/**
* 注意:这个的话,需要将bpmn和png文件进行压缩成zip文件,然后放在项目src目录下即可(当然其他目录也可以)
*/
@Test
public void testDeployFromZipinputStream(){
InputStream in = this.getClass().getClassLoader().getResourceAsStream("shenqing.zip");
ZipInputStream zipInputStream = new ZipInputStream(in);
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
processEngine.getRepositoryService()
.createDeployment()
.addZipInputStream(zipInputStream)
.deploy();
}

5.关于activiti更多操作,可以查看官网API,或者浏览
6.Spring整合activiti配置: