看mossle的 5.16 用户手册中的  快速起步:10分钟教程

想自己跑一下,虽然官方文档已经写的非常详细了,但是实际操作中还是遇到各种坑,这里记录下来。

首先官网下载最新的 5版本 full Guide

方法如下:

百度搜索 activiti,点

往下拉页面,

点 no thanks continue,跳转页面到:

往下拉页面,找到

点 5.x Full Guide连接,点进去

点图中红框部分下载。

==============================

下载解压后,得到这个目录:

目录简介:

1) database:里面存放的是Activiti使用到的数据库信息的sql文件,使用时只需执行你自己的数据库类型的文件即可。如:你的数据库是MySQL,那么就执行activiti.mysql.create.*.sql即可。

2) docs:毫无疑问,api文档是也【但是这个api貌似都是英文的,如果英文不好,还是建议看中文版本: http://www.mossle.com/docs/activiti/index.html】。

3) libs:使用Activiti所需要的所有的jar包和源文件。

4) wars:官方给我们提供的示例Demo,通过使用Demo可以更加快速的了解Activiti【还可以用这个项目直接画xml流程图,避免了在编辑器 如eclipse中安装activiti流程图绘制插件】。
================

将其中的 wars目录中的

放到本地tomcat下,我用的是7版本,

然后直接启动,就可以了通过如下地址访问了:

可以参考

Activity工作流(2)-入门安装运行第一个例子

这里需要说明的就是,这个Demo默认采用的是h2内存数据库,如果想用你自己的数据库,就需要修改web应用WEB-INF/classes目录下的db.properties。然后,按上面说的,把database里的create文件夹里的数据库文件导入你自己的数据库。

改为MySQL数据库具体方法

这里用哪个库都行,但是为了后面的代码演示,我们将上面项目的库改为mysql,

首先在本地电脑上,创建一个mysql数据库,名字随意,我这里叫 activiti1

然后,在刚才下载的目录下找到

在我们自己创建的数据库里执行上面框住的3个脚本,数据库中就有表了。

然后,

修改tomcat下项目中的数据库配置:

再重启tomcat,就会用我们本地的tomcat数据库了。

然后就可以根据以下文章,操作一遍这个官方项目了:

Activiti工作流的应用示例

=================================================================

下面我们用代码方式创建,也就是根据 5.16中文用户手册上的 10分钟例子,简单测试下,

参考:5.16中文用户手册上的 10分钟例子

但是这里我们的项目中不用Spring,不用安装Eclipse的activiti流程图插件(此插件及其难装,而且我觉得还不如直接在上面的官方项目中画流程图,再导出来好用)

因为不想用spring,所以 我们创建一个 maven的jar项目

这个项目中,首先是 pom文件中要引入 activiti的jar包,和mysql的连接jar包:

<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>com.my</groupId>
<artifactId>activitiTest</artifactId>
<version>0.0.1-SNAPSHOT</version> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> <dependencies>
<!-- Activiti -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<!-- <version>5.15.1</version> -->
<version>5.22.0</version>
</dependency> <dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-explorer</artifactId>
<version>5.22.0</version>
</dependency> <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.29</version>
</dependency> </dependencies>
</project>

可以看到,整个pom文件中只需要 activiti的jar包和 mysql的连接包,非常简单。

=====================

第一个出现了:

就是pom中的 activiti 版本

        <dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<!-- <version>5.15.1</version> -->
<version>5.22.0</version>
</dependency>

注意:这个版本一定要和我们数据库中的  act_ge_property 表

中数据版本一致

否则一会运行代码就会报如下异常:

可以参考:

Could not update Activiti database schema: unknown version from database: '5.20.0.1'

==============================================

配置好pom,就要配置代码需要访问的数据库,为了后面测试,我们要让代码的数据库和我们之前下载好的官方guide项目中的数据库使用同一个。

而我们代码因为没有用spring集成,所以不能直接用 db.properties,而是要 一个

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/activiti1?characterEncoding=utf-8" />
<property name="jdbcDriver" value="com.mysql.jdbc.Driver" />
<property name="jdbcUsername" value="root" />
<property name="jdbcPassword" value="123" />
<property name="databaseSchemaUpdate" value="true" />
</bean> </beans>

这里面就是配我们本地的那个数据库。

手册中的创建ProcessEngine部分有这个配置文件的内容:

还可以参考文章:

activiti入门列子一个简单的activiti请假流程)  或

我的第一个activiti实例

=====================================================

然后可以创建一个类,编写java代码:

【注意:这个类中,创建 ProcessEngine 对象,不要用手册中10分钟例子那的那个方法,而是要用 getDefaultProcessEngine() 这个方法,这样才会用我们本地的activiti.cfg.xml数据库配置

