From c0d0e52f4e24f85430326a4102920d2cfa045049 Mon Sep 17 00:00:00 2001 From: bryan31 Date: Wed, 24 Mar 2021 15:48:23 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=B0=E5=AF=8C=E4=BB=A3=E7=A0=81=E7=9A=84?= =?UTF-8?q?=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/yomahub/liteflow/aop/ICmpAroundAspect.java | 5 +++++ .../java/com/yomahub/liteflow/core/FlowExecutor.java | 8 +++++--- .../com/yomahub/liteflow/core/NodeComponent.java | 6 ++++++ .../com/yomahub/liteflow/core/NodeCondComponent.java | 7 +++++-- .../com/yomahub/liteflow/entity/data/AbsSlot.java | 4 ++++ .../com/yomahub/liteflow/entity/data/CmpStep.java | 4 ++++ .../yomahub/liteflow/entity/data/CmpStepType.java | 4 ++++ .../com/yomahub/liteflow/entity/data/DataBus.java | 4 ++++ .../yomahub/liteflow/entity/data/DefaultSlot.java | 5 +++++ .../java/com/yomahub/liteflow/entity/data/Slot.java | 4 ++++ .../java/com/yomahub/liteflow/entity/flow/Chain.java | 9 +++++++-- .../com/yomahub/liteflow/entity/flow/Condition.java | 4 ++++ .../com/yomahub/liteflow/entity/flow/Executable.java | 5 +++++ .../java/com/yomahub/liteflow/entity/flow/Node.java | 12 ++++++++++++ .../yomahub/liteflow/entity/flow/ThenCondition.java | 4 ++++ .../yomahub/liteflow/entity/flow/WhenCondition.java | 4 ++++ .../liteflow/entity/flow/WhenConditionThread.java | 4 ++++ .../liteflow/entity/monitor/CompStatistics.java | 4 ++++ .../com/yomahub/liteflow/enums/ExecuteTypeEnum.java | 4 ++++ .../main/java/com/yomahub/liteflow/flow/FlowBus.java | 4 ++++ .../com/yomahub/liteflow/monitor/MonitorBus.java | 4 ++++ .../yomahub/liteflow/monitor/MonitorTimeTask.java | 4 ++++ .../yomahub/liteflow/parser/ClassXmlFlowParser.java | 4 ++++ .../yomahub/liteflow/parser/LocalXmlFlowParser.java | 4 ++++ .../com/yomahub/liteflow/parser/RegexEntity.java | 4 ++++ .../com/yomahub/liteflow/parser/XmlFlowParser.java | 11 +++++++++++ .../liteflow/parser/ZookeeperXmlFlowParser.java | 4 ++++ .../yomahub/liteflow/property/LiteflowConfig.java | 4 ++++ .../java/com/yomahub/liteflow/util/LOGOPrinter.java | 4 ++++ .../java/com/yomahub/liteflow/util/LimitQueue.java | 4 ++++ .../java/com/yomahub/liteflow/util/SpringAware.java | 4 ++++ 31 files changed, 149 insertions(+), 7 deletions(-) diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/aop/ICmpAroundAspect.java b/liteflow-core/src/main/java/com/yomahub/liteflow/aop/ICmpAroundAspect.java index b0d2bc006..7a2421d17 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/aop/ICmpAroundAspect.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/aop/ICmpAroundAspect.java @@ -9,6 +9,11 @@ package com.yomahub.liteflow.aop; import com.yomahub.liteflow.entity.data.Slot; +/** + * 全局组件拦截器接口 + * 实现这个接口并注入到spring上下文即可 + * @author Bryan.Zhang + */ public interface ICmpAroundAspect { void beforeProcess(Slot slot); diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/core/FlowExecutor.java b/liteflow-core/src/main/java/com/yomahub/liteflow/core/FlowExecutor.java index 5ef19ac07..6a9ff0bd2 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/core/FlowExecutor.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/core/FlowExecutor.java @@ -45,6 +45,7 @@ public class FlowExecutor { private String zkNode; + //FlowExecutor的初始化化方式,主要用于parse规则文件 public void init() { if (ObjectUtil.isNull(liteflowConfig) || StrUtil.isBlank(liteflowConfig.getRuleSource())){ throw new ConfigErrorException("config error, please check liteflow config property"); @@ -55,15 +56,16 @@ public class FlowExecutor { XmlFlowParser parser = null; for(String path : rulePath){ try { - if(isLocalConfig(path)) { + + if(isLocalConfig(path)) { //判断是否是本地的xml文件 parser = new LocalXmlFlowParser(); - }else if(isZKConfig(path)){ + }else if(isZKConfig(path)){ //判断是否是zk配置 if(StringUtils.isNotBlank(zkNode)) { parser = new ZookeeperXmlFlowParser(zkNode); }else { parser = new ZookeeperXmlFlowParser(); } - }else if(isClassConfig(path)) { + }else if(isClassConfig(path)) { //判断是否是自定义配置 Class c = Class.forName(path); parser = (XmlFlowParser)c.newInstance(); } diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/core/NodeComponent.java b/liteflow-core/src/main/java/com/yomahub/liteflow/core/NodeComponent.java index 6f8a2ff43..8942aa0d7 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/core/NodeComponent.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/core/NodeComponent.java @@ -28,6 +28,10 @@ import org.springframework.lang.Nullable; import javax.annotation.Resource; +/** + * 普通组件抽象类 + * @author Bryan.Zhang + */ public abstract class NodeComponent { private static final Logger LOG = LoggerFactory.getLogger(NodeComponent.class); @@ -54,6 +58,7 @@ public abstract class NodeComponent { ComponentScaner.cmpAroundAspect.beforeProcess(slot); } + //业务处理逻辑 process(); //process后置处理 @@ -74,6 +79,7 @@ public abstract class NodeComponent { monitorBus.addStatistics(statistics); } + //进行判断是否是条件节点,条件节点最终也会落到node节点或者chain节点上 if(this instanceof NodeCondComponent){ String condNodeId = slot.getCondResult(this.getClass().getName()); if(StringUtils.isNotBlank(condNodeId)){ diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/core/NodeCondComponent.java b/liteflow-core/src/main/java/com/yomahub/liteflow/core/NodeCondComponent.java index 8a248cb85..49d13f868 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/core/NodeCondComponent.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/core/NodeCondComponent.java @@ -7,8 +7,10 @@ */ package com.yomahub.liteflow.core; -import org.springframework.stereotype.Component; - +/** + * 条件路由节点抽象类 + * @author Bryan.Zhang + */ public abstract class NodeCondComponent extends NodeComponent { @Override @@ -17,6 +19,7 @@ public abstract class NodeCondComponent extends NodeComponent { this.getSlot().setCondResult(this.getClass().getName(), nodeId); } + //用以返回路由节点的beanId public abstract String processCond() throws Exception; } diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/data/AbsSlot.java b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/data/AbsSlot.java index e1daa5a95..52bff7d0b 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/data/AbsSlot.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/data/AbsSlot.java @@ -15,6 +15,10 @@ import java.util.concurrent.ConcurrentHashMap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +/** + * Slot的抽象类实现 + * @author Bryan.Zhang + */ @SuppressWarnings("unchecked") public abstract class AbsSlot implements Slot{ diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/data/CmpStep.java b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/data/CmpStep.java index 94344e6ab..7eaa7c14c 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/data/CmpStep.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/data/CmpStep.java @@ -9,6 +9,10 @@ package com.yomahub.liteflow.entity.data; import java.text.MessageFormat; +/** + * 组件步骤对象 + * @author Bryan.Zhang + */ public class CmpStep { private String nodeId; diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/data/CmpStepType.java b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/data/CmpStepType.java index 7162eadae..485e9a692 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/data/CmpStepType.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/data/CmpStepType.java @@ -7,6 +7,10 @@ */ package com.yomahub.liteflow.entity.data; +/** + * 组件步骤类型 + * @author Bryan.Zhang + */ public enum CmpStepType { START, END, diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/data/DataBus.java b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/data/DataBus.java index dc8a8ddc9..0cd59e561 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/data/DataBus.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/data/DataBus.java @@ -15,6 +15,10 @@ import com.yomahub.liteflow.util.SpringAware; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +/** + * 数据BUS,主要用来管理Slot,用以分配和回收 + * @author Bryan.Zhang + */ public class DataBus { private static final Logger LOG = LoggerFactory.getLogger(DataBus.class); diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/data/DefaultSlot.java b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/data/DefaultSlot.java index 9096b2a88..b73075d5b 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/data/DefaultSlot.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/data/DefaultSlot.java @@ -7,6 +7,11 @@ */ package com.yomahub.liteflow.entity.data; +/** + * 默认Slot的实现类 + * 不建议业务系统直接用此类,此类基于弱类型Map,应该自己去继承AbsSlot + * @author Bryan.Zhang + */ public class DefaultSlot extends AbsSlot { } diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/data/Slot.java b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/data/Slot.java index 751acc9eb..4ba30a028 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/data/Slot.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/data/Slot.java @@ -7,6 +7,10 @@ */ package com.yomahub.liteflow.entity.data; +/** + * Slot的接口 + * @author Bryan.Zhang + */ public interface Slot { public T getInput(String nodeId); diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/Chain.java b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/Chain.java index 6f2b7dc20..320b10ee1 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/Chain.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/Chain.java @@ -9,11 +9,9 @@ package com.yomahub.liteflow.entity.flow; import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; import com.yomahub.liteflow.entity.data.DataBus; import com.yomahub.liteflow.entity.data.Slot; import com.yomahub.liteflow.enums.ExecuteTypeEnum; -import com.yomahub.liteflow.exception.ChainEndException; import com.yomahub.liteflow.exception.FlowSystemException; import com.yomahub.liteflow.property.LiteflowConfig; import com.yomahub.liteflow.util.SpringAware; @@ -25,6 +23,10 @@ import java.util.List; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; +/** + * chain对象,实现可执行器 + * @author Bryan.Zhang + */ public class Chain implements Executable { private static final Logger LOG = LoggerFactory.getLogger(Chain.class); @@ -65,6 +67,7 @@ public class Chain implements Executable { this.chainName = chainName; } + //执行chain的主方法 @Override public void execute(Integer slotIndex) throws Exception { if (CollectionUtils.isEmpty(conditionList)) { @@ -73,6 +76,8 @@ public class Chain implements Executable { Slot slot = DataBus.getSlot(slotIndex); + //循环chain里包含的condition,每一个condition有可能是then,也有可能是when + //when的话为异步,用闭锁进行等待,所有when结束后才能进入下一个condition for (Condition condition : conditionList) { if (condition instanceof ThenCondition) { for (Executable executableItem : condition.getNodeList()) { diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/Condition.java b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/Condition.java index afae9dbba..cf4a9d39a 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/Condition.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/Condition.java @@ -9,6 +9,10 @@ package com.yomahub.liteflow.entity.flow; import java.util.List; +/** + * 里面包含了when或者then + * @author Bryan.Zhang + */ public class Condition { private List nodeList; diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/Executable.java b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/Executable.java index 81271e3bb..7c6fbe4ae 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/Executable.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/Executable.java @@ -2,6 +2,11 @@ package com.yomahub.liteflow.entity.flow; import com.yomahub.liteflow.enums.ExecuteTypeEnum; +/** + * 可执行器接口 + * 目前实现这个接口的有2个,node和chain + * @author Bryan.Zhang + */ public interface Executable { void execute(Integer slotIndex) throws Exception; diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/Node.java b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/Node.java index 882939ca7..a53677c8a 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/Node.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/Node.java @@ -21,6 +21,10 @@ import com.yomahub.liteflow.exception.FlowSystemException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +/** + * Node节点,实现可执行器 + * @author Bryan.Zhang + */ public class Node implements Executable{ private static final Logger LOG = LoggerFactory.getLogger(Node.class); @@ -75,19 +79,25 @@ public class Node implements Executable{ this.condNodeMap.put(nodeId, condNode); } + //node的执行主要逻辑 + //所有的可执行节点,其实最终都会落到node上来,因为chain中包含的也是node @Override public void execute(Integer slotIndex) throws Exception { if(instance == null){ throw new FlowSystemException("there is no instance for node id " + id); } + //每次执行node前,把分配的slot index信息放入threadLocal里 instance.setSlotIndex(slotIndex); Slot slot = DataBus.getSlot(slotIndex); try{ + //判断是否可执行,所以isAccess经常作为一个组件进入的实际判断要素,用作检查slot里的参数的完备性 if(instance.isAccess()){ + //执行业务逻辑的主要入口 instance.execute(); + //如果组件覆盖了isEnd方法,或者在在逻辑中主要调用了setEnd(true)的话,流程就会立马结束 if(instance.isEnd()){ String errorInfo = StrUtil.format("[{}]:component[{}] lead the chain to end",slot.getRequestId(),instance.getClass().getSimpleName()); throw new ChainEndException(errorInfo); @@ -96,6 +106,7 @@ public class Node implements Executable{ LOG.info("[{}]:[X]skip component[{}] execution",slot.getRequestId(),instance.getClass().getSimpleName()); } }catch (Exception e){ + //如果组件覆盖了isContinueOnError方法,返回为true,那即便出了异常,也会继续流程 if(instance.isContinueOnError()){ String errorMsg = MessageFormat.format("[{0}]:component[{1}] cause error,but flow is still go on", slot.getRequestId(),id); LOG.error(errorMsg,e); @@ -105,6 +116,7 @@ public class Node implements Executable{ throw e; } }finally { + //移除threadLocal里的信息 instance.removeSlotIndex(); instance.removeIsEnd(); } diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/ThenCondition.java b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/ThenCondition.java index fc66cd599..d32251c50 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/ThenCondition.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/ThenCondition.java @@ -9,6 +9,10 @@ package com.yomahub.liteflow.entity.flow; import java.util.List; +/** + * 串行器 + * @author Bryan.Zhang + */ public class ThenCondition extends Condition { public ThenCondition(List nodeList) { diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/WhenCondition.java b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/WhenCondition.java index 562de0755..fbcd9715e 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/WhenCondition.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/WhenCondition.java @@ -9,6 +9,10 @@ package com.yomahub.liteflow.entity.flow; import java.util.List; +/** + * 并行器 + * @author Bryan.Zhang + */ public class WhenCondition extends Condition{ public WhenCondition(List nodeList) { diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/WhenConditionThread.java b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/WhenConditionThread.java index 22df695b4..bc42440d0 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/WhenConditionThread.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/WhenConditionThread.java @@ -5,6 +5,10 @@ import org.slf4j.LoggerFactory; import java.util.concurrent.CountDownLatch; +/** + * 并行器线程 + * @author Bryan.Zhang + */ public class WhenConditionThread extends Thread { private static final Logger LOG = LoggerFactory.getLogger(WhenConditionThread.class); diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/monitor/CompStatistics.java b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/monitor/CompStatistics.java index 048540c82..ad9c10d2a 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/monitor/CompStatistics.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/monitor/CompStatistics.java @@ -7,6 +7,10 @@ */ package com.yomahub.liteflow.entity.monitor; +/** + * 统计类 + * @author Bryan.Zhang + */ public class CompStatistics implements Comparable{ private String componentClazzName; diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/enums/ExecuteTypeEnum.java b/liteflow-core/src/main/java/com/yomahub/liteflow/enums/ExecuteTypeEnum.java index b61c4d4d6..64285ee58 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/enums/ExecuteTypeEnum.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/enums/ExecuteTypeEnum.java @@ -7,6 +7,10 @@ */ package com.yomahub.liteflow.enums; +/** + * 可执行节点枚举 + * @author Bryan.Zhang + */ public enum ExecuteTypeEnum { CHAIN,NODE } diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/FlowBus.java b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/FlowBus.java index b12076296..f0288b737 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/FlowBus.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/FlowBus.java @@ -15,6 +15,10 @@ import org.apache.commons.collections4.MapUtils; import com.yomahub.liteflow.entity.flow.Chain; import com.yomahub.liteflow.entity.flow.Node; +/** + * 流程元数据类 + * @author Bryan.Zhang + */ public class FlowBus { private static Map chainMap = new HashMap<>(); diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/monitor/MonitorBus.java b/liteflow-core/src/main/java/com/yomahub/liteflow/monitor/MonitorBus.java index f4552960c..d7b6e4242 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/monitor/MonitorBus.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/monitor/MonitorBus.java @@ -30,6 +30,10 @@ import org.slf4j.LoggerFactory; import com.yomahub.liteflow.entity.data.DataBus; import com.yomahub.liteflow.entity.monitor.CompStatistics; +/** + * 监控类元数据,打印执行器类 + * @author Bryan.Zhang + */ public class MonitorBus { private LiteflowConfig liteflowConfig; diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/monitor/MonitorTimeTask.java b/liteflow-core/src/main/java/com/yomahub/liteflow/monitor/MonitorTimeTask.java index ce3af5504..21ada681b 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/monitor/MonitorTimeTask.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/monitor/MonitorTimeTask.java @@ -2,6 +2,10 @@ package com.yomahub.liteflow.monitor; import java.util.TimerTask; +/** + * 监控器线程 + * @author Bryan.Zhang + */ public class MonitorTimeTask extends TimerTask { private MonitorBus monitorBus; diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/ClassXmlFlowParser.java b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/ClassXmlFlowParser.java index f1e6484b7..b3b0b8245 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/ClassXmlFlowParser.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/ClassXmlFlowParser.java @@ -1,5 +1,9 @@ package com.yomahub.liteflow.parser; +/** + * 基于自定义的xml方式解析器 + * @author Bryan.Zhang + */ public abstract class ClassXmlFlowParser extends XmlFlowParser { @Override public void parseMain(String path) throws Exception { diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/LocalXmlFlowParser.java b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/LocalXmlFlowParser.java index 318151468..c8b5fcf43 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/LocalXmlFlowParser.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/LocalXmlFlowParser.java @@ -9,6 +9,10 @@ package com.yomahub.liteflow.parser; import cn.hutool.core.io.FileUtil; +/** + * 基于本地的xml方式解析器 + * @author Bryan.Zhang + */ public class LocalXmlFlowParser extends XmlFlowParser{ public void parseMain(String rulePath) throws Exception { diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/RegexEntity.java b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/RegexEntity.java index 821abd7c1..526d21cbb 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/RegexEntity.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/RegexEntity.java @@ -7,6 +7,10 @@ */ package com.yomahub.liteflow.parser; +/** + * 正则实体,主要用于条件节点 + * @author Bryan.Zhang + */ public class RegexEntity { private String item; diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/XmlFlowParser.java b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/XmlFlowParser.java index c8ae15e5c..372524838 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/XmlFlowParser.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/XmlFlowParser.java @@ -23,6 +23,10 @@ import com.yomahub.liteflow.core.NodeComponent; import com.yomahub.liteflow.flow.FlowBus; import com.yomahub.liteflow.spring.ComponentScaner; +/** + * xml形式的解析器 + * @author Bryan.Zhang + */ public abstract class XmlFlowParser { private final Logger LOG = LoggerFactory.getLogger(XmlFlowParser.class); @@ -34,6 +38,7 @@ public abstract class XmlFlowParser { parse(document); } + //xml形式的主要解析过程 @SuppressWarnings("unchecked") public void parse(Document document) throws Exception { try { @@ -83,6 +88,7 @@ public abstract class XmlFlowParser { } } + //解析一个chain的过程 private void parseOneChain(Element e) throws Exception{ String condArrayStr; String[] condArray; @@ -102,6 +108,7 @@ public abstract class XmlFlowParser { RegexEntity regexEntity; String itemExpression; String item; + //这里解析的规则,优先按照node去解析,再按照chain去解析 for (int i = 0; i < condArray.length; i++) { itemExpression = condArray[i].trim(); regexEntity = parseNodeStr(itemExpression); @@ -109,6 +116,7 @@ public abstract class XmlFlowParser { if(FlowBus.containNode(item)){ Node node = FlowBus.getNode(item); chainNodeList.add(node); + //这里判断是不是条件节点,条件节点会含有realItem,也就是括号里的node if(regexEntity.getRealItemArray() != null){ for(String key : regexEntity.getRealItemArray()){ if(FlowBus.containNode(key)){ @@ -137,6 +145,8 @@ public abstract class XmlFlowParser { FlowBus.addChain(chainName, new Chain(chainName,conditionList)); } + //判断在这个FlowBus元数据里是否含有这个chain + //因为chain和node都是可执行器,在一个规则文件上,有可能是node,有可能是chain private boolean hasChain(Element e,String chainName) throws Exception{ Element rootElement = e.getParent(); List chainList = rootElement.elements("chain"); @@ -152,6 +162,7 @@ public abstract class XmlFlowParser { return false; } + //条件节点的正则解析 public static RegexEntity parseNodeStr(String str) { List list = new ArrayList(); Pattern p = Pattern.compile("[^\\)\\(]+"); diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/ZookeeperXmlFlowParser.java b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/ZookeeperXmlFlowParser.java index 1f4af04e3..c1be7e1f1 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/ZookeeperXmlFlowParser.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/ZookeeperXmlFlowParser.java @@ -12,6 +12,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.yomahub.liteflow.exception.ParseException; +/** + * 基于zk方式的xml形式的解析器 + * @author Bryan.Zhang + */ public class ZookeeperXmlFlowParser extends XmlFlowParser{ private static final Logger LOG = LoggerFactory.getLogger(ZookeeperXmlFlowParser.class); diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/property/LiteflowConfig.java b/liteflow-core/src/main/java/com/yomahub/liteflow/property/LiteflowConfig.java index f086c581f..513704519 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/property/LiteflowConfig.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/property/LiteflowConfig.java @@ -7,6 +7,10 @@ */ package com.yomahub.liteflow.property; +/** + * liteflow的配置实体类 + * @author Bryan.Zhang + */ public class LiteflowConfig { //流程定义资源地址 diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/util/LOGOPrinter.java b/liteflow-core/src/main/java/com/yomahub/liteflow/util/LOGOPrinter.java index cc16e83b2..4bd1a5955 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/util/LOGOPrinter.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/util/LOGOPrinter.java @@ -3,6 +3,10 @@ package com.yomahub.liteflow.util; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +/** + * logo打印器 + * @author Bryan.Zhang + */ public class LOGOPrinter { private static final Logger LOG = LoggerFactory.getLogger(LOGOPrinter.class); diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/util/LimitQueue.java b/liteflow-core/src/main/java/com/yomahub/liteflow/util/LimitQueue.java index 8ba4152c3..13c4a3861 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/util/LimitQueue.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/util/LimitQueue.java @@ -13,6 +13,10 @@ import java.util.LinkedList; import java.util.Queue; import java.util.concurrent.ConcurrentLinkedQueue; +/** + * 有限队列集合 + * @author Bryan.Zhang + */ public class LimitQueue implements Queue { /** diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/util/SpringAware.java b/liteflow-core/src/main/java/com/yomahub/liteflow/util/SpringAware.java index ab80d1746..a0bedede6 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/util/SpringAware.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/util/SpringAware.java @@ -10,6 +10,10 @@ import org.springframework.beans.factory.support.GenericBeanDefinition; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; +/** + * 基于代码形式的spring上下文工具类 + * @author Bryan.Zhang + */ public class SpringAware implements ApplicationContextAware { private static final Logger log = LoggerFactory.getLogger(SpringAware.class); private static ApplicationContext applicationContext = null;