作者: wf_7758520 ( name: wangfeng, email: wf_7758520 @163.com , blog:http:// wf_7758520 .iteye.com )
这次就说说jBPM的业务日历。
业务日历是关于业务时间的,并且被用于为任务和定时器计算预期的时间。 业务日历能够通过对一个期限和日期进行增加来计算日期。
这是官方的定义,现在看不明白没关系,我会慢慢解释。我们先看看业务日历的语法:
xml 代码
- <quantity>[business]<unit>
<quantity></quantity><unit></unit>
<quantity></quantity>是一个文本块,它是可以使用Double.parseDouble(quantity)所解析的,也就是说是一个数字;<unit></unit>是{second,seconds,minute,minutes,hour,hours,day,days,week,weeks,month,months,year,years}之一;加上可选的business指示,意味着对于这个期限只有业务时间才应被考虑,如果没有business指示,期限将作为一个绝对的时间段被解释。也就是说加了business的按业务时间算,没加的按绝对时间算。
什么叫业务时间,什么叫绝对时间?我就用jbpm的例子说明。文件org/jbpm/calendar/jbpm.business.calendar.properties指定了什么是业务时间,该配置文件可以被定制并且修改后的拷贝可被放在classpath根。 下面是业务时间规范的例子,它在jbpm.business.calendar.properties中被默认配置。
xml 代码
- hour.format=HH:mm
- #weekday ::= [<daypart> [& <daypart>]*]
- #daypart ::= <start-hour>-<to-hour>
- #start-hour and to-hour must be in the hour.format
- #dayparts have to be ordered
- weekday.monday= 9:00-12:00 & 12:30-17:00
- weekday.thuesday= 9:00-12:00 & 12:30-17:00
- weekday.wednesday= 9:00-12:00 & 12:30-17:00
- weekday.thursday= 9:00-12:00 & 12:30-17:00
- weekday.friday= 9:00-12:00 & 12:30-17:00
- weekdayweekday.saturday=
- weekday.sunday=
-
- day.format=dd/MM/yyyy
- # holiday syntax: <holiday>
- # holiday period syntax: <start-day>-<end-day>
- # below are the belgian official holidays
- holiday.1= 01/01/2005 # nieuwjaar
- holiday.2= 27/3/2005 # pasen
- holiday.3= 28/3/2005 # paasmaandag
- holiday.4= 1/5/2005 # feest van de arbeid
- holiday.5= 5/5/2005 # hemelvaart
- holiday.6= 15/5/2005 # pinksteren
- holiday.7= 16/5/2005 # pinkstermaandag
- holiday.8= 21/7/2005 # my birthday
- holiday.9= 15/8/2005 # moederkesdag
- holiday.10= 1/11/2005 # allerheiligen
- holiday.11= 11/11/2005 # wapenstilstand
- holiday.12= 25/12/2005 # kerstmis
-
-
- business.day.expressed.in.hours= 8
- business.week.expressed.in.hours= 40
- business.month.expressed.in.business.days= 21
- business.year.expressed.in.business.days= 220
-
对于上面定义通俗的理解就是它归定了从星期一到星期五的9:00-12:00 & 12:30-17:00 这段时间为上班时间也就是业务时间,星期六和星期日没有定义也就是放假的时间,再往下就是定义了12个节假日,最后是一些工作时长的统计如一天8小时,一个星期40小时等。
从官方定义至少可以看出jbpm要与定时器结合使用,下面我们定义一个定时器:
xml 代码
- <state name='catch crooks'>
- <timer name='reminder' duedate='3 business day'
- repeat='2 business day'
- transition='time-out-transition' >
- <action class='the-remainder-action-class-name' />
- timer>
- <state>
这里的定时器(timer)的名字是reminder,它的duedate定义的是3 business day,repeat定义的是2 business day也就是说从定时器启动开始在3个业务日的时间后每隔两个业务日执行一次action的方法,直到timer结束。现在就可以来区别业务时间和绝对时间了,假设我是在星期五的早上10点启动了这个timer,那它第一次执行action的方法是在什么时候呢?因为这里的定义是有加上business的所以要结束工作日历的定义来算了。工作日历中定义了星期六和星期天是不上班的(没有定义),所以在计算时间时就跳过,要到星期三到早上10点(这时只是执行完duedate的时间也就是第一次触发action的时间),到星期五早上10点第二次触发action,到下个星期二早上第二次触发action(因为星期六和星期日没定义不是业务时间),以此类推。如果在timer定义时没有加上business的话,就以绝对时间进行计算,也就是在星期一的10点第一次触发action,到星期三10点第二次触发action,以此类推。
现在说完了工作日历,我估计还会有人不明白,那下一节就对工作日历的代码进行分析。
分享到:
相关推荐
jBPM(Java Business Process Management)是一个开源的工作流和业务流程管理系统,用于处理复杂的业务流程。本教程将深入探讨jBMP的核心概念,包括流程定义语言、业务日历以及流程建模,帮助初学者快速入门。 一、...
2. **org.jbpm.pvm.internal.builder**: 包含用于构建模型的类,如活动、行为、事件、事件处理器、流程定义、变量和任务等。这些类是流程定义的基础,它们构建了流程实例的结构和逻辑。 3. **org.jbpm.pvm.internal...
jBPM 3.1 是一个开放源代码的工作流引擎,由 JBoss 提供支持,旨在简化业务流程管理(BPM)任务。它提供了一整套工具和服务来支持流程的设计、部署、执行和监控。 #### 二、概述 **1.1. 概述** jBPM 3.1 是一个...
JBPM是一个开源的工作流管理系统,主要使用Java开发,持久层采用Hibernate实现,确保了良好的数据库兼容性和跨平台性。本文旨在详细介绍JBPM的基本概念及其核心功能,帮助读者快速掌握JBPM的工作流程。 #### 一、...
工作执行器则是负责执行具体任务的组件,它根据流程定义中的规则和条件,调度并执行任务,支持任务的委托、暂停、恢复和终止。 #### 正式开始与项目目录 在开始使用JBPM之前,需要下载包含jPDL3.12和jPDL流程设计...
### JBPM 4.4 工作流开发指南知识点总结 #### 一、概述 - **JBPM**:JBPM 是一个开源的工作流管理系统,它使用纯 Java 编写,可以方便地集成到 Java 应用中。JBPM 的设计目标是提供一个简单而强大的流程管理解决...
`org.jbpm.pvm.internal.jobexecutor`提供了任务执行器,包括Servlet和线程池,以及各种命令和处理器,确保作业、消息和定时器的有效调度和执行。 `org.jbpm.pvm.internal.lob`包处理流程发布时的大型对象(LOB),...
#### 六、日历与调度(Scheduler) JBPM的`Scheduler`功能允许用户基于时间和日期对流程执行进行计划和控制,无论是C/S架构还是Web应用,都能够灵活地利用`Scheduler`功能来满足不同场景的需求。 #### 七、异步...
- **核心概念**:讲解了流程虚拟机的基本原理和工作方式,是理解后续章节的基础。 - **活动API**:提供了创建和管理活动所需的API接口,包括活动的创建、查询、更新等操作。 - **事件监听API**:支持在关键节点注册...
- **C/S 程序上的应用**: 在客户端/服务器架构中使用日历来调度任务。 - **Web 上的应用**: 在 Web 应用中使用日历来管理任务。 - **时间分类**: 不同类型的时间安排,如一次性任务、周期性任务等。 #### 七、异步...
JBoss jBPM(Java Business Process Management)是一个开源的工作流引擎,主要用于实现业务流程管理和任务协调。jPDL(jBPM Process Definition Language)是jBPM早期版本中使用的一种流程定义语言,它提供了一种...
5 章 任务调度............................................133 5.1 原理.........................................................133 5.2 业务日历.................................................134 5.3 ...
5 章 任务调度............................................133 5.1 原理.........................................................133 5.2 业务日历.................................................134 5.3 ...
第一章:介绍 第二章 开始 第三章. 讲座 ...第九章 任务管理 第十章 调度程序 第11章 业务日历 第12章. 记录 第13章. jBPM 流程定义语言 (JPDL) 第14章 安全 第15章. TDD适合工作流 第16章 可插入架构
- **7.6.3.5 工作日历**:根据预先设定的工作日历调整流程执行计划,避免在非工作时间执行任务。 - **7.7 基础组件层**:这一层主要包括数据库连接、缓存机制等底层技术组件,为上层服务提供技术支持。 #### ...
工作日历用于管理假期和工作时间。 - **基础组件层**:提供底层的技术支持和服务,如消息队列用于异步通信、缓存管理用于提高性能、日志记录用于追踪错误和调试。 #### 结语 通过对微内核工作流引擎体系架构的深入...