package activitiTest;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService; public class T1 { public static void main(String[] args) { // Create Activiti process engine 这个是用spring集成时用的,如果不用spring则用下面的getDefaultProcessEngine
// ProcessEngine processEngine = ProcessEngineConfiguration
// .createStandaloneProcessEngineConfiguration()
// .buildProcessEngine(); ///用这个方法,才会去加载 activiti.cfg.xml 配置文件中配置的数据库
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); // Get Activiti services
RepositoryService repositoryService = processEngine.getRepositoryService();
RuntimeService runtimeService = processEngine.getRuntimeService(); // Deploy the process definition
repositoryService.createDeployment()
.addClasspathResource("FinancialReportProcess1.bpmn20.xml")
.deploy(); // Start a process instance
runtimeService.startProcessInstanceByKey("financialReport");
}
}

然后我们就可以继续根据官网的 10分钟教程,编写 xml 流程文件了,这时要,注意:

官方手册中给出了一个财务月报提交审批的流程的xml,说是为了熟悉流程需要手工编写,直接把那个流程拿过来放到我们项目的resouce目录下用Eclipse用我们刚才的T1代码运行是可以的【也就是说,如果只是需要在Eclipse中运行项目,我们只需要用上面的xml即可,根本不用其他任何activiti额外的流程配置】

但是,如果你想额外测试,将这个复制过来的“手写xml”导入到我们官网下的guide项目中是不行的,因为其缺少了 bpmn图像信息,会报错如下:

当然,用户手册 10分钟例子处,在这个 “手写流程xml”下面 还有一个连接,说是可以下载带bpmn图像信息的 xml,是可以下载的,而且其中也确实包含bpmn元素,但是,你下载下来,往tomcat项目中导入,还是会报错:

不止如此,如果你直接把它放在Eclipse中resource目录下,运行我们的T1代码,发现会直接报错:

其实原因是,用户手册中提供的 xml 虽然包含了图像元素信息,但是却缺少了bpmn图像元素标签相关的头约束定义,所以Eclipse解析xml时会报错,官网guide项目无法导入也是同样原因。解决办法就是加入相关头约束,但是这个头约束在哪里找呢?

不用在网上找,只需要在官网guide项目中随便画一个流程图(或者用已存在的流程图)导出到本地,然后用编辑器打开,就会发现,人家官网项目导出的xml中包含的头是全的,我们只需要把其复制到我们手写的 xml中即可

下面是我添加好头部约束定义,即各种注释的 手写 财务月报流程xml:

FinancialReportProcess1.bpmn20.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- 定义开始 -->
<!-- 下面3行是头文件,如果包含 bpmndi:BPMNDiagram 标签则不能只用这3行,要用下面那个多的 -->
<!-- <definitions id="definitions" xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:activiti="http://activiti.org/bpmn" targetNamespace="Examples"> --> <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI"
typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath"
targetNamespace="http://www.activiti.org/processdef"> <process id="financialReport" name="Monthly financial report reminder process">
<!-- 开始事件 -->
<startEvent id="theStart"></startEvent>
<!-- 从开始到第一个用户任务之间的箭头连线(会包含定义箭头起始点对应的节点 id) -->
<sequenceFlow id="flow1" targetRef="writeReportTask"
sourceRef="theStart"></sequenceFlow>
<!-- 第一个用户任务(写月财报) -->
<userTask id="writeReportTask" name="Write monthly financial report">
<!-- 描述信息,可有可无 (各个标签上的name属性也是同理) -->
<documentation>
write monthly finacial reoport for publication to
sharehollders.
</documentation>
<!-- 潜在拥有者 -->
<potentialOwner>
<!-- 资源分配表达式 -->
<resourceAssignmentExpression>
<!-- 真正的表达式 -->
<formalExpression>
<!-- 没有显示指明是用户还是组,默认为组,这里是之会计组的成员 -->
accountancy
</formalExpression>
</resourceAssignmentExpression>
</potentialOwner>
</userTask> <!-- 从第一个用户任务到第二个用户任务之间的箭头连线(会包含定义箭头起始点对应的节点 id) -->
<sequenceFlow id="flow2" targetRef="verifyReportTask"
sourceRef="writeReportTask"></sequenceFlow> <!-- 第二个用户任务(领导审批任务) -->
<userTask id="verifyReportTask" name="Verigy monthly financial report">
<documentation>
Verify monthly financial report composed by the
accountancy department.
This financial report is going to be sent to
all the company
shareholders.
</documentation>
<potentialOwner>
<resourceAssignmentExpression>
<!-- 这个任务的潜在用户是管理组成员 -->
<formalExpression>management</formalExpression>
</resourceAssignmentExpression>
</potentialOwner>
</userTask> <!-- 第二个用户任务到结束节点的箭头连线 -->
<sequenceFlow id="flow3" targetRef="theEnd" sourceRef="verifyReportTask"></sequenceFlow> <!-- 结束事件节点 -->
<endEvent id="theEnd"></endEvent> </process> <!-- 下面是用编辑器画流程图时生成的图像信息,在Eclipse中用代码方式可以把下面的都注释 -->
<bpmndi:BPMNDiagram>
<bpmndi:BPMNPlane bpmnElement="financialReport">
<bpmndi:BPMNShape bpmnElement="theStart">
<omgdc:Bounds height="30.0" width="30.0" x="75.0" y="225.0" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="writeReportTask">
<omgdc:Bounds height="80.0" width="100.0" x="165.0" y="200.0" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="verifyReportTask">
<omgdc:Bounds height="80.0" width="100.0" x="330.0" y="200.0" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="theEnd">
<omgdc:Bounds height="28.0" width="28.0" x="480.0" y="226.0" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="flow1">
<omgdi:waypoint x="105.0" y="240.0" />
<omgdi:waypoint x="165.0" y="240.0" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow2">
<omgdi:waypoint x="265.0" y="240.0" />
<omgdi:waypoint x="330.0" y="240.0" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow3">
<omgdi:waypoint x="430.0" y="240.0" />
<omgdi:waypoint x="480.0" y="240.0" />
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram> </definitions>

