diff --git a/liteflow-core/pom.xml b/liteflow-core/pom.xml index a98acb533..bab2fb518 100644 --- a/liteflow-core/pom.xml +++ b/liteflow-core/pom.xml @@ -13,18 +13,6 @@ - - org.apache.commons - commons-lang3 - - - org.apache.commons - commons-collections4 - - - commons-io - commons-io - cn.hutool hutool-core @@ -69,10 +57,6 @@ junit junit - - - commons-logging - commons-logging org.apache.curator 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 6a9ff0bd2..8774fa6c5 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 @@ -9,15 +9,11 @@ package com.yomahub.liteflow.core; import java.text.MessageFormat; import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.ReUtil; import cn.hutool.core.util.StrUtil; import com.google.common.collect.Lists; -import com.yomahub.liteflow.exception.ConfigErrorException; -import com.yomahub.liteflow.property.LiteflowConfig; -import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -26,12 +22,14 @@ import com.yomahub.liteflow.entity.data.DataBus; import com.yomahub.liteflow.entity.data.DefaultSlot; import com.yomahub.liteflow.entity.data.Slot; import com.yomahub.liteflow.exception.ChainNotFoundException; +import com.yomahub.liteflow.exception.ConfigErrorException; import com.yomahub.liteflow.exception.FlowExecutorNotInitException; import com.yomahub.liteflow.exception.NoAvailableSlotException; import com.yomahub.liteflow.flow.FlowBus; import com.yomahub.liteflow.parser.LocalXmlFlowParser; import com.yomahub.liteflow.parser.XmlFlowParser; import com.yomahub.liteflow.parser.ZookeeperXmlFlowParser; +import com.yomahub.liteflow.property.LiteflowConfig; /** * 流程规则主要执行器类 @@ -40,7 +38,13 @@ import com.yomahub.liteflow.parser.ZookeeperXmlFlowParser; public class FlowExecutor { private static final Logger LOG = LoggerFactory.getLogger(FlowExecutor.class); - + + private static final String ZK_CONFIG_REGEX = "[\\w\\d][\\w\\d\\.]+\\:(\\d)+(\\,[\\w\\d][\\w\\d\\.]+\\:(\\d)+)*"; + + private static final String LOCAL_CONFIG_REGEX = "^[\\w_\\-\\@\\/]+\\.xml$"; + + private static final String CLASS_CONFIG_REGEX = "^\\w+(\\.\\w+)*$"; + private LiteflowConfig liteflowConfig; private String zkNode; @@ -54,20 +58,19 @@ public class FlowExecutor { List rulePath = Lists.newArrayList(liteflowConfig.getRuleSource().split(",|;")); XmlFlowParser parser = null; - for(String path : rulePath){ + for (String path : rulePath) { try { - - if(isLocalConfig(path)) { //判断是否是本地的xml文件 + if (isLocalConfig(path)) { parser = new LocalXmlFlowParser(); - }else if(isZKConfig(path)){ //判断是否是zk配置 - if(StringUtils.isNotBlank(zkNode)) { + } else if (isZKConfig(path)) { + if (StrUtil.isNotBlank(zkNode)) { parser = new ZookeeperXmlFlowParser(zkNode); - }else { + } else { parser = new ZookeeperXmlFlowParser(); } - }else if(isClassConfig(path)) { //判断是否是自定义配置 + } else if (isClassConfig(path)) { Class c = Class.forName(path); - parser = (XmlFlowParser)c.newInstance(); + parser = (XmlFlowParser) c.newInstance(); } parser.parseMain(path); } catch (Exception e) { @@ -79,21 +82,15 @@ public class FlowExecutor { } private boolean isZKConfig(String path) { - Pattern p = Pattern.compile("[\\w\\d][\\w\\d\\.]+\\:(\\d)+(\\,[\\w\\d][\\w\\d\\.]+\\:(\\d)+)*"); - Matcher m = p.matcher(path); - return m.find(); + return ReUtil.isMatch(ZK_CONFIG_REGEX, path); } private boolean isLocalConfig(String path) { - Pattern p = Pattern.compile("^[\\w_\\-\\@\\/]+\\.xml$"); - Matcher m = p.matcher(path); - return m.find(); + return ReUtil.isMatch(LOCAL_CONFIG_REGEX, path); } private boolean isClassConfig(String path) { - Pattern p = Pattern.compile("^\\w+(\\.\\w+)*$"); - Matcher m = p.matcher(path); - return m.find(); + return ReUtil.isMatch(CLASS_CONFIG_REGEX, path); } public void reloadRule(){ @@ -121,34 +118,34 @@ public class FlowExecutor { Chain chain = FlowBus.getChain(chainId); - if(chain == null){ + if (ObjectUtil.isNull(chain)) { String errorMsg = MessageFormat.format("couldn't find chain with the id[{0}]", chainId); throw new ChainNotFoundException(errorMsg); } - if(!isInnerChain && slotIndex == null) { + if (!isInnerChain && ObjectUtil.isNull(slotIndex)) { slotIndex = DataBus.offerSlot(slotClazz); - LOG.info("slot[{}] offered",slotIndex); + LOG.info("slot[{}] offered", slotIndex); } - if(slotIndex == -1){ + if (slotIndex == -1) { throw new NoAvailableSlotException("there is no available slot"); } slot = DataBus.getSlot(slotIndex); - if(slot == null) { + if (slot == null) { throw new NoAvailableSlotException("the slot is not exist"); } - if(StringUtils.isBlank(slot.getRequestId())) { + if (StrUtil.isBlank(slot.getRequestId())) { slot.generateRequestId(); - LOG.info("requestId[{}] has generated",slot.getRequestId()); + LOG.info("requestId[{}] has generated", slot.getRequestId()); } - if(!isInnerChain) { + if (!isInnerChain) { slot.setRequestData(param); slot.setChainName(chainId); - }else { + } else { slot.setChainReqData(chainId, param); } 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 8942aa0d7..264c20b3f 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 @@ -7,26 +7,26 @@ */ package com.yomahub.liteflow.core; +import cn.hutool.core.date.StopWatch; import cn.hutool.core.util.ObjectUtil; -import com.yomahub.liteflow.entity.flow.Executable; -import com.yomahub.liteflow.spring.ComponentScaner; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.lang3.time.StopWatch; +import cn.hutool.core.util.StrUtil; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; -import com.yomahub.liteflow.entity.flow.Node; import com.yomahub.liteflow.entity.data.CmpStep; import com.yomahub.liteflow.entity.data.CmpStepType; import com.yomahub.liteflow.entity.data.DataBus; import com.yomahub.liteflow.entity.data.Slot; +import com.yomahub.liteflow.entity.flow.Executable; +import com.yomahub.liteflow.entity.flow.Node; import com.yomahub.liteflow.entity.monitor.CompStatistics; import com.yomahub.liteflow.flow.FlowBus; import com.yomahub.liteflow.monitor.MonitorBus; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.lang.Nullable; +import com.yomahub.liteflow.spring.ComponentScaner; + -import javax.annotation.Resource; /** * 普通组件抽象类 @@ -53,39 +53,34 @@ public abstract class NodeComponent { StopWatch stopWatch = new StopWatch(); stopWatch.start(); - //process前置处理 - if(ComponentScaner.cmpAroundAspect != null){ + // process前置处理 + if (ObjectUtil.isNotNull(ComponentScaner.cmpAroundAspect)) { ComponentScaner.cmpAroundAspect.beforeProcess(slot); } - //业务处理逻辑 process(); - //process后置处理 - if(ComponentScaner.cmpAroundAspect != null){ + // process后置处理 + if (ObjectUtil.isNotNull(ComponentScaner.cmpAroundAspect)) { ComponentScaner.cmpAroundAspect.afterProcess(slot); } stopWatch.stop(); - long timeSpent = stopWatch.getTime(); - + // slot.addStep(new CmpStep(nodeId, CmpStepType.END)); - - //性能统计 - CompStatistics statistics = new CompStatistics(); - statistics.setComponentClazzName(this.getClass().getSimpleName()); - statistics.setTimeSpent(timeSpent); - if (ObjectUtil.isNotNull(monitorBus)){ + final long timeSpent = stopWatch.getTotalTimeMillis(); + // 性能统计 + if (ObjectUtil.isNotNull(monitorBus)) { + CompStatistics statistics = new CompStatistics(this.getClass().getSimpleName(), timeSpent); monitorBus.addStatistics(statistics); } - //进行判断是否是条件节点,条件节点最终也会落到node节点或者chain节点上 - if(this instanceof NodeCondComponent){ + if (this instanceof NodeCondComponent) { String condNodeId = slot.getCondResult(this.getClass().getName()); - if(StringUtils.isNotBlank(condNodeId)){ + if (StrUtil.isNotBlank(condNodeId)) { Node thisNode = FlowBus.getNode(nodeId); Executable condExecutor = thisNode.getCondNode(condNodeId); - if(condExecutor != null){ + if (ObjectUtil.isNotNull(condExecutor)) { condExecutor.execute(slotIndexTL.get()); } } @@ -118,9 +113,9 @@ public abstract class NodeComponent { */ public boolean isEnd() { Boolean isEnd = isEndTL.get(); - if(isEnd == null){ + if(ObjectUtil.isNull(isEnd)){ return false; - }else{ + } else { return isEndTL.get(); } } 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 7eaa7c14c..3278ceabb 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,8 @@ package com.yomahub.liteflow.entity.data; import java.text.MessageFormat; +import cn.hutool.core.util.ObjectUtil; + /** * 组件步骤对象 * @author Bryan.Zhang @@ -52,7 +54,7 @@ public class CmpStep { @Override public boolean equals(Object obj) { - if (obj == null) { + if (ObjectUtil.isNull(obj)) { return false; }else { if(getClass() != obj.getClass()) { 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 0cd59e561..58a0cda91 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 @@ -41,7 +41,7 @@ public class DataBus { public synchronized static int offerSlot(Class slotClazz){ try{ for(int i = 0; i < slots.length; i++){ - if(slots[i] == null){ + if(ObjectUtil.isNull(slots[i])){ slots[i] = slotClazz.newInstance(); OCCUPY_COUNT.incrementAndGet(); return i; @@ -60,7 +60,7 @@ public class DataBus { } public static void releaseSlot(int slotIndex){ - if(slots[slotIndex] != null){ + if(ObjectUtil.isNotNull(slots[slotIndex])){ LOG.info("[{}]:slot[{}] released",slots[slotIndex].getRequestId(),slotIndex); slots[slotIndex] = null; OCCUPY_COUNT.decrementAndGet(); 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 320b10ee1..6fd7aa363 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 @@ -8,29 +8,26 @@ */ package com.yomahub.liteflow.entity.flow; +import java.util.List; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; + +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; + 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.FlowSystemException; import com.yomahub.liteflow.property.LiteflowConfig; import com.yomahub.liteflow.util.SpringAware; -import org.apache.commons.collections4.CollectionUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -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); - + private String chainName; private List conditionList; @@ -70,7 +67,7 @@ public class Chain implements Executable { //执行chain的主方法 @Override public void execute(Integer slotIndex) throws Exception { - if (CollectionUtils.isEmpty(conditionList)) { + if (CollUtil.isEmpty(conditionList)) { throw new FlowSystemException("no conditionList in this chain[" + chainName + "]"); } 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 a53677c8a..705196eb5 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 @@ -11,6 +11,7 @@ import java.text.MessageFormat; import java.util.HashMap; import java.util.Map; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.yomahub.liteflow.core.NodeComponent; import com.yomahub.liteflow.entity.data.DataBus; @@ -83,7 +84,7 @@ public class Node implements Executable{ //所有的可执行节点,其实最终都会落到node上来,因为chain中包含的也是node @Override public void execute(Integer slotIndex) throws Exception { - if(instance == null){ + if (ObjectUtil.isNull(instance)) { throw new FlowSystemException("there is no instance for node id " + id); } //每次执行node前,把分配的slot index信息放入threadLocal里 @@ -92,30 +93,30 @@ public class Node implements Executable{ try{ //判断是否可执行,所以isAccess经常作为一个组件进入的实际判断要素,用作检查slot里的参数的完备性 - if(instance.isAccess()){ + if (instance.isAccess()) { //执行业务逻辑的主要入口 instance.execute(); //如果组件覆盖了isEnd方法,或者在在逻辑中主要调用了setEnd(true)的话,流程就会立马结束 - if(instance.isEnd()){ + if (instance.isEnd()) { String errorInfo = StrUtil.format("[{}]:component[{}] lead the chain to end",slot.getRequestId(),instance.getClass().getSimpleName()); throw new ChainEndException(errorInfo); } - }else{ + } else { LOG.info("[{}]:[X]skip component[{}] execution",slot.getRequestId(),instance.getClass().getSimpleName()); } - }catch (Exception e){ + } catch (Exception e) { //如果组件覆盖了isContinueOnError方法,返回为true,那即便出了异常,也会继续流程 - if(instance.isContinueOnError()){ + 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); - }else{ + } else { String errorMsg = MessageFormat.format("[{0}]:component[{1}] cause error,error:{2}",slot.getRequestId(),id,e.getMessage()); LOG.error(errorMsg,e); throw e; } - }finally { + } finally { //移除threadLocal里的信息 instance.removeSlotIndex(); instance.removeIsEnd(); 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 bc42440d0..43574f732 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 @@ -32,9 +32,9 @@ public class WhenConditionThread extends Thread { public void run() { try{ executableItem.execute(slotIndex); - }catch(Exception e){ + } catch (Exception e) { LOG.error("item [{}] execute cause error",executableItem.getExecuteName(),e); - }finally{ + } finally { latch.countDown(); } } 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 ad9c10d2a..70a8ec1a4 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 @@ -19,6 +19,13 @@ public class CompStatistics implements Comparable{ private long memorySpent; + private long recordTime; + + public CompStatistics(String componentClazzName, long timeSpent) { + this.componentClazzName = componentClazzName; + this.timeSpent = timeSpent; + this.recordTime = System.currentTimeMillis(); + } public String getComponentClazzName() { return componentClazzName; } @@ -42,9 +49,16 @@ public class CompStatistics implements Comparable{ public void setMemorySpent(long memorySpent) { this.memorySpent = memorySpent; } - + + public long getRecordTime() { + return recordTime; + } + @Override public int compareTo(Object o) { - return -1; + if( o instanceof CompStatistics) { + return this.recordTime >= ((CompStatistics) o).getRecordTime() ? -1 : 1; + } + return 1; } } 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 f0288b737..4ce599809 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 @@ -10,7 +10,7 @@ package com.yomahub.liteflow.flow; import java.util.HashMap; import java.util.Map; -import org.apache.commons.collections4.MapUtils; +import cn.hutool.core.map.MapUtil; import com.yomahub.liteflow.entity.flow.Chain; import com.yomahub.liteflow.entity.flow.Node; @@ -29,7 +29,7 @@ public class FlowBus { } public static Chain getChain(String id) throws Exception { - if (MapUtils.isEmpty(chainMap)) { + if (MapUtil.isEmpty(chainMap)) { throw new Exception("please config the rule first"); } return chainMap.get(id); @@ -44,10 +44,10 @@ public class FlowBus { } public static boolean needInit() { - return MapUtils.isEmpty(chainMap); + return MapUtil.isEmpty(chainMap); } - public static boolean containNode(String nodeId){ + public static boolean containNode(String nodeId) { return nodeMap.containsKey(nodeId); } 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 d7b6e4242..40d7e7542 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 @@ -12,22 +12,22 @@ import java.math.RoundingMode; import java.text.MessageFormat; import java.util.ArrayList; import java.util.Collections; -import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.TimerTask; import java.util.Map.Entry; import java.util.Timer; import java.util.concurrent.ConcurrentHashMap; -import cn.hutool.core.collection.BoundedPriorityQueue; import cn.hutool.core.util.ObjectUtil; -import com.yomahub.liteflow.property.LiteflowConfig; +import cn.hutool.core.collection.BoundedPriorityQueue; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; + import com.yomahub.liteflow.entity.data.DataBus; +import com.yomahub.liteflow.property.LiteflowConfig; import com.yomahub.liteflow.entity.monitor.CompStatistics; /** 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 372524838..66844eb12 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 @@ -7,21 +7,26 @@ import java.util.Map.Entry; import java.util.regex.Matcher; import java.util.regex.Pattern; -import cn.hutool.core.util.StrUtil; -import com.yomahub.liteflow.entity.flow.*; -import com.yomahub.liteflow.exception.ExecutableItemNotFoundException; -import com.yomahub.liteflow.exception.ParseException; -import com.yomahub.liteflow.util.SpringAware; -import org.apache.commons.lang3.StringUtils; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import cn.hutool.core.util.StrUtil; + import com.yomahub.liteflow.core.NodeComponent; +import com.yomahub.liteflow.entity.flow.Chain; +import com.yomahub.liteflow.entity.flow.Condition; +import com.yomahub.liteflow.entity.flow.Executable; +import com.yomahub.liteflow.entity.flow.Node; +import com.yomahub.liteflow.entity.flow.ThenCondition; +import com.yomahub.liteflow.entity.flow.WhenCondition; +import com.yomahub.liteflow.exception.ExecutableItemNotFoundException; +import com.yomahub.liteflow.exception.ParseException; import com.yomahub.liteflow.flow.FlowBus; import com.yomahub.liteflow.spring.ComponentScaner; +import com.yomahub.liteflow.util.SpringAware; /** * xml形式的解析器 @@ -100,7 +105,7 @@ public abstract class XmlFlowParser { for (Iterator it = e.elementIterator(); it.hasNext();) { Element condE = it.next(); condArrayStr = condE.attributeValue("value"); - if (StringUtils.isBlank(condArrayStr)) { + if (StrUtil.isBlank(condArrayStr)) { continue; } chainNodeList = new ArrayList<>(); 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 c1be7e1f1..a5ac76a7d 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 @@ -2,7 +2,8 @@ package com.yomahub.liteflow.parser; import java.text.MessageFormat; -import org.apache.commons.lang3.StringUtils; +import cn.hutool.core.util.StrUtil; + import org.apache.curator.framework.CuratorFramework; import org.apache.curator.framework.CuratorFrameworkFactory; import org.apache.curator.framework.recipes.cache.NodeCache; @@ -10,6 +11,7 @@ import org.apache.curator.framework.recipes.cache.NodeCacheListener; import org.apache.curator.retry.RetryNTimes; import org.slf4j.Logger; import org.slf4j.LoggerFactory; + import com.yomahub.liteflow.exception.ParseException; /** @@ -45,7 +47,7 @@ public class ZookeeperXmlFlowParser extends XmlFlowParser{ String content = new String(client.getData().forPath(nodePath)); - if(StringUtils.isBlank(content)) { + if (StrUtil.isBlank(content)) { String error = MessageFormat.format("the node[{0}] value is empty", nodePath); throw new ParseException(error); } diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/spring/ComponentScaner.java b/liteflow-core/src/main/java/com/yomahub/liteflow/spring/ComponentScaner.java index 9375dcf99..2eafea230 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/spring/ComponentScaner.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/spring/ComponentScaner.java @@ -10,13 +10,14 @@ package com.yomahub.liteflow.spring; import java.util.HashMap; import java.util.Map; -import com.yomahub.liteflow.aop.ICmpAroundAspect; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.core.Ordered; import org.springframework.core.PriorityOrdered; + +import com.yomahub.liteflow.aop.ICmpAroundAspect; import com.yomahub.liteflow.core.NodeComponent; import com.yomahub.liteflow.util.LOGOPrinter; @@ -33,7 +34,7 @@ public class ComponentScaner implements BeanPostProcessor, PriorityOrdered { public static ICmpAroundAspect cmpAroundAspect; static { - //打印liteflow的LOGO + // 打印liteflow的LOGO LOGOPrinter.print(); } @@ -46,18 +47,18 @@ public class ComponentScaner implements BeanPostProcessor, PriorityOrdered { @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { Class clazz = bean.getClass(); - //组件的扫描发现,扫到之后缓存到类属性map中 - if(NodeComponent.class.isAssignableFrom(clazz)){ - LOG.info("component[{}] has been found",beanName); - NodeComponent nodeComponent = (NodeComponent)bean; + // 组件的扫描发现,扫到之后缓存到类属性map中 + if (NodeComponent.class.isAssignableFrom(clazz)) { + LOG.info("component[{}] has been found", beanName); + NodeComponent nodeComponent = (NodeComponent) bean; nodeComponent.setNodeId(beanName); nodeComponentMap.put(beanName, nodeComponent); } - //组件Aop的实现类加载 - if(ICmpAroundAspect.class.isAssignableFrom(clazz)){ - LOG.info("component aspect implement[{}] has been found",beanName); - cmpAroundAspect = (ICmpAroundAspect)bean; + // 组件Aop的实现类加载 + if (ICmpAroundAspect.class.isAssignableFrom(clazz)) { + LOG.info("component aspect implement[{}] has been found", beanName); + cmpAroundAspect = (ICmpAroundAspect) bean; } return bean; 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 13c4a3861..b4a889990 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 @@ -9,7 +9,6 @@ package com.yomahub.liteflow.util; import java.util.Collection; import java.util.Iterator; -import java.util.LinkedList; import java.util.Queue; import java.util.concurrent.ConcurrentLinkedQueue; 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 a0bedede6..73a94d17b 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 @@ -1,7 +1,5 @@ package com.yomahub.liteflow.util; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.beans.BeansException; import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.beans.factory.config.BeanDefinition; @@ -15,7 +13,7 @@ import org.springframework.context.ApplicationContextAware; * @author Bryan.Zhang */ public class SpringAware implements ApplicationContextAware { - private static final Logger log = LoggerFactory.getLogger(SpringAware.class); + private static ApplicationContext applicationContext = null; public SpringAware() { @@ -45,12 +43,12 @@ public class SpringAware implements ApplicationContextAware { return getBean(c.getName()); } - public static T registerOrGet(Class clazz){ + public static T registerOrGet(Class clazz) { T t = null; - try{ + try { t = SpringAware.getBean(clazz); - }catch (NoSuchBeanDefinitionException e){ - if(t == null){ + } catch (NoSuchBeanDefinitionException e) { + if (t == null) { t = SpringAware.registerBean(clazz); } } diff --git a/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/LiteflowExecutorInit.java b/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/LiteflowExecutorInit.java index 6099211ce..de3a6bd79 100644 --- a/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/LiteflowExecutorInit.java +++ b/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/LiteflowExecutorInit.java @@ -2,7 +2,6 @@ package com.yomahub.liteflow.springboot; import com.yomahub.liteflow.core.FlowExecutor; import org.springframework.beans.factory.InitializingBean; -import javax.annotation.Resource; /** * 执行器初始化类 diff --git a/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/LiteflowMainAutoConfiguration.java b/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/LiteflowMainAutoConfiguration.java index 3fe8a8a69..bc1c72eb3 100644 --- a/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/LiteflowMainAutoConfiguration.java +++ b/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/LiteflowMainAutoConfiguration.java @@ -1,25 +1,17 @@ package com.yomahub.liteflow.springboot; import cn.hutool.core.util.StrUtil; -import com.google.common.collect.Lists; + import com.yomahub.liteflow.core.FlowExecutor; -import com.yomahub.liteflow.entity.data.DataBus; import com.yomahub.liteflow.monitor.MonitorBus; import com.yomahub.liteflow.property.LiteflowConfig; -import com.yomahub.liteflow.spring.ComponentScaner; import com.yomahub.liteflow.util.SpringAware; -import org.apache.commons.lang3.StringUtils; + import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; -import org.springframework.context.annotation.PropertySource; - -import javax.swing.*; -import java.util.List; /** * 主要的业务装配器 @@ -34,23 +26,23 @@ import java.util.List; public class LiteflowMainAutoConfiguration { @Bean - public FlowExecutor flowExecutor(LiteflowConfig liteflowConfig){ - if(StrUtil.isNotBlank(liteflowConfig.getRuleSource())){ + public FlowExecutor flowExecutor(LiteflowConfig liteflowConfig) { + if (StrUtil.isNotBlank(liteflowConfig.getRuleSource())) { FlowExecutor flowExecutor = new FlowExecutor(); flowExecutor.setLiteflowConfig(liteflowConfig); return flowExecutor; - }else{ + } else { return null; } } @Bean - public LiteflowExecutorInit liteflowExecutorInit(FlowExecutor flowExecutor){ + public LiteflowExecutorInit liteflowExecutorInit(FlowExecutor flowExecutor) { return new LiteflowExecutorInit(flowExecutor); } @Bean - public MonitorBus monitorBus(LiteflowConfig liteflowConfig){ + public MonitorBus monitorBus(LiteflowConfig liteflowConfig) { return new MonitorBus(liteflowConfig); } } diff --git a/liteflow-test-spring/src/main/resources/applicationContext.xml b/liteflow-test-spring/src/main/resources/applicationContext.xml index 944baa722..cb763da99 100644 --- a/liteflow-test-spring/src/main/resources/applicationContext.xml +++ b/liteflow-test-spring/src/main/resources/applicationContext.xml @@ -16,7 +16,7 @@ - + diff --git a/pom.xml b/pom.xml index 3370bfacb..3a25ea5cf 100644 --- a/pom.xml +++ b/pom.xml @@ -41,10 +41,6 @@ UTF-8 1.8 - 3.4 - 4.1 - 2.4 - 1.2 5.0.9.RELEASE 1.7.21 1.2.17 @@ -59,21 +55,6 @@ - - org.apache.commons - commons-lang3 - ${commons.lang3.version} - - - org.apache.commons - commons-collections4 - ${commons-collections.version} - - - commons-io - commons-io - ${commons-io.version} - org.springframework spring-beans @@ -118,11 +99,6 @@ junit junit ${junit.version} - - - commons-logging - commons-logging - ${commons-logging.version} org.apache.curator