1.最近要做一个OA 系统,需要用到Activiti工作流
首先搭建一个SSH的基本框架,然后在参看了Kafeitu的demo之后在lib下加入如下jar包
然后在applicationContext.xml里面加入如下代码,将Activiti的ProcessEngine交给Spring管理
<!-- 创建一个流程引擎的配置对象你不用管这个是什么意思 这个是死的这就是配置这个就是所谓activiti的引擎 现在你已经制造他了 -->
<bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
<!--这里是数据源的指定 指向你自己的dataSource -->
<property name="dataSource" ref="dataSource" />
<property name="transactionManager" ref="transactionManager" />
<!-- 设置数据库schema的更新方式 -->
<property name="databaseSchemaUpdate" value="true" />
<!-- 是否启动jobExecutor -->
<property name="jobExecutorActivate" value="false" />
<!-- 自动部署就是自己自动部署流程 意思就是 我本来没流程啊 怎么多出来的流程 就是在这里 自动部署的,流程只有部署了 用户才可以走这个流程 -->
<property name="deploymentResources">
<list>
<value>classpath*:/deployments/*</value>
</list>
</property>
<!-- 自定义表单字段类型 这个很重要 很重要 你不用明白他是什么意思 他就是必须的 自己在自己的项目里加上这个类然后指向他 -->
<property name="customFormTypes">
<list>
<bean class="com.activi.UserFormType" />
</list>
</property>
</bean>
<bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
<property name="processEngineConfiguration" ref="processEngineConfiguration" />
</bean>
<bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService"/>
<bean id="runtimeService" factory-bean="processEngine" factory-method="getRuntimeService"/>
<bean id="formService" factory-bean="processEngine" factory-method="getFormService"/>
<bean id="identityService" factory-bean="processEngine" factory-method="getIdentityService"/>
<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"/>
为processEngingeConfiguration配置transactionManger
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
写一个UserFormType类
package com.activi;
import org.activiti.engine.form.AbstractFormType;
public class UserFormType extends AbstractFormType{
@Override
public String getName() {
// TODO Auto-generated method stub
return null;
}
@Override
public Object convertFormValueToModelValue(String arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public String convertModelValueToFormValue(Object arg0) {
// TODO Auto-generated method stub
return null;
}
}
加入测试方法(方法用于测试流程引擎是不是可以正常使用)
推荐交给Spring管理的类使用@Autowire来注入
package test.service.activiti;
import static org.junit.Assert.assertNotNull;
import org.activiti.engine.FormService;
import org.activiti.engine.HistoryService;
import org.activiti.engine.IdentityService;
import org.activiti.engine.ManagementService;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import test.TestSupport;
public class ActivitiInitTest extends TestSupport{
@Autowired
private RepositoryService repositoryService;
@Autowired
private RuntimeService runtimeService;
@Autowired
private FormService formService;
@Autowired
private IdentityService identityService;
@Autowired
private TaskService taskService;
@Autowired
private HistoryService historyService;
@Autowired
private ManagementService managementService;
/**
* 检测引擎是否能正常工作
*/
@Test
public void testProcessEngines() {
assertNotNull(repositoryService);
assertNotNull(runtimeService);
assertNotNull(formService);
assertNotNull(identityService);
assertNotNull(taskService);
assertNotNull(historyService);
assertNotNull(managementService);
}
}
我们发现有如下报错
错误显示的是项目中没有引入ibatis的相应jar包,因为Activiti是以ibatis作为数据持久层框架的,接下来引入mybatis.jar
继续测试,报错
显示的是我们没有joda的jar包,添加joda-time.jar
继续测试,然后我们终于能够得到Activiti提供的引擎以及相应的方法了