Skip to content

Commit

Permalink
opt the remote invoke, support remote business overlay local product
Browse files Browse the repository at this point in the history
  • Loading branch information
Rocky Yu committed Oct 13, 2022
1 parent f93ac4b commit 57ab7e8
Show file tree
Hide file tree
Showing 14 changed files with 180 additions and 188 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,5 @@ public interface ILatticeRuntimeCache {

IBusinessExtCache getBusinessExtCache();

ITemplateCache getTemplateCache();
ITemplateCache getTemplateIndex();
}
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ public <T> T get(Class<T> klass, Object id, @Nullable Callable<? extends T> call
@Nullable
private <T> Object get0(Class<T> klass, Object id, @Nullable Callable<? extends T> callbackOnMiss) {
if (!isThreadLocalInit()) {
throw new LatticeRuntimeException("LATTICE-CORE-006");
return null;
}
Map<Object, Object> idToInstanceCache = cache.get(klass);
Object ret = idToInstanceCache == null ? null : idToInstanceCache.get(id);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,10 @@ public class RealizationSpec extends BaseSpec {
@Setter
private Class<IBusinessExt> businessExtClass;

@Getter
@Setter
private boolean remote;

/**
* The extension points current realization supported.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,16 @@ public abstract class TemplateSpec<T extends ITemplate> extends BaseSpec {
@Getter
private final List<RealizationSpec> 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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<String, ExtPriorityConfig> priorityMap) {
Expand Down Expand Up @@ -220,27 +218,39 @@ private Message checkBusinessConfig(BusinessConfig config) {
return null;
}

private void autoBuildBusinessConfig() {
public BusinessConfig autoAddAndBuildBusinessConfig(BusinessSpec businessSpec) {
List<ProductConfig> 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<ExtPriorityConfig> 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<ExtPriorityConfig> 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);
}
}

Expand Down Expand Up @@ -269,22 +279,23 @@ private void autoMakeupPriorityConfig(BusinessConfig businessConfig, List<Produc

private List<ExtPriorityConfig> autoBuildPriorityConfig(BusinessSpec business, RealizationSpec realization) {
List<ExtPriorityConfig> configs = Lists.newArrayList();


for (String extCode : realization.getExtensionCodes()) {
List<ProductSpec> 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<ExtPriority> 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;
}
Expand Down
Loading

0 comments on commit 57ab7e8

Please sign in to comment.