OSWorkFlow使用总结

   OSWorkflow比起JBPM是比较低级的工作流,很多功能需要开发,但是非常灵活,对比较简单的流程,如商业银行绩效考核中的帐户归属流程、定性考核流程是比较适合的。 

    在使用过程中,项目组发现了一些问题,现总结如下,请大家讨论。 

 

1、集成到spring中的事务问题 

OS_Workflow中没有直接集成IBatis的数据操作类,因此需要自己写一个数据操作类,可采用同一datasourceJDBCTemplate,确保与为同一事务。Spring声明式事务采用AOP,默认动态代理的方法抛出Unchecked Exception或者Error才进行回滚, 如果方法中抛出异常中的为检查异常,默认将不再回滚,当然也可以进行配置回滚的CheckedException (详见spring 参考手册 回滚)  

例如:

<tx:advice id="txAdvice" transaction-manager="txManager">

  <tx:attributes>

         <tx:method name="get*" read-only="false" />

         <tx:method name="*" rollback-for="WorkflowException"/>

  </tx:attributes>

</tx:advice>

由于Osworkflow中抛出的异常WorkflowExceptionCheckedException 即检查异常,所以默认不会回滚,因此可按照上述配置advice

 

2HISTORYSTEP历史记录中的流程状态配置问题

配置文件中result属性status 分别插入OS_CURRENTSTEP中,old-status 会插入OS_HISTORYSTEP中,但是由于转向某个状态之前的状态量不一定是唯一的,

如评分完毕需要审核,等待审核的状态之前,可能是等待评分,也可能是审核未通过的被打回状态,oldstatus不一定是"待评分",也可能为"被打回",所以插入到历史表中的status需要动态从OS_CURRENTSTEP中取,才能保证历史表中的status是正确的。

 <results>
      <unconditional-result id="19" old-status="
待评分" status="待审核
" step="3" />
  </results>

重新配置: 

<results>
      <unconditional-result id="19" old-status="${oldStatus}" status="
待审核
" step="3" />
  </results>

 

 

3、工作流程的转发并发性

由于流程的操作即doaction可能并发,因此,每当进行流程转发doAction,需要进行判断,流程的所属人owner是否仍为当前的操作人,流程是否已经转到其他人。

OS_CURRENTSTEP中的owner是否为操作人。

getCurrentStep得到SimpleStep得到owner进行判断。

 

4、流程的状态

OS_WFENTRY中工作流的状态有 KILLEDSUSPENDEDACTIVATEDCOMPLETEDCREATED,当完成后会自动为COMPLETED,并清除OS_CURRENTSTEP,当前step

moveOS_CURRENTSTEP

因此,当流程结束需要设置action 的属性finish=“true”,保证清空当前OS_CURRENTSTEP,并移到历史表中。

你可能感兴趣的:(spring,ibatis,workflow,jbpm,OS)