<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>枫行天下</title>
    <description></description>
    <link>http://wf-7758520.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>关于jbpm的任务调度和工作日历（2）</title>
        <author>wf_7758520</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://wf-7758520.javaeye.com">wf_7758520</a>&nbsp;
          链接：<a href="http://wf-7758520.javaeye.com/blog/84985" style="color:red;">http://wf-7758520.javaeye.com/blog/84985</a>&nbsp;
          发表时间: 2007年05月31日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <font size="4">
<p><font size="4" face="Arial">作者：&nbsp;wf_7758520 （ name: wangfeng， email:&nbsp;wf_7758520 @163.com ， blog:http://&nbsp;wf_7758520 .javaeye.com ）</font></p>
</font>
<p><font size="4">这次就说说jBPM的业务日历。</font></p>
<p><font size="4">业务日历是关于业务时间的，并且被用于为任务和定时器计算预期的时间。 业务日历能够通过对一个期限和日期进行增加来计算日期。</font></p>
<p><font size="4">这是官方的定义，现在看不明白没关系，我会慢慢解释。我们先看看业务日历的语法：</font> </p>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">quantity</span><span class="tag">&gt;</span><span>[business]</span><span class="tag">&lt;</span><span class="tag-name">unit</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p><font size="4"><quantity></quantity><unit></unit></font></p>
<p><font size="4"><quantity></quantity>是一个文本块，它是可以使用Double.parseDouble(quantity)所解析的，也就是说是一个数字；<unit></unit>是｛second，seconds，minute，minutes，hour，hours，day，days，week，weeks，month，months，year，years｝之一；加上可选的business指示，意味着对于这个期限只有业务时间才应被考虑，如果没有business指示，期限将作为一个绝对的时间段被解释。也就是说加了business的按业务时间算，没加的按绝对时间算。</font></p>
<p><font size="4">什么叫业务时间，什么叫绝对时间？我就用jbpm的例子说明。文件org/jbpm/calendar/jbpm.business.calendar.properties指定了什么是业务时间，该配置文件可以被定制并且修改后的拷贝可被放在classpath根。　　　　　　　　　　　　　　　　　下面是业务时间规范的例子，它在jbpm.business.calendar.properties中被默认配置。</font></p>
<div class="code_title"><font size="4">xml 代码</font></div>
<div class="dp-highlighter">
<div class="bar"><font size="4"></font></div>
<ol class="dp-xml">
    <li class="alt"><span><font size="4"><span class="attribute">hour.format</span><span>=</span><span class="attribute-value">HH</span><span>:mm &nbsp;&nbsp;</span></font></span> </li>
    <li class=""><font size="4"><span>#weekday&nbsp;</span><span class="attribute">::</span><span>=&nbsp;[</span><span class="tag">&lt;</span><span class="tag-name">daypart</span><span class="tag">&gt;</span><span>&nbsp;[&amp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">daypart</span><span class="tag">&gt;</span><span>]*] &nbsp;&nbsp;</span></font> </li>
    <li class="alt"><font size="4"><span>#daypart&nbsp;</span><span class="attribute">::</span><span>=&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">start-hour</span><span class="tag">&gt;</span><span>-</span><span class="tag">&lt;</span><span class="tag-name">to-hour</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></font> </li>
    <li class=""><span><font size="4">#start-hour&nbsp;and&nbsp;to-hour&nbsp;must&nbsp;be&nbsp;in&nbsp;the&nbsp;hour.format &nbsp;&nbsp;</font></span> </li>
    <li class="alt"><span><font size="4">#dayparts&nbsp;have&nbsp;to&nbsp;be&nbsp;ordered &nbsp;&nbsp;</font></span> </li>
    <li class=""><span></span><font size="4"><span class="attribute">weekday.monday</span><span>=&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute-value">9</span><span>:00-12:00&nbsp;&amp;&nbsp;12:30-17:00 &nbsp;&nbsp;</span></font> </li>
    <li class="alt"><span></span><font size="4"><span class="attribute">weekday.thuesday</span><span>=&nbsp;&nbsp;</span><span class="attribute-value">9</span><span>:00-12:00&nbsp;&amp;&nbsp;12:30-17:00 &nbsp;&nbsp;</span></font> </li>
    <li class=""><span></span><font size="4"><span class="attribute">weekday.wednesday</span><span>=&nbsp;</span><span class="attribute-value">9</span><span>:00-12:00&nbsp;&amp;&nbsp;12:30-17:00 &nbsp;&nbsp;</span></font> </li>
    <li class="alt"><span></span><font size="4"><span class="attribute">weekday.thursday</span><span>=&nbsp;&nbsp;</span><span class="attribute-value">9</span><span>:00-12:00&nbsp;&amp;&nbsp;12:30-17:00 &nbsp;&nbsp;</span></font> </li>
    <li class=""><span></span><font size="4"><span class="attribute">weekday.friday</span><span>=&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute-value">9</span><span>:00-12:00&nbsp;&amp;&nbsp;12:30-17:00 &nbsp;&nbsp;</span></font> </li>
    <li class="alt"><span></span><font size="4"><span class="attribute-value">weekday</span><span class="attribute">weekday.saturday</span><span>= &nbsp;&nbsp;</span></font> </li>
    <li class=""><font size="4"><span>weekday</span><span class="attribute">.sunday</span><span>= &nbsp;&nbsp;</span></font> </li>
    <li class="alt"><span><font size="4">&nbsp;&nbsp;</font></span> </li>
    <li class=""><font size="4"><span>day</span><span class="attribute">.format</span><span>=</span><span class="attribute-value">dd</span><span>/MM/yyyy &nbsp;&nbsp;</span></font> </li>
    <li class="alt"><font size="4"><span>#&nbsp;holiday&nbsp;syntax:&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">holiday</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></font> </li>
    <li class=""><font size="4"><span>#&nbsp;holiday&nbsp;period&nbsp;syntax:&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">start-day</span><span class="tag">&gt;</span><span>-</span><span class="tag">&lt;</span><span class="tag-name">end-day</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></font> </li>
    <li class="alt"><span><font size="4">#&nbsp;below&nbsp;are&nbsp;the&nbsp;belgian&nbsp;official&nbsp;holidays &nbsp;&nbsp;</font></span> </li>
    <li class=""><span></span><font size="4"><span class="attribute">holiday.1</span><span>=&nbsp;&nbsp;</span><span class="attribute-value">01</span><span>/01/2005&nbsp;#&nbsp;nieuwjaar &nbsp;&nbsp;</span></font> </li>
    <li class="alt"><span></span><font size="4"><span class="attribute">holiday.2</span><span>=&nbsp;&nbsp;</span><span class="attribute-value">27</span><span>/3/2005&nbsp;&nbsp;#&nbsp;pasen&nbsp; &nbsp;&nbsp;</span></font> </li>
    <li class=""><span></span><font size="4"><span class="attribute">holiday.3</span><span>=&nbsp;&nbsp;</span><span class="attribute-value">28</span><span>/3/2005&nbsp;&nbsp;#&nbsp;paasmaandag&nbsp; &nbsp;&nbsp;</span></font> </li>
    <li class="alt"><span></span><font size="4"><span class="attribute">holiday.4</span><span>=&nbsp;&nbsp;</span><span class="attribute-value">1</span><span>/5/2005&nbsp;&nbsp;&nbsp;#&nbsp;feest&nbsp;van&nbsp;de&nbsp;arbeid &nbsp;&nbsp;</span></font> </li>
    <li class=""><span></span><font size="4"><span class="attribute">holiday.5</span><span>=&nbsp;&nbsp;5/5/2005&nbsp;&nbsp;&nbsp;#&nbsp;hemelvaart&nbsp; &nbsp;&nbsp;</span></font> </li>
    <li class="alt"><span></span><font size="4"><span class="attribute">holiday.6</span><span>=&nbsp;&nbsp;</span><span class="attribute-value">15</span><span>/5/2005&nbsp;&nbsp;#&nbsp;pinksteren&nbsp; &nbsp;&nbsp;</span></font> </li>
    <li class=""><span></span><font size="4"><span class="attribute">holiday.7</span><span>=&nbsp;&nbsp;</span><span class="attribute-value">16</span><span>/5/2005&nbsp;&nbsp;#&nbsp;pinkstermaandag&nbsp; &nbsp;&nbsp;</span></font> </li>
    <li class="alt"><span></span><font size="4"><span class="attribute">holiday.8</span><span>=&nbsp;&nbsp;</span><span class="attribute-value">21</span><span>/7/2005&nbsp;&nbsp;#&nbsp;my&nbsp;birthday&nbsp; &nbsp;&nbsp;</span></font> </li>
    <li class=""><span></span><font size="4"><span class="attribute">holiday.9</span><span>=&nbsp;&nbsp;</span><span class="attribute-value">15</span><span>/8/2005&nbsp;&nbsp;#&nbsp;moederkesdag&nbsp; &nbsp;&nbsp;</span></font> </li>
    <li class="alt"><span></span><font size="4"><span class="attribute">holiday.10</span><span>=&nbsp;1/11/2005&nbsp;&nbsp;#&nbsp;allerheiligen&nbsp; &nbsp;&nbsp;</span></font> </li>
    <li class=""><span></span><font size="4"><span class="attribute">holiday.11</span><span>=&nbsp;11/11/2005&nbsp;#&nbsp;wapenstilstand&nbsp; &nbsp;&nbsp;</span></font> </li>
    <li class="alt"><span></span><font size="4"><span class="attribute">holiday.12</span><span>=&nbsp;</span><span class="attribute-value">25</span><span>/12/2005&nbsp;#&nbsp;kerstmis&nbsp; &nbsp;&nbsp;</span></font> </li>
    <li class=""><span><font size="4">&nbsp;&nbsp;</font></span> </li>
    <li class="alt"><span><font size="4">&nbsp;&nbsp;</font></span> </li>
    <li class=""><span></span><font size="4"><span class="attribute">business.day.expressed.in.hours</span><span>=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute-value">8</span><span>&nbsp;&nbsp;</span></font> </li>
    <li class="alt"><span></span><font size="4"><span class="attribute">business.week.expressed.in.hours</span><span>=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute-value">40</span><span>&nbsp;&nbsp;</span></font> </li>
    <li class=""><span></span><font size="4"><span class="attribute">business.month.expressed.in.business.days</span><span>=&nbsp;&nbsp;</span><span class="attribute-value">21</span><span>&nbsp;&nbsp;</span></font> </li>
    <li class="alt"><span></span><font size="4"><span class="attribute">business.year.expressed.in.business.days</span><span>=&nbsp;&nbsp;</span><span class="attribute-value">220</span><span>&nbsp;&nbsp;</span></font> </li>
    <li class=""><span><font size="4">&nbsp;&nbsp;</font></span> </li>
