diff --git a/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/process/holder/SolonNodeHolder.java b/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/process/holder/SolonNodeHolder.java new file mode 100644 index 000000000..fc0105cd0 --- /dev/null +++ b/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/process/holder/SolonNodeHolder.java @@ -0,0 +1,35 @@ +package com.yomahub.liteflow.process.holder; + +import com.yomahub.liteflow.core.NodeComponent; +import org.noear.solon.core.AppContext; + +import java.util.HashMap; +import java.util.Map; + +/** + * 节点持有人(用于收集 Node 后统一注册) + * + * @author noear 2024/10/12 created + */ +public class SolonNodeHolder { + /** + * 作为 AppContext 附件(避免静态化) + * */ + public static SolonNodeHolder of(AppContext context) { + return context.attachOf(SolonNodeHolder.class, SolonNodeHolder::new); + } + + private SolonNodeHolder() { + + } + + private Map nodeMap = new HashMap<>(); + + public void put(String nodeId, NodeComponent nodeComponent) { + this.nodeMap.put(nodeId, nodeComponent); + } + + public Map getNodeMap() { + return nodeMap; + } +} diff --git a/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/integration/XPluginImpl.java b/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/integration/XPluginImpl.java index db3c8156d..056d064cd 100644 --- a/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/integration/XPluginImpl.java +++ b/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/integration/XPluginImpl.java @@ -5,9 +5,9 @@ import com.yomahub.liteflow.annotation.LiteflowMethod; import com.yomahub.liteflow.core.NodeComponent; import com.yomahub.liteflow.core.proxy.DeclWarpBean; import com.yomahub.liteflow.core.proxy.LiteFlowProxyUtil; -import com.yomahub.liteflow.flow.FlowBus; import com.yomahub.liteflow.lifecycle.LifeCycle; import com.yomahub.liteflow.lifecycle.LifeCycleHolder; +import com.yomahub.liteflow.process.holder.SolonNodeHolder; import com.yomahub.liteflow.solon.config.LiteflowAutoConfiguration; import com.yomahub.liteflow.solon.config.LiteflowMainAutoConfiguration; import com.yomahub.liteflow.solon.config.LiteflowMonitorProperty; @@ -42,6 +42,8 @@ public class XPluginImpl implements Plugin { return; } + SolonNodeHolder solonNodeHolder = SolonNodeHolder.of(context); + // 放到前面 context.beanMake(LiteflowProperty.class); context.beanMake(LiteflowMonitorProperty.class); @@ -49,22 +51,26 @@ public class XPluginImpl implements Plugin { context.beanMake(LiteflowMainAutoConfiguration.class); // 订阅生命周期实现类 - context.subWrapsOfType(LifeCycle.class, bw -> { - LifeCycle lifeCycle = bw.raw(); - LifeCycleHolder.addLifeCycle(lifeCycle); + context.subBeansOfType(LifeCycle.class, bean -> { + LifeCycleHolder.addLifeCycle(bean); }); - // 订阅 NodeComponent 组件 - context.subWrapsOfType(NodeComponent.class, bw -> { - NodeComponent node1 = bw.raw(); - node1.setNodeId(bw.name()); - FlowBus.addManagedNode(bw.name(), bw.raw()); + // 订阅 @Component 或别的方式产生的 NodeComponent + context.subWrapsOfType(NodeComponent.class, bw->{ + if (Utils.isNotEmpty(bw.name())) { + NodeComponent node1 = bw.raw(); + node1.setNodeId(bw.name()); + + solonNodeHolder.put(node1.getNodeId(), node1); + } }); Set> liteflowMethodClassSet = new HashSet<>(); + //添加 @LiteflowMethod 注解处理 context.beanExtractorAdd(LiteflowMethod.class, (bw, method, anno) -> { if (liteflowMethodClassSet.contains(bw.clz())) { + //避免重复处理类 return; } else { liteflowMethodClassSet.add(bw.clz()); @@ -76,22 +82,26 @@ public class XPluginImpl implements Plugin { for (DeclWarpBean declWarpBean : declWarpBeanList) { NodeComponent node1 = LiteFlowProxyUtil.proxy2NodeComponent(declWarpBean); - FlowBus.addManagedNode(node1.getNodeId(), node1); + + solonNodeHolder.put(node1.getNodeId(), node1); } }); + //添加 @LiteflowComponent 注解处理 context.beanBuilderAdd(LiteflowComponent.class, (clz, bw, anno) -> { - if (NodeComponent.class.isAssignableFrom(clz)) { - NodeComponent node1 = bw.raw(); + if(NodeComponent.class.isAssignableFrom(clz)) { String nodeId = Utils.annoAlias(anno.id(), anno.value()); + if (Utils.isNotEmpty(nodeId)) { + NodeComponent node1 = bw.raw(); + node1.setNodeId(nodeId); + node1.setName(anno.name()); - node1.setNodeId(nodeId); - node1.setName(anno.name()); - - FlowBus.addManagedNode(nodeId, node1); - } else { - context.beanExtractOrProxy(bw); // 尝试提取 LiteflowMethod 函数,并支持自动代理 + solonNodeHolder.put(nodeId, node1); + } } + + // 支持动态代理与函数提取 + context.beanExtractOrProxy(bw); }); } } \ No newline at end of file diff --git a/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/spi/solon/SolonContextCmpInit.java b/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/spi/solon/SolonContextCmpInit.java index b90697404..ee3d6a314 100644 --- a/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/spi/solon/SolonContextCmpInit.java +++ b/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/spi/solon/SolonContextCmpInit.java @@ -1,6 +1,9 @@ package com.yomahub.liteflow.spi.solon; +import com.yomahub.liteflow.flow.FlowBus; +import com.yomahub.liteflow.process.holder.SolonNodeHolder; import com.yomahub.liteflow.spi.ContextCmpInit; +import org.noear.solon.Solon; /** * Solon 环境容器上下文组件初始化实现(在 solon 里没有用上;机制不同) @@ -12,7 +15,9 @@ public class SolonContextCmpInit implements ContextCmpInit { @Override public void initCmp() { - // 已在 XPluginImpl 添加组件 + SolonNodeHolder solonNodeHolder = SolonNodeHolder.of(Solon.context()); + + solonNodeHolder.getNodeMap().forEach(FlowBus::addManagedNode); } @Override diff --git a/liteflow-testcase-el/liteflow-testcase-el-solon/src/test/java/com/yomahub/liteflow/test/builder/BuilderELSpringbootTest2.java b/liteflow-testcase-el/liteflow-testcase-el-solon/src/test/java/com/yomahub/liteflow/test/builder/BuilderELSpringbootTest2.java index 9362a869b..e670dc5f7 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-solon/src/test/java/com/yomahub/liteflow/test/builder/BuilderELSpringbootTest2.java +++ b/liteflow-testcase-el/liteflow-testcase-el-solon/src/test/java/com/yomahub/liteflow/test/builder/BuilderELSpringbootTest2.java @@ -6,7 +6,6 @@ import com.yomahub.liteflow.flow.LiteflowResponse; import com.yomahub.liteflow.test.BaseTest; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; import org.noear.solon.annotation.Inject; import org.noear.solon.test.SolonTest; diff --git a/pom.xml b/pom.xml index ee8c90939..49123d4c7 100644 --- a/pom.xml +++ b/pom.xml @@ -64,7 +64,7 @@ 1.14.10 1.8.13 1.2.3 - 2.9.2 + 3.0.1 4.1.84.Final 4.5.13 1.9.4 @@ -374,35 +374,7 @@ maven-site-plugin 3.7.1 - - - org.apache.maven.plugins - maven-javadoc-plugin - 3.0.1 - - - package - - jar - - - - - - - org.apache.maven.plugins - maven-gpg-plugin - 1.6 - - - sign-artifacts - verify - - sign - - - - + org.codehaus.mojo