Activiti-03-query api
Query API
有两种方式从引擎中查询数据, 查询 API 和本地查询。
API方式:
List<Task> tasks = taskService.createTaskQuery() .taskAssignee("kermit") .processVariableValueEquals("orderId","0815") .orderByDueDate().asc() .list();
本地查询方式(写sql):
List<Task> tasks = taskService.createNativeTaskQuery() .sql("SELECT count(*) FROM "+ managementService.getTableName(Task.class)+" T WHERE T.NAME_ = #{taskName}") .parameter("taskName","gonzoTask") .list();
long count = taskService.createNativeTaskQuery() .sql("SELECT count(*) FROM "+ managementService.getTableName(Task.class)+" T1, " + managementService.getTableName(VariableInstanceEntity.class)+" V1 WHERE V1.TASK_ID_ = T1.ID_") .count();
Expressions
Activiti 使用UEL( Unified Expression Language )作为表达式解析
Value expression: 解析为一个值,默认所有的流程变量都可以被使用 所有的spring bean也可以被使用
在流程定义文件中,可以使用${XXX}这样的表达式
${myVar}${myBean.myProperty}
Method expression:继续为一个方法可能有参数,如果没有参数,也要加“()”.
${printer.print()}${myBean.addNewOrder('orderName')}${myBean.doSomething(myVar, execution)}
表达式支持解析简单的 基本类型 bean map array list
Unit testing
在单元测试3中, org.activiti.engine.test.ActivitiTestCase 必须被继承
在 setup()测试方法中,processEngine 将被 activiti.cfg.xml初始化,为了指定不同的配置文件getConfigurationResource()方法需要被重写
继承 ActivitiTestCase 之后,可以使用org.activiti.engine.test.Deployment注解
在测试之前,, 一个形如 testClassName.testMethod.bpmn20.xml的资源文件和测试类在一个包中 , 将被部署 deployed.
public class MyBusinessProcessTest extends ActivitiTestCase{ @Deployment publicvoid testSimpleProcess(){ runtimeService.startProcessInstanceByKey("simpleProcess"); Task task = taskService.createTaskQuery().singleResult(); assertEquals("My Task", task.getName()); taskService.complete(task.getId()); assertEquals(0, runtimeService.createProcessInstanceQuery().count()); }}
在单元测试4中,org.activiti.engine.test.ActivitiRule Rule 必须被使用,通过Rule,流程引擎和服务可以被获取 。Deployment注解也会被用到
/**
* 1,要测试的文件必须与测试类在同一包下面
* 2,此流程文件名是: 类名.方法名 .bpmn20.xml
*/
public class MyBusinessProcessTest{ @Rule publicActivitiRule activitiRule =new ActivitiRule(); @Test @Deployment publicvoid ruleUsageExample(){ RuntimeService runtimeService = activitiRule.getRuntimeService(); runtimeService.startProcessInstanceByKey("ruleUsage"); TaskService taskService = activitiRule.getTaskService(); Task task = taskService.createTaskQuery().singleResult(); assertEquals("My Task", task.getName()); taskService.complete(task.getId()); assertEquals(0, runtimeService.createProcessInstanceQuery().count()); }}
在 in-memory H2 database进行单元测试 浏览器输入 http://localhost:8082,设置数据库相关信息,进入数据库查询页面
流程引擎在web应用
ProcessEngine 是线程安全的,在web应用中看,容器启动,关闭引擎跟着启动和关闭
下面是简单的写一个ServletListener,启停引擎
public class ProcessEnginesServletContextListener implements ServletContextListener{ public void contextInitialized(ServletContextEvent servletContextEvent){
// ProcessEngines.init()方法会查找classpath中activiti.cfg.xml 资源文件,创建ProcessEngine
ProcessEngines.init(); }
publicvoid contextDestroyed(ServletContextEvent servletContextEvent){ ProcessEngines.destroy(); }
}
取ProcessEngines对象可以使用 ProcessEngines.getDefaultProcessEngine()或
ProcessEngines.getProcessEngine("myName");
Activiti-03-query api的更多相关文章
- [Liferay6.2]Liferay Dynamic Query API示例
介绍 Liferay提供了几种方法定义复杂的查询用来检索数据库中的数据. 通常情况下,在每个service Entity中,通过定义一些'finder'方法,可以便捷地满足基本的数据查询操作. 但是, ...
- elasticsearch6.7 05. Document APIs(7)Update By Query API
6.Update By Query API _update_by_query 接口可以在不改变 source 的情况下对 index 中的每个文档进行更新.这对于获取新属性或其他联机映射更改很有用.以 ...
- elasticsearch6.7 05. Document APIs(5)Delete By Query API
4.Delete By Query API _delete_by_query API可以删除某个匹配条件的文档: POST twitter/_delete_by_query { "query ...
- 03: zabbix API接口 对 主机、主机组、模板、应用集、监控项、触发器等增删改查
目录:Django其他篇 01: 安装zabbix server 02:zabbix-agent安装配置 及 web界面管理 03: zabbix API接口 对 主机.主机组.模板.应用集.监控项. ...
- Elasticsearch学习笔记-Delete By Query API
记录关于Elasticsearch的文档删除API的学习 首先官网上Document APIs介绍了 Delete API 和Delete By Query API. Delete API可以通过指定 ...
- elasticsearch 基础 —— Update By Query API
Update By Query API 最简单的用法是_update_by_query在不更改源的情况下对索引中的每个文档执行更新.这对于获取新属性或其他一些在线映射更改很有用 .这是API: POS ...
- elasticsearch 基础 —— Delete By Query API
Delete By Query API _delete_by_query 的简单用法,就是在查询匹配到的每个文档上执行删除.例如: POST twitter/_delete_by_query { &q ...
- Activiti(1) - TaskRuntime API 入门
目录 TaskRuntime API pom.xml 注册TaskRuntime实例 角色与分组 任务事件监听器 DemoApplication 源码 Activiti 是一个自动化工作流框架.它能帮 ...
- elasticsearch 5.x Delete By Query API(根据条件删除)
之前在 2.X版本里 这个Delete By Query功能被去掉了 因为官方认为会引发一些错误 如需使用 需要自己安装插件. bin/plugin install delete-by-query 需 ...
- Activiti工作流框架学习(二)——使用Activiti提供的API完成流程操作
可以在项目中加入log4j,将logj4.properties文件拷入到src目录下,这样框架执行的sql就可以输出到到控制台,log4j提供的日志级别有以下几种: Fatal error war ...
随机推荐
- SpringMVC详解(五)------参数绑定
参数绑定,简单来说就是客户端发送请求,而请求中包含一些数据,那么这些数据怎么到达 Controller ?这在实际项目开发中也是用到的最多的,那么 SpringMVC 的参数绑定是怎么实现的呢?下面我 ...
- 用Html模仿百度一下你就知道
用Html模仿百度一下你就知道.... ------------------------------- <!doctype html> <html lang="en&quo ...
- javascript:void(0); 是什么意思
javascript:void(0); 是什么意思.. ------------------------------------------------- 常常在百度云网页版下载东西的时候网页的左下角 ...
- 《HelloGitHub》第 17 期
公告 本月 hellogitub.com 动态 服务器迁移到了国内,国内浏览速度有了质的飞跃. 代码重构 项目 运行更加简单,直接 clone.执行安装依赖命令.运行 上线了"我的收藏&qu ...
- 2017面向对象程序设计(Java)第二周学习总结
2017面向对象程序设计(Java)第二周学习总结 直系学妹学弟们好!额...不要问我为什么把学妹放前面,我也不知道!我只是你们和蔼可亲的学长一枚而已.也不要问为什么是第二周学习总结而不是第一周,因为 ...
- 新的表格展示利器 Bootstrap Table Ⅱ
上一篇文章介绍了Bootstrap Table的基本知识点和应用,本文针对上一篇文章中未解决的文件导出问题进行分析,同时介绍BootStrap Table的扩展功能,当行表格数据修改. 1.B ...
- centos 7 最小安装后 安装FTP服务器 vsftp
1.首先查看下 系统配置 rpm -q ftp #肯定是没安装, 2.安装 vsftpd yum -y vsftpd 3.vim /etc/vsftpd/vsftpd.conf anonymous_e ...
- Centos 6启动流程详解
author:JevonWei 版权声明:原创作品 Centos6 启动流程 POST开机自检 当按下电源键后,会启动ROM芯片中的CMOS程序检查CPU.内存等硬件设备是否正常运行,CMOS中的程序 ...
- 【找不到与请求 URI匹配的 HTTP 资源】(转)
在.net下,创建一个HTTP服务,有很多方案,比较老ashx,一般处理程序(HttpHandler), Web Service SOAP协议的,数据格式是XML,HTTP协议 WCF ...
- android-学习1 配置环境
转载注明出处,谢谢--http://www.cnblogs.com/JK-HYJ/ 前提:电脑先配置好java的环境-- adk_bundle下载安装地址:http://tools.android-s ...