持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第16天,点击查看活动详情
Activiti的使用
说完了Activiti的配置,接下来该正式进入Activiti的API了。
Activiti的API和服务
引擎API是与Activiti交互的最常见方式。入口是ProcessEngine,它可以通过配置部分中描述的几种方式创建。从ProcessEngine中,我们可以获得包含工作流/BPM方法的各种服务。ProcessEngine和Service对象是线程安全的。因此,我们可以在多线程的情况下使用一个流程引擎。
Activiti提供的服务类如下:
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
RuntimeService runtimeService = processEngine.getRuntimeService();
RepositoryService repositoryService = processEngine.getRepositoryService();
TaskService taskService = processEngine.getTaskService();
ManagementService managementService = processEngine.getManagementService();
IdentityService identityService = processEngine.getIdentityService();
HistoryService historyService = processEngine.getHistoryService();
FormService formService = processEngine.getFormService();
DynamicBpmnService dynamicBpmnService = processEngine.getDynamicBpmnService();
ProcessEngines.getDefaultProcessEngine()将在第一次调用过程引擎时初始化并构建引擎,然后始终返回相同的过程引擎。可以使用ProcessEngines正确创建和关闭所有流程引擎。init()和ProcessEngines.destroy()。
ProcessEngines类将扫描所有activiti.cfg.xml和activiti-context.xml文件。对于所有activiti.cfg.xml文件,流程引擎默认的方式构建:ProcessEngineConfiguration.createProcessEngineConfigurationFromInputStream(inputStream).buildProcessEngine()。对于所有activiti-context.xml文件中,流程引擎将以Spring方式构建:首先创建Spring应用程序上下文,然后从该应用程序上下文中获取流程引擎。
所有服务都是无状态的。这意味着我们可以轻松地在集群中的多个节点上运行Activiti,每个节点都指向同一个数据库,而不必担心哪台机器实际执行了以前的调用。对任何服务的任何调用都是幂等的,无论在何处执行。
Activiti中的异常策略
Activiti中的异常基类是org.activiti.engine.ActivitiException,未经检查的异常。API可以随时引发此异常,但特定方法中发生的预期异常记录在javadocs中。例如,TaskService的void complete(String taskId);方法:当根据id查询不到任务的时候会引发ActivitiObjectNotFoundException异常。
在上面的示例中,当传递的id不存在任务时,将引发异常。此外,由于javadoc明确声明taskId不能为null,因此在传递null时将引发ActivitiIllegalArgumentException。
尽管我们希望避免出现大的异常层次结构,但添加了以下子类,这些子类在特定情况下抛出。在流程执行或API调用期间发生的所有其他错误,如果不符合以下可能的异常,将作为常规ActivityExceptions抛出。
- ActivitiErrorDBException:当Activiti引擎发现数据库版本和引擎版本之间不匹配时引发。
- ActivityOptimisticLockingException:在数据存储中发生乐观锁定时引发,该锁定是由对同一数据项的并发访问引起的。
- ActivityClassLoadingException:当找不到请求加载的类或加载时出错时引发(例如JavaDelegates、TaskListeners等)
- ActivitiObjectNotFoundException:当请求的对象或操作不存在时引发。
- ActivitiIllegalArgumentException:表示Activiti API调用中提供了非法参数、引擎配置中配置了非法值、提供了非法值或进程定义中使用了非法值的异常。
- ActivitiTaskAlreadyClaimedException:当任务已经声明时抛出,当taskService.claim(…) 被调用。