</ol>
</div>
<p><font size="4">对于上面定义通俗的理解就是它归定了从星期一到星期五的<span class="attribute-value">9</span><span>:00-12:00&nbsp;&amp;&nbsp;12:30-17:00&nbsp;&nbsp;&nbsp;这段时间为上班时间也就是业务时间，星期六和星期日没有定义也就是放假的时间，再往下就是定义了12个节假日，最后是一些工作时长的统计如一天8小时，一个星期40小时等。</span></font></p>
<p><font size="4">从官方定义至少可以看出jbpm要与定时器结合使用，下面我们定义一个定时器：</font></p>
<div class="code_title"><font size="4">xml 代码</font></div>
<div class="dp-highlighter">
<div class="bar"><font size="4"></font></div>
<ol class="dp-xml">
    <li class="alt"><span><font size="4"><span class="tag">&lt;</span><span class="tag-name">state</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">'catch&nbsp;crooks'</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></font></span> </li>
    <li class=""><font size="4"><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">timer</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">'reminder'</span><span>&nbsp;</span><span class="attribute">duedate</span><span>=</span><span class="attribute-value">'3&nbsp;business&nbsp;day'</span><span>&nbsp;</span></font> </li>
    <li class=""><font size="4"><span>　　　　　　</span><span class="attribute">repeat</span><span>=</span><span class="attribute-value">'2&nbsp;business&nbsp;day'</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></font> </li>
    <li class="alt"><font size="4"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">transition</span><span>=</span><span class="attribute-value">'time-out-transition'</span><span>&nbsp;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></font> </li>
    <li class=""><font size="4"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">action</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">'the-remainder-action-class-name'</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></font> </li>
    <li class="alt"><font size="4"><span>&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">timer</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></span></font> </li>
    <li class=""><span></span><font size="4"><span class="tag">&lt;</span><span class="tag-name">state</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;</span></font> </li>