(上面这个xml不仅在Eclipse执行没有问题,甚至还可以直接导入到官方项目中

这时,我们的项目就搭建完成了,就可以按照用户手册 10分钟教程中的流程继续学习了,比如 用T1代码创建并部署、启动流程后,在官方项目中通过浏览器查看启动好的财务月报流程,并进行任务领取,执行等各种操作【因为他们共有同一个数据库,而activiti最大的特点就是几乎所有与activiti相关的内容都是保存在数据库中持久化的】。

=============

我们使用官方guide时还要注意,每次一个用户进行流程相关操作后,如果想让另一个流程相关用户登录的信息发生变化,通常需要另一个用户先注销(退出)再重新登录,信息才会同步显示,同理如果我们用eclipse代码进行流程操作后,在guide项目中也需要用户注销再重新登录才会数据同步更新显示

================

其他知识:

摘自: activiti入门列子一个简单的activiti请假流程

通过ProcessEngines.getDefaultProcessEngine获取流程引擎

//通过activiti.cfg.xml获取流程引擎
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

通过源码可以看到  getDefaultProcessEngine方法会通过默认的activiti.cfg.xml文件名或者是activiti-context.xml文件名读取xml文件

当获取到的processEngine对象不为空时   就会在数据库创建关于activiti的23张表

具体作用如下:

更详细的情况可以去下面这个地址了解:

http://www.cnblogs.com/llzgzljl/archive/2013/10/07/3356108.html

此时你可以在数据库中看到act_ge_property表中插入了3条数据

最新文章

  1. ember.js路由无效的解决思路
  2. etc这个目录
  3. Rails中的content_tag与concat用法,可以连接任意html元素
  4. Qt ffmpeg环境搭建
  5. .Net中的并行编程-5.流水线模型实战
  6. [转]java 输出流转输入流
  7. 不可小觑的“alt”
  8. win向linux传文件
  9. 设置ORACLE环境变量
  10. WPF按钮清空自带样式,以及透明按钮时,Grid的Background属性设置引起&quot;点击&quot;问题.
  11. OpenCV配置使用版
  12. linux查看某个进程CPU消耗较高的具体线程或程序的方法
  13. 在 Windows 7 Professional、Enterprise 或 Ultimate 上安装 IIS 7.5
  14. BST&amp;AVL&amp;红黑树简单介绍
  15. java语言在某个数组中查找某个字符出现的次数
  16. linux下压缩解压缩命令
  17. centos7.4卸载再安装mariadb服务无法启动问题
  18. chmod语法
  19. 一十九条优雅Python编程技巧
  20. Linux - PS1

热门文章

  1. Centos 定时任务发送smtp邮件
  2. [Oracle]System 表空间的文件丢失
  3. HNOI2019 摸鱼记
  4. Invitation Cards POJ-1511 (spfa)
  5. [BZOJ2138]stone[霍尔定理+线段树]
  6. java十年,需要学会的Java开发体系
  7. 《HTTP权威指南》读书笔记:缓存
  8. 阿里云配置ssl证书
  9. RabbitMq基础教程之基本概念
  10. ASP.NET Core采用Web Deploy方式发布到 Windows Server 2012 IIS上