作者: wf_7758520 ( name: wangfeng, email: wf_7758520 @163.com , blog:http:// wf_7758520 .iteye.com )
jBPM通过定时器(timer)实现日程调度。在node中加入timer元素,即可实现基于定时器的节点执行监控。
//运用action的timer的例子<state name="catch crooks"></state>
- <state name='catch crooks'>
- <timer name='reminder' duedate='3 business hours' repeat='10 business minutes'
- transition='time-out-transition' >
- <action class='the-remainder-action-class-name' />
- timer>
- state>
//运用script的timer的例子
xml 代码
- <state name='catch crooks'>
- <timer name='reminder' duedate='3 business hours' repeat='10 business minutes'
- transition='time-out-transition' >
- <script>System.out.println(new Date())script>
- timer>
- state>
在上例中,一旦流程实例运行进入state 'catch crooks',定时器reminder即被创建。该定时器在3个工作小时到期,到期后马上执行action类中的Java代码,然后实施time-out-transition(或script打印时间)迁移。
通过在事件的action中加入create-timer和cancel-timer动作,可以分别实现事件对定时器的创建和取消。
定时器timer可以被用于decision fork join node process-state state super-state task-node,可以设置开始时间duedate和频率repeat,定时器动作可以是所支持的任何动作元素,如action或script,会运行我们设置的商务动作。定时器通过动作创建和取消,有两个动作元素create-timer和cancel-timer。事实上,默认的定时器元素只是create-timer动作依附于node-enter事件、cancel-timer动作依附于node-leave事件的一个简略表示。
timer还有一个很重要的属性cancel-event,这个是timer和task结合时使用的,任务定时器的cancel-event可以被定制。默认情况下,当任务被结束时(=完成)任务上的定时器将被取消,这是通过在定时器上使用cancel-event属性,流程开发者可以定制诸如task-assign或task-start。cancel-event支持多个事件,通过在属性中指定一个用逗号分割的列表,可以组合cancel-event的类型。
另注: 运用timer要先启动scheduler,scheduler的启动代码如下
- public static void initSchedular() {// 设置Schedular的属性
- scheduler = new Scheduler();
- int interval = 5000;
- scheduler.setInterval(interval);
- int historyMaxSize = 0;
- scheduler.setHistoryMaxSize(historyMaxSize);
- scheduler.start();
- }
- public static void destroy() {
- scheduler.stop();
- }
但在实际的项目中不会这样用,如果是web项目则只要在web.xml中配置JbpmThreadsServlet,这样在项目启动后会自动开启scheduler。
JbpmThreadsServlet配置如下:
- <servlet>
- <servlet-name>JbpmThreadsServletservlet-name>
- <servlet-class>org.jbpm.web.JbpmThreadsServletservlet-class>
- <load-on-startup>1load-on-startup>
- servlet>
- <servlet-mapping>
- <servlet-name>JbpmThreadsServletservlet-name>
- <url-pattern>/threadsurl-pattern>
- servlet-mapping>
\\下一节介绍工作日历