activiti学习

来源:互联网 发布:网络黑界知名林子颜 编辑:程序博客网 时间:2024/05/14 01:54

Activiti学习笔记

Activiti是一个开源的工作流引擎,主页在http://www.activiti.org/,要下载的话直接点上面的download就可以啦。下载下来的东西里面有document,tutorial,还有需要的所有的jar包,还有一些demo。目前最新的版本是activit-5.9

这个项目的project leader是鼎鼎大名的Tom Baeyens,据说他以前是做jbpm的,做到jbpm4的时候,他离开了JBoss,到了Alfresco公司,组建起了这个Activiti研发团队,某种程度上,可以说这个Activiti才是真正jbpm5,而现在所谓的jbpm5几乎放弃了jbpm4的所有代码,从新开始,是以前的drool flow。

下载到的zip文件解压之后,第一件事当然是去看里面的document了,有个readme.html就是了。

看看看,他会告诉你怎么去运行它的demo,就是到setup目录下运行ant demo.start。我当时运行的时候,还出了点问题。运行demo.start会做几件事情:

1.      会自动建立H2数据库,建表,倒入数据

2.      自动联网去下载一个适合版本的tomcat,具体的配置信息在setup目录下的build.properties和build.db.properties中查看

3.      自动发布工程activiti-explorer和activiti-rest到那个tomcat上

4.      给你打开浏览器,访问这个工程activiti-explorer

太傻瓜,太自动化了。

如果自己已经有了好的tomcat,而且不想然它去下载,那也简单,只要按

build.properties中的配置,添加你的tomcat到上面命令生成downloads目录,而且修改恰当的tomcat版本号,就可以了。

如果不出意外,你一步到位的跑完,你已经看到activiti-explorer的登录界面了,这个demo默认的登录用户文档中说了,比如管理员kermit/kermit,登录上去玩吧。登录上去以后可以看到task,process和database,database是管理员才可以看到的。database可以看到数据库里面的数据。这些数据保存在H2中的,有兴趣的自己去研究一下这个H2数据库,只要一个jar包,嵌入式的,牛逼着呢,呵呵。

点到process上,可以看到一些已经发布了的流程demo,右上角有个startprocess的按钮,可以启动一个流程的。流程启动了就需要人去完成的,如果流程启动以后,当前登录用户碰巧可以做这个task,那么当前用户就会受到一个Inbox的task,点开Task,Inbox有了。如果流程定义的时候task是给一个group的话,那么就说明这个group的人都可以完成这个任务,如果当前用户想做的话,就claim它。

废话有点多了。还是好好看document,tutorial吧!

实际项目运用中,我们不会把数据存在H2上面的,一般Oracle,mysql。现在我们拿mysql说事。也很简单,首先在你的mysql中建立一个数据库,比如名为activiti吧,不需要建立表的,只要空数据库。

在eclipse上建立一个Java Project,导入{activiti}\setup\files\dependencies\libs.engine.runtime.txt中列出的jar包,另外加一个mysql的驱动包,由于下面activiti.cfg.xml的配置,这里需要用到commons-dbcp和commons-pool包,也要加进来,就可以啦。

然后在工程的源文件目录下新建一个activiti.cfg.xml,内容: 

[html] view plaincopyprint?
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.   
  3. <beans xmlns="http://www.springframework.org/schema/beans"   
  4.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  5.        xsi:schemaLocation="http://www.springframework.org/schema/beans   http://www.springframework.org/schema/beans/spring-beans.xsd">  
  6.          
  7.     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" >  
  8.       <property name="driverClassName" value="com.mysql.jdbc.Driver" />  
  9.       <property name="url" value="jdbc:mysql://localhost:3306/activiti" />  
  10.       <property name="username" value="root" />  
  11.       <property name="password" value="leonsu" />  
  12.       <property name="defaultAutoCommit" value="false" />  
  13.     </bean>  
  14.       
  15.     <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">  
  16.         <property name="databaseSchemaUpdate" value="true"/>  
  17.   
  18.         <!--  
  19.         <property name="jdbcUrl" value="jdbc:h2:tcp://localhost/activiti" />  
  20.         <property name="jdbcDriver" value="org.h2.Driver" />  
  21.         <property name="jdbcUsername" value="sa" />  
  22.         <property name="jdbcPassword" value="" />  
  23.         -->  
  24.   
  25.         <property name="dataSource" ref="dataSource" />  
  26.   
  27.         <property name="jobExecutorActivate" value="true" />  
  28.     </bean>  
  29.   
  30. </beans>  

现在运行activiti-engine-5.x.jar包中org.activiti.engine.impl.db.DbSchemaCreate这个类,对了有源码的,activiti-engine-5.x-sources.jar这个包就是对应的源码了,DbSchemaCreate的源码: 

[java] view plaincopyprint?
  1. /* Licensed under the Apache License, Version 2.0 (the "License"); 
  2.  * you may not use this file except in compliance with the License. 
  3.  * You may obtain a copy of the License at 
  4.  *  
  5.  *      http://www.apache.org/licenses/LICENSE-2.0 
  6.  *  
  7.  * Unless required by applicable law or agreed to in writing, software 
  8.  * distributed under the License is distributed on an "AS IS" BASIS, 
  9.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
  10.  * See the License for the specific language governing permissions and 
  11.  * limitations under the License. 
  12.  */  
  13.   
  14. package org.activiti.engine.impl.db;  
  15.   
  16. import org.activiti.engine.ProcessEngineConfiguration;  
  17. import org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl;  
  18. import org.activiti.engine.impl.util.LogUtil;  
  19.   
  20.   
  21. /** 
  22.  * @author Tom Baeyens 
  23.  */  
  24. public class DbSchemaCreate {  
  25.   
  26.   static {  
  27.     LogUtil.readJavaUtilLoggingConfigFromClasspath();  
  28.   }  
  29.   
  30.   public static void main(String[] args) {  
  31.     ProcessEngineConfiguration  
  32.       .createProcessEngineConfigurationFromResourceDefault()  
  33.       .setDatabaseSchemaUpdate(ProcessEngineConfigurationImpl.DB_SCHEMA_UPDATE_CREATE)  
  34.       .buildProcessEngine();  
  35.   }  
  36.   
  37. }  
从这里看,这段代码还是Tom写的呢。

运行它的main方法就可以自动建立数据库了,很简单的啦。

至于它后台怎么交互数据库,详细代码,自己去查源码深究吧,他这里使用mybatis作为ORM层框架的。

另外org.activiti.db.create下面有sql文件,你觉得这样麻烦,想自己跑这些sql语句也可以的。不过,新建上面这个Java Project很有用,下面的学习有用的。

这些sql文件跑完只有表结构,都是空表。

如果想导入数据,比如想连接mysql,不想连接H2 来运行这个activiti-explorer,可以去{activiti}\setup\build\demo\h2.data.sql看,跑一下这个sql文件就OK啦。

然后还需要修改tomcat/webapp/下面的activiti-explorer和activiti-rest的数据库连接,改到mysql上面,并且导入必要的jar包,如mysql驱动包。

重新启动tomcat就可以将数据库切换到mysql来运行demo了。

下面才是核心,那就是学习Activiti工作流引擎的API了。

关于配置文件的配置,关于ProcessEngine类,关于流程定义语法规则,关于如何发布流程到引擎上,如何启动一个流程,如何获得工作列表,等等。。。

其实很简单,核心都在ProcessEngine,由它产生各种Service来完成以上的工作。

原创粉丝点击