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. ubuntu安装mysql可视化工具MySQL-workbench及简单操作

    一.使用命令行在ubuntu下安装mysql可视化工具MySQL-workbench Step1:安装MySQL-workbench 方案一:如果你已经装好mysql的相关服务,那么直接使用如下命令即 ...

  2. BotVS开发基础—2.1 账户、行情、K线、深度

    代码 import json def main(): Log("账号信息:", exchange.GetAccount()); # Log("K 线数据:", ...

  3. Akka(22): Stream:实时操控:动态管道连接-MergeHub,BroadcastHub and PartitionHub

    在现实中我们会经常遇到这样的场景:有一个固定的数据源Source,我们希望按照程序运行状态来接驳任意数量的下游接收方subscriber.又或者我需要在程序运行时(runtime)把多个数据流向某个固 ...

  4. struts2-请求参数校验

    校验的分类 : 客户端数据校验 和 服务器端数据校验 客户端数据校验 ,通过JavaScript 完成校验 (改善用户体验,使用户减少出错 ) 服务器数据校验 ,使用框架内置校验功能 (struts2 ...

  5. prop解决一个checkbox选中后再次选中失效的问题

    //问题点 初始状态复选框没有全选, 点击全选按钮调用checkAll方法, 实现了全选, 然后点击全不选按钮, 实现了全不选, 然后再次点击全选按钮, 结果却木有全选, 再反复点击木有任何反应. d ...

  6. 线上Java程序导致服务器CPU占用率过高的问题排除过程

    博文转至:http://www.jianshu.com/p/3667157d63bb,博文更好效果看原版,转本博文的目的就算是个书签吧,需要时候可以定位原文学习 1.故障现象 客服同事反馈平台系统运行 ...

  7. 【转载】js常用方法和片段

    在网上看了不少js方法的总结没,自己也尝试总结过,这篇只迄今为止觉得最清楚的,尤其是call和apply的方法总结,很到位!! 1.javascript删除元素节点 IE中有这样一个方法:remove ...

  8. 遇到的一些Jquery函数

     jQuery.extend()        jQuery.merge():函数用于合并两个数组内容到第一个数组. <script> $(function () { ,,], [,,] ...

  9. C-C++到底支不支持VLA以及两种语言中const的区别

    C-C++到底支不支持VLA以及两种语言中const的区别 到底支不支持VLA VLA就是variable-length array,也就是变长数组. 最近写程序的时候无意间发现,gcc中竟然支持下面 ...

  10. 基于NIOS-II的示波器:PART1 按键&显示屏驱动&界面

    NIOS II 相关资料以及基础入门 <NiosII的奇幻漂流> <Nios II那些事儿> 本文所有的硬件基础以及工程参考来自魏坤示波仪,重新实现驱动并重构工程. 基于NIO ...