From 2b6534411d2c92a2eb20d057a4486d2a62d3b661 Mon Sep 17 00:00:00 2001 From: HzjNeverStop <441627022@qq.com> Date: Tue, 19 Jul 2022 16:41:43 +0800 Subject: [PATCH] Support module application api (#1001) --- .../sofa/isle/ApplicationRuntimeModel.java | 23 +++++++--- .../alipay/sofa/isle/IsleDeploymentModel.java | 42 +++++++++++++++++++ 2 files changed, 59 insertions(+), 6 deletions(-) create mode 100644 sofa-boot-project/sofa-boot-core/isle-sofa-boot/src/main/java/com/alipay/sofa/isle/IsleDeploymentModel.java diff --git a/sofa-boot-project/sofa-boot-core/isle-sofa-boot/src/main/java/com/alipay/sofa/isle/ApplicationRuntimeModel.java b/sofa-boot-project/sofa-boot-core/isle-sofa-boot/src/main/java/com/alipay/sofa/isle/ApplicationRuntimeModel.java index 0f6c52ab8..0b53c018e 100644 --- a/sofa-boot-project/sofa-boot-core/isle-sofa-boot/src/main/java/com/alipay/sofa/isle/ApplicationRuntimeModel.java +++ b/sofa-boot-project/sofa-boot-core/isle-sofa-boot/src/main/java/com/alipay/sofa/isle/ApplicationRuntimeModel.java @@ -16,24 +16,27 @@ */ package com.alipay.sofa.isle; +import com.alipay.sofa.isle.deployment.DeployRegistry; +import com.alipay.sofa.isle.deployment.DeploymentDescriptor; +import com.alipay.sofa.isle.deployment.ModuleDeploymentValidator; +import com.alipay.sofa.runtime.spi.component.SofaRuntimeContext; +import org.springframework.context.ApplicationContext; +import org.springframework.lang.NonNull; + import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.concurrent.CopyOnWriteArrayList; -import com.alipay.sofa.isle.deployment.DeployRegistry; -import com.alipay.sofa.isle.deployment.DeploymentDescriptor; -import com.alipay.sofa.isle.deployment.ModuleDeploymentValidator; -import com.alipay.sofa.runtime.spi.component.SofaRuntimeContext; - /** * contains all deployments of the application * * @author khotyn 7/25/14 8:15 PM */ -public class ApplicationRuntimeModel { +public class ApplicationRuntimeModel implements IsleDeploymentModel { /** deploys */ private final List deploys = new ArrayList<>(); /** inactive deploys */ @@ -131,4 +134,12 @@ public void addInstalled(DeploymentDescriptor installed) { public List getInstalled() { return installed; } + + @Override + @NonNull + public Map getModuleApplicationContextMap() { + Map result = new HashMap<>(8); + installed.forEach(deploymentDescriptor -> result.put(deploymentDescriptor.getModuleName(), deploymentDescriptor.getApplicationContext())); + return result; + } } diff --git a/sofa-boot-project/sofa-boot-core/isle-sofa-boot/src/main/java/com/alipay/sofa/isle/IsleDeploymentModel.java b/sofa-boot-project/sofa-boot-core/isle-sofa-boot/src/main/java/com/alipay/sofa/isle/IsleDeploymentModel.java new file mode 100644 index 000000000..8ecd7431c --- /dev/null +++ b/sofa-boot-project/sofa-boot-core/isle-sofa-boot/src/main/java/com/alipay/sofa/isle/IsleDeploymentModel.java @@ -0,0 +1,42 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alipay.sofa.isle; + +import org.springframework.context.ApplicationContext; +import org.springframework.lang.NonNull; + +import java.util.Map; + +/** + * An interface to obtain isle deployments + *

Note it can only be aware when Isle deployments have start installing + *

{@code
+ *     IsleDeploymentModel model = applicationContext.getBean(SofaBootConstants.APPLICATION, IsleDeploymentModel.class);
+ * }
+ * @author huzijie + * @version IsleDeploymentModel.java, v 0.1 2022年07月11日 11:28 AM huzijie Exp $ + */ +public interface IsleDeploymentModel { + + /** + * Get All module application context map, the key is module name, the value is applicationContext + *

Note the result will change when isle deployments is installing + * @return the result + */ + @NonNull + Map getModuleApplicationContextMap(); +}