- 浏览: 234805 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
lwb314:
你的这个是创建的临时的hive表,数据也是通过文件录入进去的, ...
Spark SQL操作Hive数据库 -
yixiaoqi2010:
你好 我的提交上去 总是报错,找不到hive表,可能是哪里 ...
Spark SQL操作Hive数据库 -
bo_hai:
target jvm版本也要选择正确。不能选择太高。2.10对 ...
eclipse开发spark程序配置本地运行
最近学习了jbpm4.X的定时器事件,下面是一个简单的测试,上一篇简单介绍了jbpm4初始化数据库,这次可以从数据库中查看详细的流程执行信息。
流程定义文件:TimerEventTest.jpdl.xml
定时器到到期时间触发的事件:Escalate.java
测试类TestTimerEvent2.java
流程定义文件:TimerEventTest.jpdl.xml
<?xml version="1.0" encoding="UTF-8"?> <process name="TimerEventTest" xmlns="http://jbpm.org/4.4/jpdl"> <start g="44,111,48,48" name="start1"> <transition g="-50,-18" name="to guardedWait" to="guardedWait"/> </start> <state g="181,108,140,52" name="guardedWait"> <on event="timeout"> <timer duedate="1 minutes"/> <event-listener class="com.lujinyong.timer.event.Escalate"/> </on> <transition g="-34,-20" name="go on" to="next step"/> </state> <state g="442,106,92,52" name="next step"/> </process>
定时器到到期时间触发的事件:Escalate.java
package com.lujinyong.timer.event; import org.jbpm.api.listener.EventListener; import org.jbpm.api.listener.EventListenerExecution; /** * 监听事件 */ public class Escalate implements EventListener { private static final long serialVersionUID = 1L; public void notify(EventListenerExecution execution) { //触发监听事件,会将变量插入流程变量表(jbpm4_variable)中 execution.setVariable("escalation", Boolean.TRUE); String mag = "超时了,我要发提醒信息!"; execution.setVariable("mag", mag); } }
测试类TestTimerEvent2.java
package com.lujinyong.timer.event; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Set; import org.jbpm.api.Configuration; import org.jbpm.api.Execution; import org.jbpm.api.ExecutionService; import org.jbpm.api.ManagementService; import org.jbpm.api.ProcessEngine; import org.jbpm.api.ProcessInstance; import org.jbpm.api.job.Job; import org.junit.Test; public class TestTimerEvent2 { /** * * @Description: 部署流程 * @Auther: lujinyong * @Date: 2013-6-24 下午03:41:01 */ @Test public void testDeploy1() { // 1.get processEngine ProcessEngine processEngine = Configuration.getProcessEngine(); //如果不用图片可以将:.addResourceFromClasspath( "com/lujinyong/timer/event/TimerEventTest.png")去掉 processEngine .getRepositoryService() .createDeployment() .addResourceFromClasspath( "com/lujinyong/timer/event/TimerEventTest.jpdl.xml") .addResourceFromClasspath( "com/lujinyong/timer/event/TimerEventTest.png").deploy(); } /** * * @Description: 测试发起流程,注意:名称发起流程后将发起的方法注释起来,在下面的测试中才不会多出发起的记录 * @Auther: lujinyong * @Date: 2013-6-24 下午03:50:31 */ @Test public void testStart() { ProcessEngine processEngine = Configuration.getProcessEngine(); // 根据流程定义id发起流程 // String processDefinitionId = "TimerTransitionTest-2"; // Execution processInstance = processEngine.getExecutionService() // .startProcessInstanceById(processDefinitionId); // 根据流程定义key发起流程 // String processDefinitionKey = "TimerEventTest"; // ExecutionService executionService = processEngine.getExecutionService(); // ManagementService managementService = processEngine.getManagementService(); // Execution processInstance = executionService.startProcessInstanceByKey(processDefinitionKey); // Execution processInstance = executionService.createProcessInstanceQuery().processInstanceKey(processDefinitionKey).list().get(0); // System.out.println("piID:" + processInstance.getId()); // System.out.println("pdKey:" + processInstance.getKey()); // System.out.println("pdid:" + processInstance.getProcessDefinitionId()); // System.out.println("pdState:" + processInstance.getState()); } /** * * @Description: 测试超时的情况 * 如果流程没有在开始以后 10 分钟内执行 singal, * 事件 timeout 就会被触发 事件监听器com.lujinyong.timer.event.Escalate 将被触发 * 即在流程变量表中会插入监听类的一条记录 * @Auther: lujinyong * @Date: 2013-6-24 下午05:38:35 */ @Test public void testTimerEventTimerFires() { ProcessEngine processEngine = Configuration.getProcessEngine(); ExecutionService executionService = processEngine.getExecutionService(); ManagementService managementService = processEngine.getManagementService(); ProcessInstance processInstance = executionService.startProcessInstanceByKey("TimerEventTest"); //查询定时器 Job job = managementService.createJobQuery() .processInstanceId(processInstance.getId()) .uniqueResult(); //假设定时器被触发了,通过编码执行定时器进行模拟 managementService.executeJob(job.getId()); processInstance = executionService.findProcessInstanceById(processInstance.getId()); Set<String> expectedActivityNames = Collections.singleton("guardedWait"); assertEquals(expectedActivityNames, processInstance.findActiveActivityNames()); assertEquals(Boolean.TRUE, executionService.getVariable(processInstance.getId(), "escalation")); System.out.println(">>>>>>>>>>>>>>>>>>"+executionService.getVariable(processInstance.getId(), "mag")); } /** * * @Description: 测试未超时的情况 * 如果 guardedWait 活动在 10 分钟内被结束, * 然后定时器就会被取消, Escalate 事件监听器也不会执行 * 即流程变量表中不会插入监听类的记录 * @Auther: lujinyong * @Date: 2013-6-24 下午05:39:45 */ // @Test // public void testTimerEventContinueBeforeTimerFires() { // ProcessEngine processEngine = Configuration.getProcessEngine(); // ExecutionService executionService = processEngine.getExecutionService(); // ManagementService managementService = processEngine.getManagementService(); // ProcessInstance processInstance = executionService.startProcessInstanceByKey("TimerEventTest"); // // String executionId = processInstance.findActiveExecutionIn("guardedWait").getId(); // // executionService.signalExecutionById(executionId, "go on"); // // processInstance = executionService.findProcessInstanceById(processInstance.getId()); // // assertTrue(processInstance.isActive("next step")); // // List<Job> jobs = managementService.createJobQuery() // .processInstanceId(processInstance.getId()) // .list(); // // assertEquals(new ArrayList<Job>(), new ArrayList<Job>(jobs)); // } }
发表评论
-
BigDecimal实现double精度计算
2014-01-07 16:08 1128java中的float 和double类型会发生精度丢失,为了 ... -
could not read column value from result set: NAME5_1_; 流已被关闭
2013-10-11 15:53 2141最近做流程项目数据库是oracle,获取流程处理人时候出现下面 ... -
Dialect does not support identity key generation
2013-10-10 12:01 2992链接网址:http://kevin12.i ... -
struts2文件下载文件中文名称乱码解决
2013-09-26 14:57 3346链接地址:http://kevin12.iteye.com/b ... -
java 导出excel到客户端(本地)例子 用poi和servlet实现的
2013-08-22 16:05 5688最近做java的web项目,用到了excel导出到客户端(本地 ... -
jbpm4 timer 定时器配置
2013-08-14 11:20 1565jbpm的定时器支持嵌入到状态节点(State),任务节点(T ... -
jbpm4.4基础知识
2013-08-09 11:24 1318来源:http://blog.163.com/hu ... -
jbpm4会签的学习
2013-08-05 18:01 1083会签,又称会审,也就 ... -
java中的HashSet
2013-08-01 17:48 1350HashSet集合 :不允许有重复的元素并且HashSet中元 ... -
java 中的NaN 和Infinity
2013-07-12 17:58 2920NaN是Not a Number的缩写,即不是一个数字。它不等 ... -
简单的 java 格式化数字用法
2013-07-11 18:42 1587有些时候将后台的数据显示到前台界面上要有一定的格式,比如,保留 ... -
javax.el.ELException: expression factory class not found
2013-06-27 21:43 2437jbpm4web项目部署流程时候出错: 信息: error ... -
<Context path="/files" docBase="D:\upload"></Context>
2013-06-18 11:36 5897发布到tomcat中的项目有 ... -
could not read column value from result set: DBID_; Column 'DBID_' not found.
2013-03-18 12:58 2201最近做项目,将原来项目中关于jbpm4(流程方面)的功能移到一 ... -
java中的时间排序易错点
2013-03-12 11:42 1166最近做流程项目时候发现,流程日志显示的问题: ... -
jbpm4条件节点表达式的解析
2013-03-07 16:31 1962说明:最近做jbpm4流程项目时,在条件节点中用到表达式了,流 ... -
java解析表达式
2013-03-07 16:21 2033说明:最近做jbpm4流程项目时,在条件节点中用到表达式了,流 ... -
org.hibernate.exception.ConstraintViolationException: could not delete: [org.jbp
2013-02-28 11:18 1988用jbpm4做流程时候将sqlserver数据库改为mysql ... -
mysql数据库遇到:org.hibernate.MappingException: No Dialect mapping for JDBC type: -1
2013-02-26 17:31 1696在做web项目时,用到了mysql数据库和ssh架构,登录系统 ...
相关推荐
13. **org.jbpm.pvm.internal.job**: 包含对job、message和timer的实现,提供定时器服务,允许在特定时间或条件触发流程操作。 14. **org.jbpm.pvm.internal.jobexecutor**: 提供任务执行器,包括`...
此表管理定时任务信息,如定时器(Timer)。这是实现流程中定时触发事件的关键机制。 #### 18. `JBPM4_PROPERTY` `JBPM4_PROPERTY`表用于存储系统级别的配置信息,如Hibernate设置等。这些信息对于系统的正常运行...
### JBPM4 常用表结构及其说明 ...通过上述表格和说明,我们可以清楚地了解JBPM4如何管理和记录流程的各种状态和事件。这些信息对于开发者来说非常重要,可以帮助他们更好地理解和维护基于JBPM4构建的应用程序。
JBPM4_JOB 表存放的是 Timer 的定义。这张表记录了定时器的信息,包括定时器的名称、类型和触发时间。 JBPM4 的 17 张表构成了一个完整的流程管理系统,负责管理和执行业务流程。了解这些表的作用和关系是使用 JBPM...
2.8 JBPM_TIMER:流程定时器表 19 2.9 JBPM_TOKENVARIABLEMAP:流程TOKEN变量MAP表 19 2.10 JBPM_MODULEINSTANCE:流程模块实例表 20 2.11 JBPM_BYTEARRAY:文件模块形式的流程变量实例表 20 2.12 JBPM_...
深入jPDL和jBPM Service API 201 10.1 timer(定时器)能为您做什么 201 10.1.1 持续时间表达式 202 10.1.2 工作日历 202 10.1.3 定时转移 204 10.1.4 定时事件 205 10.1.5 工作日历定时 207 10.1.6 定时重复 208 ...
3.3.18 create-timer(创建定时器) 25 3.3.19 cancel-timer(取消定时器) 26 3.3.20 task(任务) 26 3.3.21 swimlane(泳道) 27 3.3.22 assignment(委派) 28 3.3.23 controller(控制器) 29 3.3.24 process-state 子流程 ...
- **JBPM_TIMER**:计时表,记录流程中的定时器信息。 - **JBPM_POOLEDACTOR**:汇集参与者表,记录参与者的信息。 - **JBPM_RUNTIMEACTION**:运行中行为表,记录运行中的操作信息。 - **JBPM_LOG**:流程日志...
#### 2.8 JBPM_TIMER 定义了流程中的定时器,用于触发特定时间点的动作。 #### 2.9 JBPM_TOKENVARIABLEMAP 存储流程令牌与变量之间的映射关系,反映流程实例中的变量状态。 #### 2.10 JBPM_MODULEINSTANCE 记录...
- **JBPM_EVENT**: 描述流程中的事件,如定时器、信号等。 - **JBPM_EXCEPTIONHANDLER**: 存储异常处理规则,当流程运行中遇到错误时,按照这些规则进行处理。 - **JBPM_ID_GROUP, JBPM_ID_MEMBERSHIP, JBPM_ID_...
5. **ejb服务与定时器**:jbpm-services-ejb-timer-7.3.0.Final.jar和jbpm-services-ejb-client-7.3.0.Final.jar提供了基于EJB的定时服务和客户端接口,使得jBPM能够集成到Java EE环境中,实现定时触发流程事件或...
此外,JPDL还支持其他元素,如sub-process(子流程)、event(事件)和timer(定时器)等,它们为构建复杂流程提供了灵活性。 四、进阶应用 随着对JPDL的深入理解,开发者可以利用JBPM提供的API和工具进行更复杂的...
7. **Job and Timer Tables**(作业和定时器表):用于调度和管理异步任务和定时触发的流程事件。 使用这些脚本时,开发者通常会根据自己的数据库环境(如MySQL、Oracle、PostgreSQL等)进行适当的调整,确保兼容性...
- **Timer定时器** - **持续时间表达式**:定义定时器触发的周期或条件,支持复杂的表达式设置。 - **工作日历**:用于指定定时器工作的日期范围,有助于避免非工作日的误触发。 - **定时器流向**:定义定时器...