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. struts2的java.lang.NoSuchMethodException异常处理(转)

    不久前在学习struts时出现这个错误,在网上搜索了半天,发现答案不一.将其总结如下,以方便大家参考. 1. 你有没有试试看 其它的方法能不能用,要是都是这种情况的话,可能是你的Action类没有继承 ...

  2. 借助扩展事件查看SQL 2016备份和还原操作的内幕

    当遇到备份或者还原操作占用较长时间时,很多人会问: 备份/还原是不是僵死了?要不要kill掉,再重来? 到底是哪一个部分的操作占用较长时间? 到底现在进行到什么阶段了? 在SQL 2016 之前,要回 ...

  3. Spring MVC 中获取session的几种方法

    Spring MVC 中使用session是一种常见的操作,但是大家上网搜索一下可以看到获取session的方式方法五花八门,最近,自己终结了一下,将获取session的方法记录下来,以便大家共同学习 ...

  4. 推广技巧:新站要如何推广引流做到日IP10000?

    一.回复高人气帖子插楼推广 1.找高人气的帖子在二楼或者二楼楼层中直接插入链接推广.虽然这种方法存活率比较低,但也算是贴吧里面最直接的有效的方法.一般我们分为三种: 1.1图中链接是一个短网址,这个是 ...

  5. The C++ Programming Language 学习笔记 第6章 表达式和语句

    1.关于strcpy函数. 书中说c风格的字符串尽量少用,strcpy这样的函数应该也要少用.这里讲这个函数主要是要通过本章课后练习第十题来讲一下前面提及的要点.巩固一下前几章的知识.写了一段,本来感 ...

  6. 使用idea和studio进行调试的方法

    新入职一个公司,使用得IDE发生了一些变化 ,对于idea的使用,之前有提到过,今天主要的内容是使用idea和studio进行调试的快捷键. 虽然现在计算机开发的语言多种多样,但是使用C#写客户端,使 ...

  7. base64随机字符混淆加密、解密-美拍视频地址解密,反推加密算法

    用火车头测试采集美拍的数据时无意中发现美拍的视频地址是一段加了混淆字符串的base64代码.如下图 于是好奇之下研究了下解密算法.具体过程省略800字.发现美拍的视频解密是通过js完成,于是找到了具体 ...

  8. Webservice优缺点总结

    优点: 1 .采用xml支持跨平台远程调用. 2.基于http的soap协议,可跨越防火墙. (因为SOAP一般使用HTTP协议,而服务器的这个协议一般都是开放的,而且是可以穿过防火墙的) 3.支持面 ...

  9. dispatch emit broadcast

    1.broadcast 事件广播 遍历寻找所有子孙组件,假如子孙组件和componentName组件名称相同的话,则触发$emit的事件方法,数据为 params. 如果没有找到 则使用递归的方式 继 ...

  10. 规则集之探究何时使用HashSet、LinkedHashSet以及TreeSet?

    前言 Java集合框架三种主要类型的集合:规则集(Set).线性表(List).队列(Queue).Set用来存储不可重复的元素:List用来存储有元素构成的有序的集合:而Queue则用于存储用先进先 ...