工作流中容器化的依赖注入!集成CDI实现工作流
Activiti工作流中的集成CDI
Activiti工作流集成CDI简介
设置activiti-cdi
查找流程引擎
?配置Process Engine
发布流程
基于CDI环境的流程执行
与流程实例进行关联交互
声明式流程控制
在流程中引用bean
使用@BusinessProcessScoped beans
注入流程变量
接收流程事件
Activiti CDI中的更多功能
?
Activiti工作流集成CDI简介activiti-cdi模块提供activiti的可配置型和cdi扩展
activiti-cdi的特性:支持?@BusinessProcessScoped beans,?绑定到流程实例的cdi bean流程为cdi bean支持自定义EL处理器使用注解为流程实例提供声明式控制Activiti可以挂接在cdi事件总线上支持Java EE和Java SE,?支持Spring支持单元测试
要在maven项目中使用activiti-cdi,需要添加依赖
activiti-cdi 5.6以上的版本会自动加入activiti-entin和spring
Activiti cdi可以安装在不同环境中
cdi扩展需要访问到ProcessEngine,?为了实现此功能:使用接口在运行期间进行查找cdi模块使用默认的名为的实现,使用ProcessEngines这个工具类来查找ProcessEngine默认配置下,使用ProcessEngines#NAME_DEFAULT来查找**ProcessEngine.**这个类可能是使用自定义名称的子类注意:?需要把放在classpath下
Activiti cdi使用 SPI处理的实例为了提供接口的自定义实现,需要创建一个文本文件,名为META-INF/services/,?在文件中需要指定实现的全类名如果你没有提供自定义的实现,activiti会使用默认的LocalProcessEngineLookup实现,需要做的就是把放到classpath下
实际的配置依赖于选用的ProcessEngineLookup策略
在这里主要结合LocalProcessEngineLookup讨论可用的配置,要求在classpath下提供一个spring的
Activiti提供了不同的ProcessEngineConfiguration实现,主要是依赖实际使用的事务管理策略
activiti-cdi模块对事务的要求不严格,意味着任何事务管理策略都可以使用,即便是spring事务抽象层
cdi模块提供两种自定义ProcessEngineConfiguration实现::?activiti的JtaProcessEngineConfiguration的子类,用于在activiti使用JTA管理的事务环境:?activiti的StandaloneProcessEngineConfiguration的子类,用于在activiti使用简单JDBC事务环境
注意:?上面的配置要引入spring-context模块依赖
可以使用标准的activiti-api发布流程-RepositoryService
activiti-cdi也提供了自动发布classpath下中列出的流程的方式
BPMN业务流程通常是一个长时间运行的操作,包含了用户和系统任务的操作
运行过程中,流程会分成多个单独的工作单元,由用户和应用逻辑执行
在activiti-cdi中,流程实例可以分配到cdi环境中,关联展现成一个工作单元:这是非常有用的,如果工作单元太复杂:比如如果实现的用户任务是不同形式的复杂顺序,可以在这个操作中保持non-process-scoped状态默认配置下,流程实例分配到broadest激活环境,就会启动交互,如果交互环境没有激活,就会返回到请求中
处理?@BusinessProcessScoped beans,?或注入流程变量时,实现了激活的cdi环境与流程实例的关联
Activiti-cdi提供了 bean来控制关联:startProcessByXx(…):?对应activiti的RuntimeService中的相关方法,允许启动和随后向关联的业务流程resumeProcessById(String processInstanceId):?允许通过提供的Id来关联流程实例resumeTaskById(String taskId):?允许通过提供的Id来关联任务,也可以扩展关联流程实例
一个工作单元完成后?,completeTask()?方法可以调用来解除流程实例和会话或请求的关联.这会通知activiti当前任务已经完成,并让流程实例继续执行
BusinessProcess bean是?@Named bean,?意思是导出的方法可以通过表达式语言调用:比如在JSF页面中.下面的JSF 2 代码启动一个新的交互,分配给一个用户任务实例,Id作为一个请求参数传递
Activiti-cdi允许通过注解声明启动流程实例和完成任务
@注解允许通过key或name启动流程实例.流程实例会在注解的方法返回之后启动:
根据activiti的配置,注解方法的代码和启动流程实例会在同一个事务中执行?.@事务的使用方式相同
@CompleteTask注解可以结束当前会话.默认行为会在activiti返回后结束会话.可以禁用结束会话的功能
上一篇:Xaar Nitrox打印头用于OEM集成确保即插即用
下一篇:骁龙888深度解读:集成5G芯片,图形性能提升最大