diff --git a/lattice-model/src/main/java/org/hiforce/lattice/cache/ILatticeRuntimeCache.java b/lattice-model/src/main/java/org/hiforce/lattice/cache/ILatticeRuntimeCache.java index cb795fd1..2e5d4f90 100644 --- a/lattice-model/src/main/java/org/hiforce/lattice/cache/ILatticeRuntimeCache.java +++ b/lattice-model/src/main/java/org/hiforce/lattice/cache/ILatticeRuntimeCache.java @@ -10,5 +10,5 @@ public interface ILatticeRuntimeCache { IBusinessExtCache getBusinessExtCache(); - ITemplateCache getTemplateCache(); + ITemplateCache getTemplateIndex(); } diff --git a/lattice-model/src/main/java/org/hiforce/lattice/cache/invoke/InvokeCache.java b/lattice-model/src/main/java/org/hiforce/lattice/cache/invoke/InvokeCache.java index 5c5f764f..709dac25 100644 --- a/lattice-model/src/main/java/org/hiforce/lattice/cache/invoke/InvokeCache.java +++ b/lattice-model/src/main/java/org/hiforce/lattice/cache/invoke/InvokeCache.java @@ -154,7 +154,7 @@ public T get(Class klass, Object id, @Nullable Callable call @Nullable private Object get0(Class klass, Object id, @Nullable Callable callbackOnMiss) { if (!isThreadLocalInit()) { - throw new LatticeRuntimeException("LATTICE-CORE-006"); + return null; } Map idToInstanceCache = cache.get(klass); Object ret = idToInstanceCache == null ? null : idToInstanceCache.get(id); diff --git a/lattice-model/src/main/java/org/hiforce/lattice/model/business/Template.java b/lattice-model/src/main/java/org/hiforce/lattice/model/business/Template.java index f39341d3..e7b8b9b4 100644 --- a/lattice-model/src/main/java/org/hiforce/lattice/model/business/Template.java +++ b/lattice-model/src/main/java/org/hiforce/lattice/model/business/Template.java @@ -25,7 +25,7 @@ public abstract class Template implements ITemplate { public Long getInternalId() { if (null == internalId) { ITemplateCache templateCache = LatticeCacheFactory.getInstance() - .getRuntimeCache().getTemplateCache(); + .getRuntimeCache().getTemplateIndex(); internalId = templateCache.getSecondKeyViaFirstKey(getCode()); } return internalId; diff --git a/lattice-model/src/main/java/org/hiforce/lattice/model/register/RealizationSpec.java b/lattice-model/src/main/java/org/hiforce/lattice/model/register/RealizationSpec.java index c5e043d6..cbf80e57 100644 --- a/lattice-model/src/main/java/org/hiforce/lattice/model/register/RealizationSpec.java +++ b/lattice-model/src/main/java/org/hiforce/lattice/model/register/RealizationSpec.java @@ -25,6 +25,10 @@ public class RealizationSpec extends BaseSpec { @Setter private Class businessExtClass; + @Getter + @Setter + private boolean remote; + /** * The extension points current realization supported. */ diff --git a/lattice-model/src/main/java/org/hiforce/lattice/model/register/TemplateSpec.java b/lattice-model/src/main/java/org/hiforce/lattice/model/register/TemplateSpec.java index 2cd784bc..ba800108 100644 --- a/lattice-model/src/main/java/org/hiforce/lattice/model/register/TemplateSpec.java +++ b/lattice-model/src/main/java/org/hiforce/lattice/model/register/TemplateSpec.java @@ -27,12 +27,16 @@ public abstract class TemplateSpec extends BaseSpec { @Getter private final List realizations = Lists.newArrayList(); + @Getter + @Setter + private boolean remote; + @Setter private Long internalId; public Long getInternalId() { if (null == internalId) { - ITemplateCache templateCache = LatticeCacheFactory.getInstance().getRuntimeCache().getTemplateCache(); + ITemplateCache templateCache = LatticeCacheFactory.getInstance().getRuntimeCache().getTemplateIndex(); internalId = templateCache.getSecondKeyViaFirstKey(getCode()); } return internalId; diff --git a/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/Lattice.java b/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/Lattice.java index 5f4d66ca..a14bb107 100644 --- a/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/Lattice.java +++ b/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/Lattice.java @@ -161,8 +161,6 @@ private void buildBusinessConfig() { //auto-config business and products. autoBuildBusinessConfig(); } - BusinessConfigCache.getInstance().getBusinessConfigs().forEach(p -> autoBuildUseCaseExtPriorityConfig(p, buildUseCaseExtPriorityConfigMap())); - BusinessConfigCache.getInstance().getBusinessConfigs().sort(Comparator.comparingInt(BusinessConfig::getPriority)); } private void autoBuildUseCaseExtPriorityConfig(BusinessConfig businessConfig, Map priorityMap) { @@ -220,27 +218,39 @@ private Message checkBusinessConfig(BusinessConfig config) { return null; } - private void autoBuildBusinessConfig() { + public BusinessConfig autoAddAndBuildBusinessConfig(BusinessSpec businessSpec) { List productConfigs = getAllRegisteredProducts().stream() .map(this::buildProductConfig) .collect(Collectors.toList()); - for (BusinessSpec businessSpec : getAllRegisteredBusinesses()) { - if (BusinessConfigCache.getInstance().getBusinessConfigs().stream() - .anyMatch(p -> StringUtils.equals(p.getBizCode(), businessSpec.getCode()))) { - continue; //不重复构建 - } - List priorityConfigs = businessSpec.getRealizations().stream() - .flatMap(p -> autoBuildPriorityConfig(businessSpec, p).stream()) - .filter(Objects::nonNull) - .collect(Collectors.toList()); - BusinessConfig businessConfig = BusinessConfigBuilder.builder() - .priority(businessSpec.getPriority()) - .bizCode(businessSpec.getCode()) - .install(productConfigs) - .extension(priorityConfigs) - .build(); - BusinessConfigCache.getInstance().getBusinessConfigs().add(businessConfig); + BusinessConfig businessConfig = BusinessConfigCache.getInstance().getBusinessConfigs().stream() + .filter(p -> StringUtils.equals(p.getBizCode(), businessSpec.getCode())) + .findFirst().orElse(null); + if (null != businessConfig) { + return businessConfig; + } + + List priorityConfigs = businessSpec.getRealizations().stream() + .flatMap(p -> autoBuildPriorityConfig(businessSpec, p).stream()) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + businessConfig = BusinessConfigBuilder.builder() + .priority(businessSpec.getPriority()) + .bizCode(businessSpec.getCode()) + .install(productConfigs) + .extension(priorityConfigs) + .build(); + BusinessConfigCache.getInstance().getBusinessConfigs().add(businessConfig); + + BusinessConfigCache.getInstance().getBusinessConfigs().forEach(p -> autoBuildUseCaseExtPriorityConfig(p, buildUseCaseExtPriorityConfigMap())); + BusinessConfigCache.getInstance().getBusinessConfigs().sort(Comparator.comparingInt(BusinessConfig::getPriority)); + + return businessConfig; + } + + private void autoBuildBusinessConfig() { + for (BusinessSpec businessSpec : getAllRegisteredBusinesses()) { + autoAddAndBuildBusinessConfig(businessSpec); } } @@ -269,22 +279,23 @@ private void autoMakeupPriorityConfig(BusinessConfig businessConfig, List autoBuildPriorityConfig(BusinessSpec business, RealizationSpec realization) { List configs = Lists.newArrayList(); + + for (String extCode : realization.getExtensionCodes()) { List products = getAllRegisteredProducts().stream() .filter(p -> p.getRealizations().stream(). anyMatch(real -> real.getExtensionCodes().contains(extCode))) .collect(Collectors.toList()); + ExtPriorityConfig config = new ExtPriorityConfig(); + config.setExtCode(extCode); + config.getPriorities().add(ExtPriority.of(business.getCode(), TemplateType.BUSINESS)); + configs.add(config); + if (CollectionUtils.isEmpty(products)) { continue; } - List extPriorities = Lists.newArrayList(); - extPriorities.addAll(products.stream() + config.getPriorities().addAll(0, products.stream() .map(this::buildExtPriority).collect(Collectors.toList())); - extPriorities.add(ExtPriority.of(business.getCode(), TemplateType.BUSINESS)); - ExtPriorityConfig priorityConfig = new ExtPriorityConfig(); - priorityConfig.setExtCode(extCode); - priorityConfig.getPriorities().addAll(extPriorities); - configs.add(priorityConfig); } return configs; } diff --git a/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/ability/delegate/BaseLatticeAbilityDelegate.java b/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/ability/delegate/BaseLatticeAbilityDelegate.java index 5aa61e25..4a8fc2e5 100644 --- a/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/ability/delegate/BaseLatticeAbilityDelegate.java +++ b/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/ability/delegate/BaseLatticeAbilityDelegate.java @@ -7,7 +7,6 @@ import org.hiforce.lattice.cache.ITemplateCache; import org.hiforce.lattice.cache.invoke.InvokeCache; import org.hiforce.lattice.exception.LatticeRuntimeException; -import org.hiforce.lattice.extension.ExtensionRemoteRunner; import org.hiforce.lattice.extension.ExtensionRunner; import org.hiforce.lattice.extension.RemoteExtensionRunnerBuilderBean; import org.hiforce.lattice.extension.RunnerItemEntry; @@ -30,10 +29,12 @@ import org.hiforce.lattice.runtime.ability.execute.filter.ExtensionFilter; import org.hiforce.lattice.runtime.ability.execute.filter.ProductFilter; import org.hiforce.lattice.runtime.ability.execute.runner.ExtensionJavaRunner; +import org.hiforce.lattice.runtime.ability.register.TemplateRegister; import org.hiforce.lattice.runtime.cache.LatticeRuntimeCache; -import org.hiforce.lattice.runtime.cache.exension.NotExistedRealization; import org.hiforce.lattice.runtime.cache.ability.AbilityCache; import org.hiforce.lattice.runtime.cache.exension.ExtensionInvokeCache; +import org.hiforce.lattice.runtime.cache.exension.NotExistedRealization; +import org.hiforce.lattice.runtime.cache.index.TemplateIndex; import org.hiforce.lattice.runtime.cache.key.ExtensionInvokeCacheKey; import org.hiforce.lattice.runtime.cache.key.ExtensionRunnerCacheKey; import org.hiforce.lattice.runtime.spi.IRunnerCollectionBuilder; @@ -44,7 +45,9 @@ import javax.annotation.Nonnull; import java.util.ArrayList; import java.util.List; +import java.util.Set; import java.util.function.Predicate; +import java.util.stream.Collectors; import static org.hiforce.lattice.runtime.ability.execute.RunnerCollection.ACCEPT_ALL; import static org.hiforce.lattice.utils.BizCodeUtils.isCodeMatched; @@ -67,6 +70,45 @@ public BaseLatticeAbilityDelegate(BaseLatticeAbility ability) { this.ability = ability; } + + private BusinessConfig loadBusinessConfig(String bizCode, ExtensionSpec extension) { + BusinessConfig businessConfig = Lattice.getInstance().getBusinessConfigByBizCode(bizCode); + if (null != businessConfig) { + return businessConfig; + } + if (extension.getProtocolType() == ProtocolType.LOCAL) { + return businessConfig; + } + if (!Lattice.getInstance().isSimpleMode()) { + return businessConfig; + } + BusinessSpec businessSpec = TemplateRegister.getInstance().getBusinesses().stream() + .filter(p -> StringUtils.equals(p.getCode(), bizCode)) + .findFirst().orElse(null); + if (null == businessConfig) { + businessSpec = new BusinessSpec(); + businessSpec.setCode(bizCode); + businessSpec.setRemote(true); + businessSpec.setName("Remote Business [" + bizCode + "]"); + TemplateIndex.getInstance().addTemplateIndex(businessSpec); + TemplateRegister.getInstance().getBusinesses().add(businessSpec); + } + + Set remoteExtensionSet = Lattice.getInstance().getAllRegisteredAbilities().stream() + .flatMap(p -> p.getAbilityInstances().stream()) + .flatMap(p -> p.getExtensions().stream()) + .filter(p -> p.getProtocolType() == ProtocolType.REMOTE) + .collect(Collectors.toSet()); + + RealizationSpec realization = new RealizationSpec(); + realization.setCode(businessSpec.getCode()); + realization.setRemote(true); + businessSpec.getRealizations().add(realization); + + remoteExtensionSet.forEach(p -> realization.getExtensionCodes().add(p.getCode())); + return Lattice.getInstance().autoAddAndBuildBusinessConfig(businessSpec); + } + public RunnerCollection loadExtensionRunners( @Nonnull String extCode, ExtensionFilter filter) { String bizCode = ability.getContext().getBizCode(); @@ -81,26 +123,15 @@ public RunnerCollection loadExtensionRunners( throw new LatticeRuntimeException("LATTICE-CORE-RT-0006", extCode); } - BusinessConfig businessConfig = Lattice.getInstance().getBusinessConfigByBizCode(bizCode); + BusinessConfig businessConfig = loadBusinessConfig(bizCode, extensionSpec); if (null == businessConfig) { if (Lattice.getInstance().isSimpleMode()) { - if (extensionSpec.getProtocolType() == ProtocolType.LOCAL) { - return buildDefaultRunnerCollection(extCode, onlyProduct); - } - cachedRunners = getCachedRemoteRunners(extCode, businessConfig); - if (null != cachedRunners) { - return RunnerCollection.of(bizObject, cachedRunners, ACCEPT_ALL); - } return buildDefaultRunnerCollection(extCode, onlyProduct); } throw new LatticeRuntimeException("LATTICE-CORE-RT-0012", bizCode); } - if (extensionSpec.getProtocolType() == ProtocolType.REMOTE) { - cachedRunners = getCachedRemoteRunners(extCode, businessConfig); - } else { - cachedRunners = getCachedLocalRunners(extCode, businessConfig, filter); - } + cachedRunners = getCachedExtensionRunners(extensionSpec, businessConfig, filter); if (cachedRunners == null) { return buildDefaultRunnerCollection(extCode, onlyProduct); } @@ -169,46 +200,8 @@ private static boolean isTemplateEffected(String bizCode, TemplateSpec template) return true; } - private List> getCachedRemoteRunners(String extCode, BusinessConfig businessConfig) { - String scenario = ability.getContext().getScenario(); - String bizCode = ability.getContext().getBizCode(); - LatticeRuntimeCache runtimeCache = Lattice.getInstance().getRuntimeCache(); - ExtensionRunnerCacheKey key = new ExtensionRunnerCacheKey( - extCode, bizCode, scenario, true, false); - - Object result = AbilityCache.getInstance().getCachedExtensionRunner(ability.getClass(), key); - if (result != null) { - if (result == NULL_OBJECT) { - return null; - } else { - return (List>) result; - } - } - RemoteExtensionRunnerBuilderBean builderBean = - SpringApplicationContextHolder.getSpringBean(RemoteExtensionRunnerBuilderBean.class); - if (null == builderBean) { - throw new LatticeRuntimeException("LATTICE-CORE-RT-0021", extCode); - } - - BusinessSpec businessSpec = null; - - if (null == businessConfig) { - businessSpec = new BusinessSpec(); - businessSpec.setType(TemplateType.BUSINESS); - businessSpec.setCode(ability.getContext().getBizCode()); - } else { - businessSpec = Lattice.getInstance() - .getRegisteredBusinessByCode(businessConfig.getBizCode()); - } - - ExtensionRemoteRunner runner = builderBean.build(ability, businessSpec, extCode, scenario); - RunnerItemEntry runerItem = new RunnerItemEntry(ability, businessSpec, runner); - AbilityCache.getInstance().doCacheExtensionRunner(ability.getClass(), key, Lists.newArrayList(runerItem)); - return Lists.newArrayList(runerItem); - } - - private List> getCachedLocalRunners( - String extCode, BusinessConfig businessConfig, ExtensionFilter filter) { + private List> getCachedExtensionRunners( + ExtensionSpec extension, BusinessConfig businessConfig, ExtensionFilter filter) { String scenario = ability.getContext().getScenario(); String bizCode = ability.getContext().getBizCode(); @@ -218,7 +211,7 @@ private List> getCachedLocalRunners( LatticeRuntimeCache runtimeCache = Lattice.getInstance().getRuntimeCache(); // cache ExtensionRunnerCacheKey key = new ExtensionRunnerCacheKey( - extCode, bizCode, scenario, supportCustomization, isHorizontal); + extension.getCode(), bizCode, scenario, supportCustomization, isHorizontal); Object result = AbilityCache.getInstance().getCachedExtensionRunner(ability.getClass(), key); if (result != null) { @@ -230,7 +223,7 @@ private List> getCachedLocalRunners( } ExtPriorityConfig priorityConfig = businessConfig.getExtensions().stream() - .filter(p -> StringUtils.equals(p.getExtCode(), extCode)) + .filter(p -> StringUtils.equals(p.getExtCode(), extension.getCode())) .findFirst().orElse(null); if (null == priorityConfig) { AbilityCache.getInstance().doCacheExtensionRunner(ability.getClass(), key, NULL_OBJECT); @@ -238,22 +231,27 @@ private List> getCachedLocalRunners( } List> extensionRunners = new ArrayList<>(); - for (ExtPriority config : businessConfig.getExtPriorityByCode(extCode, isHorizontal)) { + for (ExtPriority config : businessConfig.getExtPriorityByCode(extension.getCode(), isHorizontal)) { if (null == config) continue; BizSessionContext bizSessionContext = InvokeCache.instance().get(BizSessionContext.class, BizSessionContext.class); if (null == bizSessionContext) { + RunnerItemEntry runnerItemEntry = + buildExtensionRunnerItemEntry(extension, config, bizCode, scenario); + if (null != runnerItemEntry) { + extensionRunners.add(runnerItemEntry); + } continue; } + if (config.getType().isHorizontal() && config.getType().needInstall()) { if (!businessConfig.productInstalled(config.getCode())) { continue; } } - RunnerItemEntry runnerItemEntry = - buildExtensionJavaRunnerItemEntry(extCode, config, bizCode, scenario); + buildExtensionRunnerItemEntry(extension, config, bizCode, scenario); if (null != runnerItemEntry) { extensionRunners.add(runnerItemEntry); } @@ -262,15 +260,47 @@ private List> getCachedLocalRunners( return extensionRunners; } - private RunnerItemEntry buildExtensionJavaRunnerItemEntry( - String extensionCode, ExtPriority config, String bizCode, String scenario) { + private ExtensionRunner buildRemoteExtensionRunner( + TemplateSpec template, ExtensionSpec extension, String bizCode, String scenario) { + if (!template.isRemote()) { + return buildLocalExtensionRunner(template, extension, bizCode, scenario); + } - boolean supportCustomization = ability.supportCustomization(); + RemoteExtensionRunnerBuilderBean builderBean = + SpringApplicationContextHolder.getSpringBean(RemoteExtensionRunnerBuilderBean.class); + if (null == builderBean) { + throw new LatticeRuntimeException("LATTICE-CORE-RT-0021", extension.getCode()); + } + return builderBean.build(ability, template, extension.getCode(), scenario); + } + + private ExtensionRunner buildLocalExtensionRunner( + TemplateSpec template, ExtensionSpec extension, String bizCode, String scenario) { ExtensionRunner extensionJavaRunner = null; + + IBusinessExt extImpl = loadExtensionRealization(bizCode, scenario, template, extension.getCode()); + if (null == extImpl) { + if (log.isInfoEnabled()) { + log.info("[Lattice]The ExtensionFacade or ExtensionImplement is null. bizCode: [{}], extCode: [{}]", + bizCode, extension.getCode()); + } + extensionJavaRunner = null; + } else { + extensionJavaRunner = new ExtensionJavaRunner(extension.getCode(), extImpl); + } + return extensionJavaRunner; + } + + private RunnerItemEntry buildExtensionRunnerItemEntry( + ExtensionSpec extension, ExtPriority config, String bizCode, String scenario) { + + boolean supportCustomization = ability.supportCustomization(); + + ExtensionRunner runner = null; if (null == config) { if (log.isInfoEnabled()) { - log.info(Message.code("LATTICE-CORE-RT-0013", extensionCode, bizCode).getText()); + log.info(Message.code("LATTICE-CORE-RT-0013", extension.getCode(), bizCode).getText()); } return null; } @@ -278,22 +308,17 @@ private RunnerItemEntry buildExtensionJavaRunnerItemEntry( getBusinessSpec(config.getCode()) : getHorizontalTemplateSpec(config.getCode()); if (supportCustomization) { - IBusinessExt extImpl = loadExtensionRealization(bizCode, scenario, template, extensionCode); - if (null == extImpl) { - if (log.isInfoEnabled()) { - log.info("[Lattice]The ExtensionFacade or ExtensionImplement is null. bizCode: [{}], extCode: [{}]", - bizCode, extensionCode); - } - extensionJavaRunner = null; - } else { - extensionJavaRunner = new ExtensionJavaRunner(extensionCode, extImpl); + if (extension.getProtocolType() == ProtocolType.LOCAL) { + runner = buildLocalExtensionRunner(template, extension, bizCode, scenario); + } else if (extension.getProtocolType() == ProtocolType.REMOTE) { + runner = buildRemoteExtensionRunner(template, extension, bizCode, scenario); } } else { - extensionJavaRunner = new ExtensionJavaRunner(extensionCode, ability.getDefaultRealization()); + runner = new ExtensionJavaRunner(extension.getCode(), ability.getDefaultRealization()); } - if (extensionJavaRunner != null) { - return new RunnerItemEntry<>(ability, template, extensionJavaRunner); + if (runner != null) { + return new RunnerItemEntry<>(ability, template, runner); } return null; } @@ -414,7 +439,7 @@ private IBusinessExt internalLoadExtensionRealization( public IBusinessExt findIExtensionPointsFacadeViaScenario(String scenario, TemplateSpec template, String extPointCode) { IBusinessExt extFacade = null; - ITemplateCache templateCache = Lattice.getInstance().getRuntimeCache().getTemplateCache(); + ITemplateCache templateCache = Lattice.getInstance().getRuntimeCache().getTemplateIndex(); List realizationSpecs = Lattice.getInstance().getAllRegisteredRealizations(); diff --git a/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/ability/register/TemplateRegister.java b/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/ability/register/TemplateRegister.java index ff78c3ca..feb0f111 100644 --- a/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/ability/register/TemplateRegister.java +++ b/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/ability/register/TemplateRegister.java @@ -12,6 +12,7 @@ import org.hiforce.lattice.model.business.IBusiness; import org.hiforce.lattice.model.register.*; import org.hiforce.lattice.model.scenario.ScenarioRequest; +import org.hiforce.lattice.runtime.cache.index.TemplateIndex; import org.hiforce.lattice.utils.BizCodeUtils; import org.hiforce.lattice.utils.BusinessExtUtils; @@ -77,6 +78,7 @@ public List registerBusinesses(Set classSet) { businessSpec.getRealizations().addAll(realizations.stream() .filter(p -> BizCodeUtils.isCodesMatched(p.getCode(), businessSpec.getCode())) .collect(Collectors.toList())); + TemplateIndex.getInstance().addTemplateIndex(businessSpec); businesses.add(businessSpec); } return businesses; diff --git a/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/cache/LatticeRuntimeCache.java b/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/cache/LatticeRuntimeCache.java index aebdfb58..8e7df1dd 100644 --- a/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/cache/LatticeRuntimeCache.java +++ b/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/cache/LatticeRuntimeCache.java @@ -7,9 +7,8 @@ import org.hiforce.lattice.runtime.cache.ability.AbilityCache; import org.hiforce.lattice.runtime.cache.config.BusinessConfigCache; import org.hiforce.lattice.runtime.cache.exension.ExtensionInvokeCache; -import org.hiforce.lattice.runtime.cache.spec.ExtensionCache; -import org.hiforce.lattice.runtime.cache.template.TemplateCache; -import org.hiforce.lattice.runtime.cache.template.TemplateCodeCache; +import org.hiforce.lattice.runtime.cache.exension.ExtensionCache; +import org.hiforce.lattice.runtime.cache.index.TemplateIndex; /** * @author Rocky Yu @@ -20,10 +19,7 @@ public class LatticeRuntimeCache implements ILatticeRuntimeCache, LatticeCache { @Getter - private final TemplateCodeCache templateCodeCache = TemplateCodeCache.getInstance(); - - @Getter - private final TemplateCache templateCache = TemplateCache.getInstance(); + private final TemplateIndex templateIndex = TemplateIndex.getInstance(); @Getter private final ExtensionCache extensionCache = ExtensionCache.getInstance(); @@ -45,16 +41,14 @@ public class LatticeRuntimeCache implements ILatticeRuntimeCache, LatticeCache { public synchronized void init() { getAbilityCache().init(); getExtensionCache().init(); - getTemplateCodeCache().init(); - getTemplateCache().init(); + getTemplateIndex().init(); getInvokeCache().init(); getBusinessConfigCache().init(); getBusinessExtCache().init(); } public void clear() { - getTemplateCodeCache().clear(); - getTemplateCache().clear(); + getTemplateIndex().clear(); getExtensionCache().clear(); getAbilityCache().clear(); getInvokeCache().clear(); diff --git a/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/cache/spec/ExtensionCache.java b/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/cache/exension/ExtensionCache.java similarity index 93% rename from lattice-runtime/src/main/java/org/hiforce/lattice/runtime/cache/spec/ExtensionCache.java rename to lattice-runtime/src/main/java/org/hiforce/lattice/runtime/cache/exension/ExtensionCache.java index 2957c0f2..d1f57099 100644 --- a/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/cache/spec/ExtensionCache.java +++ b/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/cache/exension/ExtensionCache.java @@ -1,10 +1,11 @@ -package org.hiforce.lattice.runtime.cache.spec; +package org.hiforce.lattice.runtime.cache.exension; import com.google.common.collect.Maps; import lombok.Getter; import org.hiforce.lattice.model.register.ExtensionSpec; import org.hiforce.lattice.runtime.Lattice; import org.hiforce.lattice.runtime.cache.LatticeCache; +import org.hiforce.lattice.runtime.cache.index.ExtensionIndex; import java.util.List; import java.util.Map; diff --git a/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/cache/spec/ExtensionIndex.java b/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/cache/index/ExtensionIndex.java similarity index 89% rename from lattice-runtime/src/main/java/org/hiforce/lattice/runtime/cache/spec/ExtensionIndex.java rename to lattice-runtime/src/main/java/org/hiforce/lattice/runtime/cache/index/ExtensionIndex.java index 25a0e88a..d37ffaa4 100644 --- a/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/cache/spec/ExtensionIndex.java +++ b/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/cache/index/ExtensionIndex.java @@ -1,4 +1,4 @@ -package org.hiforce.lattice.runtime.cache.spec; +package org.hiforce.lattice.runtime.cache.index; import org.hiforce.lattice.model.register.ExtensionSpec; import org.hiforce.lattice.runtime.cache.LatticeCache; diff --git a/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/cache/template/TemplateCache.java b/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/cache/index/TemplateIndex.java similarity index 57% rename from lattice-runtime/src/main/java/org/hiforce/lattice/runtime/cache/template/TemplateCache.java rename to lattice-runtime/src/main/java/org/hiforce/lattice/runtime/cache/index/TemplateIndex.java index 181b7e88..88771793 100644 --- a/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/cache/template/TemplateCache.java +++ b/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/cache/index/TemplateIndex.java @@ -1,9 +1,10 @@ -package org.hiforce.lattice.runtime.cache.template; +package org.hiforce.lattice.runtime.cache.index; import org.hiforce.lattice.cache.ITemplateCache; -import org.hiforce.lattice.model.business.IProduct; +import org.hiforce.lattice.model.business.ITemplate; import org.hiforce.lattice.model.register.BaseSpec; +import org.hiforce.lattice.model.register.TemplateSpec; import org.hiforce.lattice.runtime.Lattice; import org.hiforce.lattice.runtime.cache.LatticeCache; import org.hiforce.lattice.runtime.cache.MultiKeyCache; @@ -13,32 +14,37 @@ * @author zhenxin.yzx ( Rocky ) * @since 2018/7/30 */ -public class TemplateCache extends MultiKeyCache +public class TemplateIndex extends MultiKeyCache implements ITemplateCache, LatticeCache { - private static TemplateCache instance; + private static TemplateIndex instance; - public static TemplateCache getInstance() { + public static TemplateIndex getInstance() { if (null == instance) { - instance = new TemplateCache(); + instance = new TemplateIndex(); } return instance; } - private TemplateCache() { + private TemplateIndex() { super(120); } + @SuppressWarnings("all") + public void addTemplateIndex(TemplateSpec template) { + put(template.getCode(),SequenceGenerator.next(ITemplate.class.getName()), template); + } + @Override public void init() { Lattice.getInstance().getAllRegisteredProducts() - .forEach(p -> put(p.getCode(), SequenceGenerator.next(IProduct.class.getName()), p)); + .forEach(p -> put(p.getCode(), SequenceGenerator.next(ITemplate.class.getName()), p)); Lattice.getInstance().getAllRegisteredUseCases() - .forEach(p -> put(p.getCode(), SequenceGenerator.next(IProduct.class.getName()), p)); + .forEach(p -> put(p.getCode(), SequenceGenerator.next(ITemplate.class.getName()), p)); Lattice.getInstance().getAllRegisteredBusinesses() - .forEach(p -> put(p.getCode(), SequenceGenerator.next(IProduct.class.getName()), p)); + .forEach(p -> put(p.getCode(), SequenceGenerator.next(ITemplate.class.getName()), p)); } } diff --git a/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/cache/key/BaseObjectCacheKey.java b/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/cache/key/BaseObjectCacheKey.java index 07b2b708..a11672fa 100644 --- a/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/cache/key/BaseObjectCacheKey.java +++ b/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/cache/key/BaseObjectCacheKey.java @@ -111,8 +111,8 @@ protected void buildObjectCacheUniqueId() { return; LatticeRuntimeCache runtimeCache = Lattice.getInstance().getRuntimeCache(); if (null == bizCodeIndex) { - bizCodeIndex = null == getBizCode() ? null : runtimeCache.getTemplateCodeCache() - .getCodeIndex(getBizCode()); + bizCodeIndex = null == getBizCode() ? null : runtimeCache.getTemplateIndex() + .getSecondKeyViaFirstKey(getBizCode()); } if (null == extCodeIndex) { extCodeIndex = null == getExtensionCode() ? null : runtimeCache @@ -129,7 +129,7 @@ protected void buildObjectCacheUniqueId() { } if (null == templateIndex || templateIndex <= 0) { templateIndex = null == getTemplateCode() ? null : runtimeCache - .getTemplateCache().getSecondKeyViaFirstKey(getTemplateCode()); + .getTemplateIndex().getSecondKeyViaFirstKey(getTemplateCode()); } generateUniqueId(); } diff --git a/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/cache/template/TemplateCodeCache.java b/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/cache/template/TemplateCodeCache.java deleted file mode 100644 index 5d173d70..00000000 --- a/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/cache/template/TemplateCodeCache.java +++ /dev/null @@ -1,55 +0,0 @@ -package org.hiforce.lattice.runtime.cache.template; - -import org.hiforce.lattice.model.business.BusinessTemplate; -import org.hiforce.lattice.model.register.BaseSpec; -import org.hiforce.lattice.runtime.Lattice; -import org.hiforce.lattice.runtime.cache.LatticeCache; -import org.hiforce.lattice.sequence.SequenceGenerator; - -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -/** - * @author Rocky Yu - * @since 2022/10/12 - */ -public class TemplateCodeCache implements LatticeCache { - - private static TemplateCodeCache instance; - private final Map TEMPLATE_CODE_IDX_MAP = new ConcurrentHashMap<>(120); - - - private TemplateCodeCache() { - - } - - public static TemplateCodeCache getInstance() { - if (null == instance) { - instance = new TemplateCodeCache(); - } - return instance; - } - - public Long getCodeIndex(String code) { - return TEMPLATE_CODE_IDX_MAP.get(code); - } - - - @Override - public void init() { - Lattice.getInstance().getAllRegisteredBusinesses().stream() - .map(BaseSpec::getCode) - .forEach(bizCode -> TEMPLATE_CODE_IDX_MAP.put(bizCode, SequenceGenerator.next(BusinessTemplate.class.getName()))); - Lattice.getInstance().getAllRegisteredProducts().stream() - .map(BaseSpec::getCode) - .forEach(bizCode -> TEMPLATE_CODE_IDX_MAP.put(bizCode, SequenceGenerator.next(BusinessTemplate.class.getName()))); - Lattice.getInstance().getAllRegisteredUseCases().stream() - .map(BaseSpec::getCode) - .forEach(bizCode -> TEMPLATE_CODE_IDX_MAP.put(bizCode, SequenceGenerator.next(BusinessTemplate.class.getName()))); - } - - @Override - public void clear() { - - } -}