</ol>
</div>
<p><font size="4">这里的定时器（timer）的名字是reminder，它的duedate定义的是3 business day,<span class="attribute">repeat定义的是</span><span class="attribute-value">2&nbsp;business&nbsp;day也就是说从定时器启动开始在3个业务日的时间后每隔两个业务日执行一次action的方法，直到timer结束。现在就可以来区别业务时间和绝对时间了，假设我是在星期五的早上10点启动了这个timer,那它第一次执行action的方法是在什么时候呢？因为这里的定义是有加上business的所以要结束工作日历的定义来算了。工作日历中定义了星期六和星期天是不上班的（没有定义），所以在计算时间时就跳过，要到星期三到早上10点（这时只是执行完duedate的时间也就是第一次触发action的时间），到星期五早上10点第二次触发action,到下个星期二早上第二次触发action(因为星期六和星期日没定义不是业务时间)，以此类推。如果在timer定义时没有加上business的话，就以绝对时间进行计算，也就是在星期一的10点第一次触发action,到星期三10点第二次触发action，以此类推。</span></font></p>
<p><font size="4"><span class="attribute-value">　　　现在说完了工作日历，我估计还会有人不明白，那下一节就对工作日历的代码进行分析。</span><span class="attribute-value">　</span></font></p>
<p>&nbsp;</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://wf-7758520.javaeye.com/blog/84985#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 31 May 2007 09:43:33 +0800</pubDate>
        <link>http://wf-7758520.javaeye.com/blog/84985</link>
        <guid>http://wf-7758520.javaeye.com/blog/84985</guid>
      </item>
      <item>
        <title>关于jbpm的任务调度和工作日历（1）</title>
        <author>wf_7758520</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://wf-7758520.javaeye.com">wf_7758520</a>&nbsp;
          链接：<a href="http://wf-7758520.javaeye.com/blog/83369" style="color:red;">http://wf-7758520.javaeye.com/blog/83369</a>&nbsp;
          发表时间: 2007年05月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font size="4" face="Arial">作者：&nbsp;wf_7758520 （ name: wangfeng， email:&nbsp;wf_7758520 @163.com ， blog:http://&nbsp;wf_7758520 .javaeye.com ）</font></p>
<p><font size="4" face="Arial">jBPM通过定时器（timer）实现日程调度。在node中加入timer元素，即可实现基于定时器的节点执行监控。</font></p>
<p><font size="4" face="Arial">//运用action的timer的例子</font><font size="4" face="Arial"><state name="catch crooks"></state></font>&nbsp;</p>
<span><span>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">state</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">'catch&nbsp;crooks'</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">timer</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">'reminder'</span><span>&nbsp;</span><span class="attribute">duedate</span><span>=</span><span class="attribute-value">'3&nbsp;business&nbsp;hours'</span><span>&nbsp;</span><span class="attribute">repeat</span><span>=</span><span class="attribute-value">'10&nbsp;business&nbsp;minutes'</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">transition</span><span>=</span><span class="attribute-value">'time-out-transition'</span><span>&nbsp;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">action</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">'the-remainder-action-class-name'</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">timer</span><span class="tag">&gt;</span><span>&nbsp;&nbsp; &nbsp;&nbsp;</span> </span></li>
    <li class=""><span></span><span class="tag"><span class="tag-name">state</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
</ol>
</div>
<p>&nbsp;<font face="Arial"><font size="4" face="Arial">//运用script的timer的例子</font></font></p>
<p><font face="Arial"><font size="4"><span>xml 代码</span></font></font></p>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">state</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">'catch&nbsp;crooks'</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">timer</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">'reminder'</span><span>&nbsp;</span><span class="attribute">duedate</span><span>=</span><span class="attribute-value">'3&nbsp;business&nbsp;hours'</span><span>&nbsp;</span><span class="attribute">repeat</span><span>=</span><span class="attribute-value">'10&nbsp;business&nbsp;minutes'</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">transition</span><span>=</span><span class="attribute-value">'time-out-transition'</span><span>&nbsp;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">script</span><span class="tag">&gt;</span><span>System.out.println(new&nbsp;Date())</span><span class="tag"><span class="tag-name">script</span><span class="tag">&gt;</span><span>&nbsp; &nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">timer</span><span class="tag">&gt;</span><span>&nbsp;&nbsp; &nbsp;&nbsp;</span> </span></li>
    <li class=""><span></span><span class="tag"><span class="tag-name">state</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
