? ActivitiWrongDbException:当Activiti引擎发现数据库版本号和引擎版本号不一致时
抛出。
? ActivitiOptimisticLockingException:对同一数据进行并发方法并出现乐观锁时
抛出。
? ActivitiClassLoadingException:当无法找到需要加载的类或在加载类时出现了错
误(比如,JavaDelegate,TaskListener等。
? ?
ActivitiObjectNotFoundException:当请求或操作的对应不存在时抛出。 ActivitiIllegalArgumentException:这个异常表示调用Activiti API时传入了一个
非法的参数,可能是引擎配置中的非法值,或提供了一个非法制,或流程定义中使用的非法值。
? ActivitiTaskAlreadyClaimedException:当任务已经被认领了,再调用taskService.claim(...)就会抛出。
使用Activiti的服务
像上面介绍的那样,要想操作Activiti引擎,需要通过 org.activiti.engine.ProcessEngine实例暴露的服务。 下面的代码假设你已经拥有了一个可以运行的Activiti环境。 你就可以操作一个
org.activiti.engine.ProcessEngine。 如果只想简单尝试一下代码, 可以下载或者
cloneActiviti单元测试模板, 导入到IDE中,把testUserguideCode()方法添加到
org.activiti.MyUnitTest中。
这个小例子的最终目标是做一个工作业务流程, 演示公司中简单的请假申请:
发布流程
任何与??静态??资源有关的数据(比如流程定义)都可以通过 RepositoryService访问。 从概念上讲,所以静态数据都是Activiti的资源内容。
在src/test/resources/org/activiti/test目录下创建一个新的xml文件
VacationRequest.bpmn20.xml(如果不使用单元测试模板,你也可以在任何地方创建), 内容
如下。注意这一章不会解释例子中使用的xml结构。 如果有需要可以先阅读bpmn 2.0章来了解这些。
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); RepositoryService repositoryService = processEngine.getRepositoryService(); repositoryService.createDeployment() .addClasspathResource(\\ .deploy(); Log.info(\repositoryService.createProcessDefinitionQuery().count()); 可以阅读发布章来了解更多关于发布的信息。
启动一个流程实例
把流程定义发布到Activiti引擎后,我们可以基于它发起新流程实例。 对每个流程定义,都可以有很多流程实例。 流程定义是??蓝图??,流程实例是它的一个运行的执行。
所有与流程运行状态相关的东西都可以通过RuntimeService获得。 有很多方法可以启动一个新流程实例。在下面的代码中,我们使用定义在流程定义xml 中的key来启动流程实例。 我们也可以在流程实例启动时添加一些流程变量,因为第一个用户任务的表达式需要这些变量。 流程变量经常会被用到,因为它们赋予来自同一个流程定义的不同流程实例的特别含义。 简单来说,流程变量是区分流程实例的关键。
Map
流程启动后,第一步就是用户任务。这是必须由系统用户处理的一个环节。 通常,用户会有一个任务列表,展示了所有必须由整个用户处理的任务。 下面的代码展示了对应的查询可能是怎样的: