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的更多相关文章

  1. [Liferay6.2]Liferay Dynamic Query API示例

    介绍 Liferay提供了几种方法定义复杂的查询用来检索数据库中的数据. 通常情况下,在每个service Entity中,通过定义一些'finder'方法,可以便捷地满足基本的数据查询操作. 但是, ...

  2. elasticsearch6.7 05. Document APIs(7)Update By Query API

    6.Update By Query API _update_by_query 接口可以在不改变 source 的情况下对 index 中的每个文档进行更新.这对于获取新属性或其他联机映射更改很有用.以 ...

  3. 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 ...

  4. 03: zabbix API接口 对 主机、主机组、模板、应用集、监控项、触发器等增删改查

    目录:Django其他篇 01: 安装zabbix server 02:zabbix-agent安装配置 及 web界面管理 03: zabbix API接口 对 主机.主机组.模板.应用集.监控项. ...

  5. Elasticsearch学习笔记-Delete By Query API

    记录关于Elasticsearch的文档删除API的学习 首先官网上Document APIs介绍了 Delete API 和Delete By Query API. Delete API可以通过指定 ...

  6. elasticsearch 基础 —— Update By Query API

    Update By Query API 最简单的用法是_update_by_query在不更改源的情况下对索引中的每个文档执行更新.这对于获取新属性或其他一些在线映射更改很有用 .这是API: POS ...

  7. elasticsearch 基础 —— Delete By Query API

    Delete By Query API _delete_by_query 的简单用法,就是在查询匹配到的每个文档上执行删除.例如: POST twitter/_delete_by_query { &q ...

  8. Activiti(1) - TaskRuntime API 入门

    目录 TaskRuntime API pom.xml 注册TaskRuntime实例 角色与分组 任务事件监听器 DemoApplication 源码 Activiti 是一个自动化工作流框架.它能帮 ...

  9. elasticsearch 5.x Delete By Query API(根据条件删除)

    之前在 2.X版本里 这个Delete By Query功能被去掉了 因为官方认为会引发一些错误 如需使用 需要自己安装插件. bin/plugin install delete-by-query 需 ...

  10. Activiti工作流框架学习(二)——使用Activiti提供的API完成流程操作

    可以在项目中加入log4j,将logj4.properties文件拷入到src目录下,这样框架执行的sql就可以输出到到控制台,log4j提供的日志级别有以下几种: Fatal  error  war ...

随机推荐

  1. java之http协议

                                 HTTP协议 自从入坑以来,只要是跟web打交道,总是免不了这个HTTP协议,这是什么鬼,让我们一探究竟.(不周之处还请赐教!!!) 既然是协 ...

  2. Java 异常框架

    一张图看懂Java 异常框架之间的关系. 说明: 受检异常:编译的时候报错. 费受检异常:运行时报错,需要知道几个常见的异常 NullPointerException(空指针异常) ArrayInde ...

  3. python进阶学习(四)

    在使用多线程之前,我们首页要理解什么是进程和线程. 什么是进程? 计算机程序只不过是磁盘中可执行的,二进制(或其它类型)的数据.它们只有在被读取到内存中,被操作系统调用的时候才开始它们的生命期.进程( ...

  4. java通过freemarker导出包含富文本图片的word文档

    废话不多说,进入正题! 本文重点在于:对富文本图片的导出(基础的freemarker+word模板导出这里不做详细解说哈) 参考文章:http://www.cnblogs.com/liaofeifig ...

  5. JSP页面中<%!%>与<%%>与<%=%>

    首先,我们要了解jsp运行原理.JSP的本质就是一个Servlet,JSP的运行之前会先被Tomcat服务器翻译为.java文件,然后在将.java文本编译 为.class文件,而我们在访问jsp时, ...

  6. Centos 7 PXE一键安装

    author:JevonWei 版权声明:原创作品 192.168.198.134作为安装服务器,由httpd服务共享安装程序 192.168.198.134作为dhcp服务器,客户机获取IP 一.安 ...

  7. 转载 远程用户连接mysql授权

    授权法:  在安装mysql的机器上运行:  1.d:\mysql\bin\>mysql -h localhost -u root  //这样应该可以进入MySQL服务器  2.mysql> ...

  8. 物联网socket通讯设备android

    http://cache.baiducontent.com/c?m=9d78d513d99c16ee19bec1291a17a7384215c634608090027ea48439e573284b50 ...

  9. 微软为啥让免费升Win10?

           今天终于赶在截止日期之前把我的联想PC升到win10.微软这次对中国开放的持续一年的免费升级活动主要有两个原因.首先当然是"感恩Windows用户长久支持的回馈".微 ...

  10. sublime中如何在浏览器中打开文件?

    SideBarEnhancements 侧边栏增强 SideBarEnhancements本是增强侧边栏的插件,这里将教大家如何用来做sublime text 3浏览器预览插件,并可自定义浏览器预览的 ...