</ol>
</div>
<p><font size="4">在上例中，一旦流程实例运行进入state 'catch crooks'，定时器reminder即被创建。该定时器在3个工作小时到期，到期后马上执行action类中的Java代码，然后实施time-out-transition(或script打印时间)迁移。<br />
通过在事件的action中加入create-timer和cancel-timer动作，可以分别实现事件对定时器的创建和取消。<br />
定时器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事件的一个简略表示。<br />
timer还有一个很重要的属性cancel-event，这个是timer和task结合时使用的，任务定时器的cancel-event可以被定制。默认情况下，当任务被结束时（=完成）任务上的定时器将被取消，这是通过在定时器上使用cancel-event属性，流程开发者可以定制诸如task-assign或task-start。cancel-event支持多个事件，通过在属性中指定一个用逗号分割的列表，可以组合cancel-event的类型。</font></p>
<p><font size="4">另注： 运用timer要先启动scheduler,scheduler的启动代码如下</font></p>
<font size="4">
<div class="code_title">
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;initSchedular()&nbsp;{</span><span class="comment">//&nbsp;设置Schedular的属性 </span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scheduler&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Scheduler(); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">int</span><span>&nbsp;interval&nbsp;=&nbsp;</span><span class="number">5000</span><span>; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scheduler.setInterval(interval); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">int</span><span>&nbsp;historyMaxSize&nbsp;=&nbsp;</span><span class="number">0</span><span>; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scheduler.setHistoryMaxSize(historyMaxSize); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scheduler.start(); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;destroy()&nbsp;{&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scheduler.stop(); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
</ol>
</div>
&nbsp;</div>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"><font size="4"></font></span></p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"><font size="4"></font></span></p>
<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"><font size="4">但在实际的项目中不会这样用，如果是web项目则只要在web.xml中配置JbpmThreadsServlet，这样在项目启动后会自动开启scheduler。</font></span>
<p>&nbsp;</p>
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"><font size="4">JbpmThreadsServlet配置如下：</font></span><span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"><font face="Arial"><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></font></span></p>
<div class="code_title"><span><span>xml 代码</span></span></div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="comments"><!-- JbpmThreadsServlet --></span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span></span><span class="tag">&lt;</span><span class="tag-name">servlet</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="tag">&lt;</span><span class="tag-name">servlet-name</span><span class="tag">&gt;</span><span>JbpmThreadsServlet</span><span class="tag"><span class="tag-name">servlet-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span></span><span class="tag">&lt;</span><span class="tag-name">servlet-class</span><span class="tag">&gt;</span><span>org.jbpm.web.JbpmThreadsServlet</span><span class="tag"><span class="tag-name">servlet-class</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span></span><span class="tag">&lt;</span><span class="tag-name">load-on-startup</span><span class="tag">&gt;</span><span>1</span><span class="tag"><span class="tag-name">load-on-startup</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span></span><span class="tag"><span class="tag-name">servlet</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span></span><span class="tag">&lt;</span><span class="tag-name">servlet-mapping</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="tag">&lt;</span><span class="tag-name">servlet-name</span><span class="tag">&gt;</span><span>JbpmThreadsServlet</span><span class="tag"><span class="tag-name">servlet-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span></span><span class="tag">&lt;</span><span class="tag-name">url-pattern</span><span class="tag">&gt;</span><span>/threads</span><span class="tag"><span class="tag-name">url-pattern</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span></span><span class="tag"><span class="tag-name">servlet-mapping</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;</span> </span></li>
</ol>
</div>
<p class="MsoNormal">&nbsp;&nbsp; <br />
</p>
<p><font size="4">\\下一节介绍工作日历<br />
</font></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
</font></span></span>
          <br/><br/>
          <span style="color:red;">
            <a href="http://wf-7758520.javaeye.com/blog/83369#comments" style="color:red;">已有 <strong>2</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 26 May 2007 16:49:02 +0800</pubDate>
        <link>http://wf-7758520.javaeye.com/blog/83369</link>
        <guid>http://wf-7758520.javaeye.com/blog/83369</guid>
      </item>
      <item>
        <title>jsp处理图片</title>
        <author>wf_7758520</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://wf-7758520.javaeye.com">wf_7758520</a>&nbsp;
          链接：<a href="http://wf-7758520.javaeye.com/blog/80163" style="color:red;">http://wf-7758520.javaeye.com/blog/80163</a>&nbsp;
          发表时间: 2007年05月15日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font face="Arial">1、 简单控制图片width,height的例子</font></p>
<p><font face="Arial"><script language="javascript" type="text/javascript"></font></p>
<p><font face="Arial">function forBig(id)<br />
{<br />
var node = document.getElementById(id);<br />
var width = node.getAttribute("width");<br />
var height = node.getAttribute("height");<br />
node.setAttribute("width",width+20);<br />
node.setAttribute("height",height+20);<br />
}</font></p>
<p><font face="Arial">function forSmall(id)<br />
{ <br />
var node = document.getElementById(id);<br />
var width = node.getAttribute("width");<br />
var height = node.getAttribute("height");<br />
node.setAttribute("width",width-10);<br />
node.setAttribute("height",height-10);<br />
}<br />
</script><br />
</font></p>
<p><font face="Arial"><br />
</font></p>
<p><font face="Arial">简单控制图片width,height的例子//图片路径楼主把握一下<br />
&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot;&gt;</font></p>
<p><font face="Arial">function enlarge(id)<br />
{<br />
var node = document.getElementById(id);<br />
var width = node.getAttribute(&quot;width&quot;);<br />
var height = node.getAttribute(&quot;height&quot;);<br />
node.setAttribute(&quot;width&quot;,width+20);<br />
node.setAttribute(&quot;height&quot;,height+20);<br />
}</font></p>
<p><font face="Arial">function shrink(id)<br />
{ <br />
var node = document.getElementById(id);<br />
var width = node.getAttribute(&quot;width&quot;);<br />
var height = node.getAttribute(&quot;height&quot;);<br />
node.setAttribute(&quot;width&quot;,width-10);<br />
node.setAttribute(&quot;height&quot;,height-10);<br />
}<br />
&lt;/script&gt;<br />
&lt;/HEAD&gt;</font></p>
<p>－－－－－－－－－－－－－－－－－－－－－－－</p>
<p><font face="Arial">&lt;BODY&gt;<br />
&lt;button onclick=&quot;enlarge('image');return true;&quot;&gt;放大&lt;/button&gt;&lt;button onclick=&quot;shrink('image');return true;&quot;&gt;缩小&lt;/button&gt;&lt;br/&gt;&lt;br/&gt;<br />
&lt;img id=&quot;image&quot; src=&quot;./image/image1.gif&quot;&gt;&lt;!--//换成你的图片路径--&gt;<br />
&lt;/BODY&gt;<br />
&lt;/HTML&gt;</font></p>
<p><br />
</p>
<p>这样能勉强实现图片放大和缩小功能，但图片会失真。</p>
<p>还有一种就是显示不同的图片，来实现放大缩小的功能。就是点击放大按钮后就换一张同样内容的大图，点击缩小按钮换上一张同样内容的小图。这样实现不好的地方在于只有两个大小。</p>
<p>2、将图片存进数据库后，再取出来显示到jsp页面中</p>
<p><font face="Arial">&nbsp; byte[] imageBytes =&nbsp;&nbsp;&nbsp;............//从数据库里取出图片<br />
&nbsp;&nbsp;OutputStream out = response.getOutputStream();<br />
&nbsp;&nbsp;out.write(imageBytes);<br />
&nbsp;&nbsp;out.flush();<br />
&nbsp;&nbsp;out.close();</font></p>
<p>这段代码就可以将图片输出到jsp页面上。</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://wf-7758520.javaeye.com/blog/80163#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 15 May 2007 21:19:10 +0800</pubDate>
        <link>http://wf-7758520.javaeye.com/blog/80163</link>
        <guid>http://wf-7758520.javaeye.com/blog/80163</guid>
      </item>
      <item>
        <title>对用例的理解</title>
        <author>wf_7758520</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://wf-7758520.javaeye.com">wf_7758520</a>&nbsp;
          链接：<a href="http://wf-7758520.javaeye.com/blog/64351" style="color:red;">http://wf-7758520.javaeye.com/blog/64351</a>&nbsp;
          发表时间: 2007年03月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>需求者的目的&mdash;&mdash;这就是用例！<br />
是一件事，这件事是完整的，可重复进行的，有明确目标和价值的，有明确的需求者的！<br />
就是：谁需要一件什么事情发生并进行到底？<br />
凡是为这个好处所作的动作，都只是过程中的操作。<br />
用例模型首先保证主角未遗漏，主角的目的（需求）未遗漏。<br />
不要忘记你是在做需求分析。<br />
一切以挖掘需求为指引。<br />
不以过程实现为指引。<br />
等你做对象模型的时候，就以过程实现为指引了。<br />
</p>
<p><font face="Arial">http://coffeewoo.itpub.net/post/9169/55321</font></p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://wf-7758520.javaeye.com/blog/64351#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 21 Mar 2007 14:39:58 +0800</pubDate>
        <link>http://wf-7758520.javaeye.com/blog/64351</link>
        <guid>http://wf-7758520.javaeye.com/blog/64351</guid>
      </item>
      <item>
        <title>运用JBPM的一点小结1－－入门</title>
        <author>wf_7758520</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://wf-7758520.javaeye.com">wf_7758520</a>&nbsp;
          链接：<a href="http://wf-7758520.javaeye.com/blog/56937" style="color:red;">http://wf-7758520.javaeye.com/blog/56937</a>&nbsp;
          发表时间: 2007年03月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <span lang="EN-US"><font size="3"><font face="Times New Roman">
<p><font face="Arial">启动流程：<br />
&Oslash;&nbsp;获取最新的流程定义：<br />
JbpmContext.getCurrentJbpmContext().getGraphSession().findLatestProcessDefinitions();//返回List<br />
&Oslash;&nbsp;获取指定流程定义：<br />
ProcessDefinition processDefinition = <br />
graphSession.loadProcessDefinition(processDefinitionId);<br />
&Oslash;&nbsp;创建流程实例：<br />
ProcessInstance processInstance = new ProcessInstance(processDefinition);<br />
&Oslash;&nbsp;开始任务节点：<br />
TaskInstance taskInstance =<br />
processInstance.getTaskMgmtInstance().createStartTaskInstance();<br />
&Oslash;&nbsp;获取指定任务实例（ID）：<br />
TaskMgmtSession taskMgmtSession;<br />
taskMgmtSession = jbpmContext.getTaskMgmtSession();<br />
TaskInstance taskInstance = taskMgmtSession.loadTaskInstance(taskInstanceId);<br />
&Oslash;&nbsp;获取任务列表：<br />
taskMgmtSession.findTaskInstances(userName);//userName为指派的人名（或角色名）</font></p>
<p><font face="Arial">&Oslash;&nbsp;获取任务变量：<br />
TaskController taskController = taskInstance.getTask().getTaskController();<br />
List variableAccesses = taskController.getVariableAccesses();<br />
注：TaskController 有两个关键的函数 initializeVariables，submitParameters，一个用来从流程中把变量置入task实例，另一个则相反，把task中变量更新到流程变量</font></p>
<p><font face="Arial">&Oslash;&nbsp;根据流程定义找到相关的任务定义<br />
ProcessDefinition pd = jbpmContext.getGraphSession().getProcessDefinition(id);<br />
List tasklist = pd.getTaskMgmtDefinition().getTasks();</font></p>
<p><font face="Arial">&Oslash;&nbsp;根据流程实例找到任务实例<br />
taskMgmtSession.findTaskInstancesByProcessInstance(processInstance);<br />
jBPM websale代码学习: taskBean.java<br />
</font></p>
</font></font></span>
          <br/><br/>
          <span style="color:red;">
            <a href="http://wf-7758520.javaeye.com/blog/56937#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 02 Mar 2007 09:50:03 +0800</pubDate>
        <link>http://wf-7758520.javaeye.com/blog/56937</link>
        <guid>http://wf-7758520.javaeye.com/blog/56937</guid>
      </item>
  </channel>
</rss>