Activiti 项目实战笔记
项目中用到的所有jar 包和插件 我都整理出来放在
Activiti 实战工具包
(一) eclipse 配置activiti 开发环境
首先在eclipse中装activiti插件方便开发过程中进行流程设计
我这里主要写离线安装方法,网络方便的话可以选择在线安装。。百度一大堆,更简单。
1,拿到工具包中的 activiti插件安装.zip 解压。
2,将解压好的activiti+文件夹里的3个jar文件复制到eclipse安装目录的plugins目录下。
3,删除eclipse安装目录下,configuration文件夹里的org.eclipse.update文件夹,重启eclipse。
(二) ssm 整合activiti
1,首先在项目中导入activiti 的相关jar 包,libs 文件夹中的所有jar包拷贝到项目的jar包目录lib下,然后build path 。其他spring MVC相关的jar包我就不说了。
2,接下来就添加配置文件
新增配置文件activiti.cfg.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
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
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
<import resource="classpath:applicationContext.xml"/>
<!--
ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
//连接数据库的配置
processEngineConfiguration.setJdbcDriver("com.mysql.jdbc.Driver");
processEngineConfiguration.setJdbcUrl("jdbc:mysql://localhost:3306/itcast0711activiti?useUnicode=true&characterEncoding=utf8");
processEngineConfiguration.setJdbcUsername("root");
processEngineConfiguration.setJdbcPassword("root");
/**
public static final String DB_SCHEMA_UPDATE_FALSE = "false";不能自动创建表,需要表存在
public static final String DB_SCHEMA_UPDATE_CREATE_DROP = "create-drop";先删除表再创建表
public static final String DB_SCHEMA_UPDATE_TRUE = "true";如果表不存在,自动创建表
*/
processEngineConfiguration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
-->
<!-- <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/itcast0711activiti?useUnicode=true&characterEncoding=utf8"></property> -->
<!-- <property name="jdbcUsername" value="root"></property> -->
<!-- <property name="jdbcPassword" value="root"></property> -->
<!-- 没有表创建表 -->
<!-- <property name="databaseSchemaUpdate" value="true"></property> -->
<!-- </bean> -->
</beans>
然后在applicationContext.xml配置中新增配置如下:
<!-- 配置activiti的数据源 -->
<bean id="dataSource2" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/activiti?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true"></property>
<property name="username" value="root"></property>
<property name="password" value="123456"></property>
</bean>
<!-- activiti事务管理 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource2" />
</bean>
<!-- 加载activiti引擎 -->
<bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
<property name="processEngineConfiguration" ref="processEngineConfiguration" />
</bean>
<bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
<property name="dataSource" ref="dataSource2" />
<property name="transactionManager" ref="transactionManager" />
<property name="databaseSchemaUpdate" value="true" />
<property name="jobExecutorActivate" value="false" />
<property name="activityFontName" value="微软雅黑"/>
<property name="labelFontName" value="微软雅黑"/>
<property name="mailServerHost" value="localhost"/>
<property name="mailServerPort" value="5025"/>
</bean>
<!-- 创建activiti提供的各种服务 -->
<!-- 工作流仓储服务 -->
<bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService" />
<!-- 工作流运行服务 -->
<bean id="runtimeService" factory-bean="processEngine" factory-method="getRuntimeService" />
<!-- 工作流任务服务-->
<bean id="taskService" factory-bean="processEngine" factory-method="getTaskService" />
<!-- 工作流历史数据服务-->
<bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService" />
<!-- 工作流管理服务-->
<bean id="managementService" factory-bean="processEngine" factory-method="getManagementService" />
<!-- 表彰-->
<bean id="formService" factory-bean="processEngine" factory-method="getFormService" />
<!-- 工作流唯一服务 -->
<bean id="IdentityService" factory-bean="processEngine" factory-method="getIdentityService"/>
(三) 生成activiti 数据库
数据库的生成我是用代码生成,其实不用我下面的这段代码生成23张表也没事。因为我在配置文件中配置了
<property name="databaseSchemaUpdate" value="true" />
这个属性就是 如果表不存在,自动创建表
启动的时候如果数据源库中没有activiti库以及表 则自动会生成activiti库以及23张表
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
/**使用代码创建工作流需要的23张表*/
@Test
public void createTable(){
ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
//连接数据库的配置
processEngineConfiguration.setJdbcDriver("com.mysql.jdbc.Driver");
processEngineConfiguration.setJdbcUrl("jdbc:mysql://localhost:3306/activiti?useUnicode=true&characterEncoding=utf8");
processEngineConfiguration.setJdbcUsername("root");
processEngineConfiguration.setJdbcPassword("123456");
/**
public static final String DB_SCHEMA_UPDATE_FALSE = "false";不能自动创建表,需要表存在
public static final String DB_SCHEMA_UPDATE_CREATE_DROP = "create-drop";先删除表再创建表
public static final String DB_SCHEMA_UPDATE_TRUE = "true";如果表不存在,自动创建表
*/
processEngineConfiguration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
//工作流的核心对象,ProcessEnginee对象
ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();
System.out.println("processEngine:"+processEngine);
}
(四) 整合activiti modeler 到项目
由于我们项目要求流程这块要业务人员自定义流程(当时内心崩溃!!),所以初步设计打算用activiti modeler 编辑器作为用户的自定义流程编辑器(我是不信业务人员能用这个画出正确的流程图,当然后面我进行了一系列的改版和优化 终于改成能让一个傻子都能画出流程来着,主要是我前端太菜了 不然我自己写个编辑器)。
以上都是吐槽
下面我们把编辑器整合到我们项目中
activiti 官方的项目包是这个 Activiti-develop.zip 解压后放在tomcat下面 修改数据库配置文件(具体的修改方法附录在下面 见附录1)即可启动进入activiti后台系统 ,这个系统也是整合了activiti modeler 编辑器可以在线编辑部署流程, 不过也没啥用, 我们已经把activiti整合到我们自己的项目中了。现在的目的是把activiti modeler编辑器也整合到我们自己的项目中。
下图是官方给的activiti后台管理系统
下图是activiti modeler 编辑器图片
接下来正式把modeler编辑器整合到我们自己的系统中
1,首先在web.xml中添加rest相关
<servlet >
<servlet-name> ExplorerRestletServlet</servlet-name >
<servlet-class> org.restlet.ext.servlet.ServerServlet</servlet-class >
<init-param>
<!-- Application class name -->
<param-name> org.restlet.application</param-name >
<param-value> com.isprint.ssf.controller.ExplorerRestApplication</param-value >
</init-param>
</servlet >
<servlet >
<servlet-name> RestletServlet</servlet-name >
<servlet-class> org.restlet.ext.servlet.ServerServlet</servlet-class >
<init-param>
<!-- Application class name -->
<param-name> org.restlet.application</param-name >
<param-value> org.activiti.rest.service.application.ActivitiRestServicesApplication </param-value>
</init-param>
</servlet >
<!-- Catch all service requests -->
<servlet-mapping>
<servlet-name> RestletServlet</servlet-name >
<url-pattern> /rest/*</ url-pattern>
</servlet-mapping >
<servlet-mapping>
<servlet-name> ExplorerRestletServlet</servlet-name >
<url-pattern> /modeler/service/*</url-pattern >
</servlet-mapping>
2,然后拿到我给的资料包中的modeler文件夹,把文件夹中相关的文件放到项目对应的目录下
如下:
3,添加支持activiti modeler 正常运行的jar
在modeler 文件夹中的lib 下存放了支持