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. mysql存储过程查询结果循环遍历 判断 赋值 游标等基本操作

    一.首先说下本篇博客所实现功能的背景和功能是怎样的: 背景:因为公司项目开始迁移新平台项目,所以以前的平台老数据以及订单信息需要拆分表,而且需要业务逻辑来分析以前的订单表,来拆分成另外的几个新表,包括 ...

  2. weblogic 启动问题

    通过startWebLogic.cmd 手动启动weblogic可以成功启动 myeclipse配置后,runserver 就会报 Error occurred during initializati ...

  3. Java的类型转换

    Java的类型转换 在适当的时候,我们会想要将一种数据类型自动转换成另一种,比如把int转化成float类型.Java有隐藏式的自动转换,可以自动转换成想要的类型,但是强制的自动转换的话,.需要将希望 ...

  4. css 找到隐藏元素个数

    <form>   <input type="hidden" name="email" />   <input type=" ...

  5. java面向对象(四)之重写、重载

    重载 定义 重载:在一个类中,存在多个方法拥有相同的名字,但在名字相同的同时,必须有不同的参数,这就是重载. 编译器会根据实际情况挑选出正确的方法,如果编译器找不到匹配的参数或者找出多个可能的匹配就会 ...

  6. Web.py 框架学习笔记 - URL处理

    最近由于工作需要开始学习基于python的web应用框架web.py.为了方便学习,将学习心得逐日记下以便日后复习. URL 模板: web.py提供了一套url处理的模板,在python工程中,只需 ...

  7. C# .NET Socket 简单实用框架

    背景: 首先向各位前辈,大哥哥小姐姐问一声好~ 这是我第一次写博客,目前为一个即将步入大四的学生,上学期在一家公司实习了半年,后期发现没有动力,而且由于薪水问题(废话嘛),于是跳槽到这家新的公司. 说 ...

  8. 页面性能优化和高频dom操作

    一.DOM操作影响页面性能的核心问题 通过js操作DOM的代价很高,影响页面性能的主要问题有如下几点: 访问和修改DOM元素 修改DOM元素的样式,导致重绘或重排 通过对DOM元素的事件处理,完成与用 ...

  9. java_jstl 标签库

    jstl标签库的使用以及介绍 jstl:jsp标准标签库,是jsp的标签集合,它里面封装了jsp通用的核心功能,比如:建构化的任务,迭代,条件判断,xml 文档的操作,国际化标签,sql标签,还提供框 ...

  10. 超级简单实用的前端必备技能-javascript-全屏滚动插件

      fullPage.js fullPage.js是一个基于jQuery的全屏滚动插件,它能够很方便.很轻松的制作出全屏网站 本章内容将详细介绍Android事件的具体处理及常见事件. 主要功能 支持 ...