`

研究JBPM的用法

阅读更多

1 将JBPM的配置文件打包成ZIP,并从zip中解出来,然后导入到数据库去。

  ZipInputStream zipInputStream = new ZipInputStream(LoadClassFromArchieve.class.getResourceAsStream("simpleProcess.war"));
  JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();
  JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();
  try {
   //   ProcessDefinition processDefinition = ProcessDefinition.parseParZipInputStream(zipInputStream);
   //   jbpmContext.deployProcessDefinition(processDefinition);
   GraphSession grapSession = jbpmContext.getGraphSession();
   ProcessDefinition processDefinition = grapSession.findLatestProcessDefinition("simple");
   grapSession.deleteProcessDefinition(processDefinition);
  } catch (Exception e) {
    e.printStackTrace();
  }finally{
    jbpmContext.close();
    zipInputStream.close();
  }

 
2 Jbpm的一个流程开始代码。

 //jbpmContext是用来保准Hibernate 事务的,主要是和事务打交道。
 JbpmContext jbpmContext = JbpmConfirguration.CreateJbpmContext();
 try{
    GraphSession graphSession = jbpmContext.getGraphSession();
    ProcessDefinition pdf = graphSession.findLastestProcessDefinition("processDefinistion");
    pi.getContextInstance().createVariable("newVariable",newVariable);
    pi.signal();
    jbpmContext.save(pi);
 }finally{
     jbpmContext.close();
 }

 
3 怎么从数据库得到一个ProcessIntance。
 将ProcessInstanceId作为参数放在订单里面,里面记录了订单当前的所处的jbpm的状态。
 从ProcessIntance中得到TaskInstance,调用TaskIntance.end("applyRefund");就可以将流程走下去。
 
4  Token的作用是什么。
  ProcessInstance中RootToken的作用是什么。
  Node在JBPM中处的位置
  Node代表的是TaskNode,Decision和Node,表示流程所处的一个状态,可以在Node上挂Task或Action的回调函数。完成业务自己的功能。
  TaskIntance的作用是什么?


5 Profile.enter("流程开始!");将执行的时间,保存在一个ThreadLocal里面,最后才用StringBuilder将其统计出来。
 
7 怎么根据流程名字,直接得到将当前的ProcessIntance在内存中重建。

 Node curNode = processDefinition.getNode("总经理审批");
 processIntance.getRootToken().setNode(curNode):
 processIntance.signal();//触发状态转移。


8   fwei只用了一个表来保存流程的当前状态,主要保存的有:
 流程的业务ID,业务Type,ProcessDefinition名,ProcessDefinition版本,流程的上下文参数,比如本流程需要借款,借款的金额,借款的单位,会表示成Map,dump成 名值对 数据库的Process_Context字段中去。
 
9 错误输入:"流程["+processName+"]不存在!";

19 iBatis 可能需要写点小程序来把大部分情况用熟悉。包括如何搭建环境,如何写SqlMap DAO。
 
10 开发工程师的职责:
理解交易三期的商业需求和产品的方向和目标。
撰写系统UC,完整描述系统过程,边界条件,输入输出等,对具体实现的功能需求负责;
撰写系统设计说明书;
撰写系统设计文档,对系统设计方案负责;
写单元测试;
编码实现;

 

11  将Map的Key按字符串顺序排列。
List<String> keys = new ArrayList<String>(params.keySet());
Collections.sort(keys);


 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics