CmmTask

9 篇文章 0 订阅

package com.cmm;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.jbpm.JbpmException;
import org.jbpm.graph.def.ActionHandler;
import org.jbpm.graph.def.Event;
import org.jbpm.graph.exe.ExecutionContext;

 /**
  * 是所有Cmm任务的基类。
  * 一个cmm任务在流程定义的时候一定是按如下定义格式进行定义的(这是定义的最下格式,还可以添加jbpm支持的属性等内容):
  * <task name="#{任务名,例如:task1}">
     *  <event type="task-start">
     *   <action class="#{CmmTask的子类,例如:com.cmm.CmmTask1}" config-type="configuration-property">
     *   <!--以下部分为在建模的时候对CmmTask的之类进行自定义的地方,相应的内容会以参数的形式传递给子类实现的setConfiguration()方法-->
     *    <name>dust</name>
     *    <count>20</count>
     *    <entity>
     *     <name>elena</name>
     *     <count>30</count>
     *   </entity>
     *   <!--自定义内容结束-->
     *   </action>
     *  </event>
     *  <event type="task-end">
     *    <action class="com.cmm.CmmTask1" config-type="constructor">
     *    </action>
     *  </event>
     * </task>
  * @author 吴大愚
  * @time 2006-11-27
  */
public abstract class CmmTask implements ActionHandler { 
 /**
  * 在对cmmTask保存状态时,需要的CmmTask的id
  */
 protected long loadId=-1;
 
 public void execute(ExecutionContext executionContext) throws Exception {
  // TODO Auto-generated method stub
  Event event=executionContext.getEvent();
  if(event.getEventType().compareTo(Event.EVENTTYPE_TASK_START)==0)
  {
   //做cmmTask1任务初始化的操作
   startExecute(executionContext);
   this.save();
  }
  else if(event.getEventType().compareTo( Event.EVENTTYPE_TASK_END)==0)   
  {
   if(this.loadId ==-1){
    throw new Exception("no assign value to loadid before call endExecute()!");
   }
   this.load(loadId );   
   //做cmmTask1任务结束的操作
   endExecute(executionContext);
  }   
  else{
   throw new Exception("cmmTask1 event wrong!");
  }
 }
 
 /**
  * 暂停执行任务,保存状态
  * @throws Exception
  */
 public void pause()throws Exception{
  this.save();
 }
 
 /**
  * 恢复执行任务的状态
  * @param id CmmTask的Id
  * @throws Exception
  */
 public void resume(long id) throws Exception{
  load(id);
 }
 /**
  * 恢复执行任务的状态,在调此方法前,需要在带参数的构造函数中对loadId赋值
  * @throws Exception
  */
 public void resume() throws Exception{
  if(this.loadId ==-1){
   throw new Exception("no assign value to loadid before load a CmmTask!");
  }
  load(this.loadId);
 }
 
 
 //=======继承类需要实现的方法================================== 
 /**
  * 实现一个默认构造函数
  */
 public CmmTask(){}
 
 /**
  * 实现一个带一个String类型参数的构造函数,并且在此构造函数中要取得load操作所需要的CmmTask的id
  * @param text
  */
 public CmmTask(String text){}
 
 /**
  * 初始化
  * @param configuration
  * @throws Exception
  */
 public abstract void setConfiguration(String configuration) throws Exception; 
 /**
  * 做cmmTask任务初始化的操作
  * @param executionContext
  * @throws Exception
  * */
 protected abstract void startExecute(ExecutionContext executionContext) throws Exception ;
 /**
  * 做cmmTask任务结束的操作
  * @param executionContext
  * @throws Exception
  * */
 protected abstract void endExecute(ExecutionContext arg0) throws Exception ;
 
 /**
  * 将此对象持久化,保存状态
  * @throws Exception
  */
 protected abstract void save() throws Exception;
 
 /**
  * 读取此对象状态
  * @param id
  * @throws Exception
  */ 
 protected  abstract void load(long id) throws Exception;
 
 //===========便利方法===============================================
 
  protected Element parseConfiguration(String configuration) {
     Element element = null;
     try {
       element = DocumentHelper.parseText( "<cmmtask>"+configuration+"</cmmtask>" ).getRootElement();
     } catch (DocumentException e) {
       log.error( "couldn't parse bean configuration : " + configuration, e );
       throw new JbpmException(e);
     }
     return element;
   }
  private static final Log log = LogFactory.getLog(CmmTask.class);
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值