目录


mac-flow - 进阶

持久化

  当一笔交易开始时,我们通常希望登记流水,并在交易成功完成后更新流水中的交易状态。甚至希望记录交易当时的请求和响应数据。当交易失败需要冲正时,我们还需要将此前保存的数据读取出来,作为相应的反交易的参数。
  如果让应用自己去做,就难以与流程引擎进行整合,两者存在不一致的可能。比如:流程执行失败,而应用的相应的参数和状态更新代码没能得到执行时。
  因此mac-flow提供了流程持久化的接口simpleFlowPerisiter。当流程被创建、发生状态变更时,如:执行完成、失败,会将流程数据和状态写入存储。
  此外,还提供流程的查询、流程数据的读取的接口,以备相应的监控需求使用。 public interface SimpleFlowPersister { /** * 未执行保存动作时返回false<br> * 保存失败则抛出异常 * * @param o * @return */ boolean save(SimpleFlow o); /** * 未找到数据时返回null * * @param id * @return */ SimpleFlow load(String id); /** * 未执行保存动作时返回false<br> * 保存失败则抛出异常 * * @param o * @return */ boolean update(SimpleFlow o); /** * 1、查询超时未冲正的正交易(无论是否批量冲正的情况)<br> * 2、查询状态为失败且未冲正的正交易(只能是批量冲正的情况)<br> * 3、查询冲正失败但未达到冲正次数上限的正交易 * * @param revMax1 * 情形1记录查询上限 * @param revMax2 * 情形2记录查询上限 * @param revMax3 * 情形3记录查询上限 * @return */ List<SimpleFlow> list(int revMax1, int revMax2, int revMax3); }   为SimpleFlowEngine注入flowPerisister的实现即可实现流程的持久化:flows.xml <!-- 可选的流程持久化器 --> <bean id="fakeFlowPersister" class="com.boarsoft.flow.demo.store.FakeFlowPersisterImpl"></bean> <bean id="simpleFlowEngine" class="com.boarsoft.flow.core.SimpleFlowEngineImpl"> <!-- 用于流程执行所用线程池 --> <property name="threadPool" ref="threadPool" /> <!-- 用于流程超时检查等定时处理的线程池 --> <property name="scheduler" ref="scheduler" /> <!-- 标明当前流程引擎所属的系统(调用链跟踪时用) --> <property name="catalog" value="sample" /> <!-- 此处不注入则不做持久化 --> <property name="persister" ref="fakeFlowPersister" /> </bean>

自定义生成器

  复制 /mac-flow-editor/www/flow/gen/mac/xml.js
  到 /mac-flow-editor/www/flow/gen/xxx/xml.js
  再修改 mac-flow-editor/www/flow/edit.htm,引用新的xml.js即可 <script type="text/javascript" src="./flow/gen/mac/xml.js"></script>

自定义线程池

  流程引擎使用的线程池是可配置的,只需要实现ExecutorService即可。线程池的参数和实现对流程引擎的性能有一定影响。 <bean id="threadPool" class="java.util.concurrent.ThreadPoolExecutor"> <constructor-arg index="0" value="200" /> <constructor-arg index="1" value="600" /> <constructor-arg index="2" value="60000" /> <constructor-arg index="3"> <bean class="java.util.concurrent.TimeUnit" factory-method="valueOf"> <constructor-arg value="MILLISECONDS" /> </bean> </constructor-arg> <constructor-arg index="4"> <bean class="java.util.concurrent.LinkedBlockingQueue"> <constructor-arg index="0" value="600" /> </bean> </constructor-arg> <constructor-arg index="5"> <bean class="java.util.concurrent.ThreadPoolExecutor$CallerRunsPolicy" /> </constructor-arg> </bean>

自定义线程池

  某些应用,比如:批量,对线程池有较高要求,需支持任务的取消、优先级调整等等,这就需要编写自已线程池。如有需要请和我联系。

自定义参数映射

  当需要较为复杂的服务的出入参转换时,就需要自定义参数映射。这就需要对修改编辑器的相关界面。如有需要请和我联系。

调用链跟踪

  调用链跟踪基于mac-message消息中间件和mac-log日志中间件实现,专门的log服务用于收集日志,并将日志写入存储,如 MongoDB。如有需要请和我联系。