This is an automated email from the ASF dual-hosted git repository.
liujun pushed a commit to branch 3.1
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/3.1 by this push:
new 1dfd06b381 Fix concurrent issue in scope model (#11525)
1dfd06b381 is described below
commit 1dfd06b381f4f171efa1141afe79a8aa433ca987
Author: Albumen Kevin <[email protected]>
AuthorDate: Thu Feb 16 10:40:31 2023 +0800
Fix concurrent issue in scope model (#11525)
---
.../apache/dubbo/common/config/Environment.java | 2 +-
.../apache/dubbo/rpc/model/ApplicationModel.java | 418 +++++++++++----------
.../org/apache/dubbo/rpc/model/FrameworkModel.java | 161 ++++----
.../org/apache/dubbo/rpc/model/ModuleModel.java | 137 +++----
.../org/apache/dubbo/rpc/model/ScopeModel.java | 66 ++--
.../common/CommonScopeModelInitializerTest.java | 6 +-
.../common/config/ConfigurationUtilsTest.java | 6 +-
.../dubbo/common/config/EnvironmentTest.java | 4 +-
.../common/extension/ExtensionDirectorTest.java | 24 +-
.../inject/AdaptiveExtensionInjectorTest.java | 2 +-
.../reporter/FrameworkStatusReportServiceTest.java | 4 +-
.../dubbo/rpc/model/ApplicationModelTest.java | 10 +-
.../apache/dubbo/rpc/model/FrameworkModelTest.java | 2 +-
.../rpc/model/FrameworkServiceRepositoryTest.java | 6 +-
.../apache/dubbo/rpc/model/ModuleModelTest.java | 14 +-
.../rpc/model/ModuleServiceRepositoryTest.java | 6 +-
.../rpc/model/ReflectionServiceDescriptorTest.java | 2 +-
.../ScopeModelAwareExtensionProcessorTest.java | 6 +-
.../org/apache/dubbo/rpc/model/ScopeModelTest.java | 2 +-
.../apache/dubbo/rpc/model/ScopeModelUtilTest.java | 6 +-
.../dubbo/rpc/model/ServiceRepositoryTest.java | 6 +-
.../config/ConfigScopeModelInitializerTest.java | 6 +-
.../apache/dubbo/config/ReferenceConfigTest.java | 8 +-
.../dubbo/config/bootstrap/MultiInstanceTest.java | 2 +-
.../customize/DubboSpringInitCustomizerTest.java | 2 +-
.../dubbo/qos/command/impl/InvokeTelnetTest.java | 4 +-
.../apache/dubbo/qos/command/impl/LiveTest.java | 2 +-
.../org/apache/dubbo/qos/command/impl/LsTest.java | 2 +-
.../apache/dubbo/qos/command/impl/OfflineTest.java | 2 +-
.../apache/dubbo/qos/command/impl/OnlineTest.java | 2 +-
.../qos/command/impl/PublishMetadataTest.java | 2 +-
.../qos/command/impl/SerializeCheckStatusTest.java | 1 +
.../command/impl/SerializeWarnedClassesTest.java | 1 +
.../qos/command/util/SerializeCheckUtilsTest.java | 1 +
.../metadata/MetadataServiceNameMappingTest.java | 4 +-
.../dubbo/DecodeableRpcInvocationTest.java | 2 +-
.../rpc/protocol/injvm/InjvmClassLoaderTest.java | 5 +-
.../rpc/protocol/injvm/InjvmDeepCopyTest.java | 3 +-
.../tri/service/TriBuiltinServiceTest.java | 4 +-
39 files changed, 489 insertions(+), 454 deletions(-)
diff --git
a/dubbo-common/src/main/java/org/apache/dubbo/common/config/Environment.java
b/dubbo-common/src/main/java/org/apache/dubbo/common/config/Environment.java
index de7ec54b9a..070a94ce85 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/config/Environment.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/config/Environment.java
@@ -315,7 +315,7 @@ public class Environment extends LifecycleAdapter
implements ApplicationExt {
return localMigrationRule;
}
- public void refreshClassLoaders() {
+ public synchronized void refreshClassLoaders() {
propertiesConfiguration.refresh();
loadMigrationRule();
this.globalConfiguration = null;
diff --git
a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ApplicationModel.java
b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ApplicationModel.java
index 446d3d16fc..31c11f6aca 100644
---
a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ApplicationModel.java
+++
b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ApplicationModel.java
@@ -56,20 +56,19 @@ public class ApplicationModel extends ScopeModel {
public static final String NAME = "ApplicationModel";
private final List<ModuleModel> moduleModels = new
CopyOnWriteArrayList<>();
private final List<ModuleModel> pubModuleModels = new
CopyOnWriteArrayList<>();
- private Environment environment;
- private ConfigManager configManager;
- private ServiceRepository serviceRepository;
- private ApplicationDeployer deployer;
+ private volatile Environment environment;
+ private volatile ConfigManager configManager;
+ private volatile ServiceRepository serviceRepository;
+ private volatile ApplicationDeployer deployer;
private final FrameworkModel frameworkModel;
- private ModuleModel internalModule;
+ private final ModuleModel internalModule;
private volatile ModuleModel defaultModule;
// internal module index is 0, default module index is 1
- private AtomicInteger moduleIndex = new AtomicInteger(0);
- private Object moduleLock = new Object();
+ private final AtomicInteger moduleIndex = new AtomicInteger(0);
// --------- static methods ----------//
@@ -92,143 +91,47 @@ public class ApplicationModel extends ScopeModel {
return FrameworkModel.defaultModel().defaultApplication();
}
- /**
- * @deprecated use {@link ServiceRepository#allConsumerModels()}
- */
- @Deprecated
- public static Collection<ConsumerModel> allConsumerModels() {
- return
defaultModel().getApplicationServiceRepository().allConsumerModels();
- }
-
- /**
- * @deprecated use {@link ServiceRepository#allProviderModels()}
- */
- @Deprecated
- public static Collection<ProviderModel> allProviderModels() {
- return
defaultModel().getApplicationServiceRepository().allProviderModels();
- }
-
- /**
- * @deprecated use {@link
FrameworkServiceRepository#lookupExportedService(String)}
- */
- @Deprecated
- public static ProviderModel getProviderModel(String serviceKey) {
- return
defaultModel().getDefaultModule().getServiceRepository().lookupExportedService(serviceKey);
- }
-
- /**
- * @deprecated ConsumerModel should fetch from context
- */
- @Deprecated
- public static ConsumerModel getConsumerModel(String serviceKey) {
- return
defaultModel().getDefaultModule().getServiceRepository().lookupReferredService(serviceKey);
- }
-
- /**
- * @deprecated Replace to {@link ScopeModel#getModelEnvironment()}
- */
- @Deprecated
- public static Environment getEnvironment() {
- return defaultModel().getModelEnvironment();
- }
-
- /**
- * @deprecated Replace to {@link
ApplicationModel#getApplicationConfigManager()}
- */
- @Deprecated
- public static ConfigManager getConfigManager() {
- return defaultModel().getApplicationConfigManager();
- }
-
- /**
- * @deprecated Replace to {@link
ApplicationModel#getApplicationServiceRepository()}
- */
- @Deprecated
- public static ServiceRepository getServiceRepository() {
- return defaultModel().getApplicationServiceRepository();
- }
-
- /**
- * @deprecated Replace to {@link
ApplicationModel#getApplicationExecutorRepository()}
- */
- @Deprecated
- public static ExecutorRepository getExecutorRepository() {
- return defaultModel().getApplicationExecutorRepository();
- }
-
- /**
- * @deprecated Replace to {@link ApplicationModel#getCurrentConfig()}
- */
- @Deprecated
- public static ApplicationConfig getApplicationConfig() {
- return defaultModel().getCurrentConfig();
- }
-
- /**
- * @deprecated Replace to {@link ApplicationModel#getApplicationName()}
- */
- @Deprecated
- public static String getName() {
- return defaultModel().getCurrentConfig().getName();
- }
-
- /**
- * @deprecated Replace to {@link ApplicationModel#getApplicationName()}
- */
- @Deprecated
- public static String getApplication() {
- return getName();
- }
-
- // only for unit test
- @Deprecated
- public static void reset() {
- if (FrameworkModel.defaultModel().getDefaultAppModel() != null) {
- FrameworkModel.defaultModel().getDefaultAppModel().destroy();
- }
- }
-
// ------------- instance methods ---------------//
- public ApplicationModel(FrameworkModel frameworkModel) {
+ protected ApplicationModel(FrameworkModel frameworkModel) {
this(frameworkModel, false);
}
- public ApplicationModel(FrameworkModel frameworkModel, boolean isInternal)
{
+ protected ApplicationModel(FrameworkModel frameworkModel, boolean
isInternal) {
super(frameworkModel, ExtensionScope.APPLICATION, isInternal);
- Assert.notNull(frameworkModel, "FrameworkModel can not be null");
- this.frameworkModel = frameworkModel;
- frameworkModel.addApplication(this);
- if (LOGGER.isInfoEnabled()) {
- LOGGER.info(getDesc() + " is created");
- }
- initialize();
- Assert.notNull(getApplicationServiceRepository(),
"ApplicationServiceRepository can not be null");
- Assert.notNull(getApplicationConfigManager(),
"ApplicationConfigManager can not be null");
- Assert.assertTrue(getApplicationConfigManager().isInitialized(),
"ApplicationConfigManager can not be initialized");
- }
+ synchronized (instLock) {
+ Assert.notNull(frameworkModel, "FrameworkModel can not be null");
+ this.frameworkModel = frameworkModel;
+ frameworkModel.addApplication(this);
+ if (LOGGER.isInfoEnabled()) {
+ LOGGER.info(getDesc() + " is created");
+ }
+ initialize();
- @Override
- protected void initialize() {
- super.initialize();
- internalModule = new ModuleModel(this, true);
- this.serviceRepository = new ServiceRepository(this);
-
- ExtensionLoader<ApplicationInitListener> extensionLoader =
this.getExtensionLoader(ApplicationInitListener.class);
- Set<String> listenerNames = extensionLoader.getSupportedExtensions();
- for (String listenerName : listenerNames) {
- extensionLoader.getExtension(listenerName).init();
- }
+ this.internalModule = new ModuleModel(this, true);
+ this.serviceRepository = new ServiceRepository(this);
- initApplicationExts();
+ ExtensionLoader<ApplicationInitListener> extensionLoader =
this.getExtensionLoader(ApplicationInitListener.class);
+ Set<String> listenerNames =
extensionLoader.getSupportedExtensions();
+ for (String listenerName : listenerNames) {
+ extensionLoader.getExtension(listenerName).init();
+ }
+
+ initApplicationExts();
- ExtensionLoader<ScopeModelInitializer> initializerExtensionLoader =
this.getExtensionLoader(ScopeModelInitializer.class);
- Set<ScopeModelInitializer> initializers =
initializerExtensionLoader.getSupportedExtensionInstances();
- for (ScopeModelInitializer initializer : initializers) {
- initializer.initializeApplicationModel(this);
+ ExtensionLoader<ScopeModelInitializer> initializerExtensionLoader
= this.getExtensionLoader(ScopeModelInitializer.class);
+ Set<ScopeModelInitializer> initializers =
initializerExtensionLoader.getSupportedExtensionInstances();
+ for (ScopeModelInitializer initializer : initializers) {
+ initializer.initializeApplicationModel(this);
+ }
+
+ Assert.notNull(getApplicationServiceRepository(),
"ApplicationServiceRepository can not be null");
+ Assert.notNull(getApplicationConfigManager(),
"ApplicationConfigManager can not be null");
+ Assert.assertTrue(getApplicationConfigManager().isInitialized(),
"ApplicationConfigManager can not be initialized");
}
}
+ // already synchronized in constructor
private void initApplicationExts() {
Set<ApplicationExt> exts =
this.getExtensionLoader(ApplicationExt.class).getSupportedExtensionInstances();
for (ApplicationExt ext : exts) {
@@ -238,57 +141,62 @@ public class ApplicationModel extends ScopeModel {
@Override
protected void onDestroy() {
- // 1. remove from frameworkModel
- frameworkModel.removeApplication(this);
+ synchronized (instLock) {
+ // 1. remove from frameworkModel
+ frameworkModel.removeApplication(this);
+
+ // 2. pre-destroy, set stopping
+ if (deployer != null) {
+ // destroy registries and unregister services from registries
first to notify consumers to stop consuming this instance.
+ deployer.preDestroy();
+ }
- // 2. pre-destroy, set stopping
- if (deployer != null) {
- // destroy registries and unregister services from registries
first to notify consumers to stop consuming this instance.
- deployer.preDestroy();
- }
+ // 3. Try to destroy protocols to stop this instance from
receiving new requests from connections
+ frameworkModel.tryDestroyProtocols();
- // 3. Try to destroy protocols to stop this instance from receiving
new requests from connections
- frameworkModel.tryDestroyProtocols();
+ // 4. destroy application resources
+ for (ModuleModel moduleModel : new ArrayList<>(moduleModels)) {
+ if (moduleModel != internalModule) {
+ moduleModel.destroy();
+ }
+ }
+ // 5. destroy internal module later
+ internalModule.destroy();
- // 4. destroy application resources
- for (ModuleModel moduleModel : new ArrayList<>(moduleModels)) {
- if (moduleModel != internalModule) {
- moduleModel.destroy();
+ // 6. post-destroy, release registry resources
+ if (deployer != null) {
+ deployer.postDestroy();
}
- }
- // 5. destroy internal module later
- internalModule.destroy();
- // 6. post-destroy, release registry resources
- if (deployer != null) {
- deployer.postDestroy();
- }
+ // 7. destroy other resources (e.g. ZookeeperTransporter )
+ notifyDestroy();
- // 7. destroy other resources (e.g. ZookeeperTransporter )
- notifyDestroy();
+ if (environment != null) {
+ environment.destroy();
+ environment = null;
+ }
+ if (configManager != null) {
+ configManager.destroy();
+ configManager = null;
+ }
+ if (serviceRepository != null) {
+ serviceRepository.destroy();
+ serviceRepository = null;
+ }
- if (environment != null) {
- environment.destroy();
- environment = null;
- }
- if (configManager != null) {
- configManager.destroy();
- configManager = null;
+ // 8. destroy framework if none application
+ frameworkModel.tryDestroy();
}
- if (serviceRepository != null) {
- serviceRepository.destroy();
- serviceRepository = null;
- }
-
- // 8. destroy framework if none application
- frameworkModel.tryDestroy();
}
public FrameworkModel getFrameworkModel() {
return frameworkModel;
}
+
public ModuleModel newModule() {
- return new ModuleModel(this);
+ synchronized (instLock) {
+ return new ModuleModel(this);
+ }
}
@Override
@@ -330,7 +238,7 @@ public class ApplicationModel extends ScopeModel {
}
void addModule(ModuleModel moduleModel, boolean isInternal) {
- synchronized (moduleLock) {
+ synchronized (instLock) {
if (!this.moduleModels.contains(moduleModel)) {
checkDestroyed();
this.moduleModels.add(moduleModel);
@@ -343,7 +251,7 @@ public class ApplicationModel extends ScopeModel {
}
public void removeModule(ModuleModel moduleModel) {
- synchronized (moduleLock) {
+ synchronized (instLock) {
this.moduleModels.remove(moduleModel);
this.pubModuleModels.remove(moduleModel);
if (moduleModel == defaultModule) {
@@ -353,9 +261,11 @@ public class ApplicationModel extends ScopeModel {
}
void tryDestroy() {
- if (this.moduleModels.isEmpty()
- || (this.moduleModels.size() == 1 && this.moduleModels.get(0) ==
internalModule)) {
- destroy();
+ synchronized (instLock) {
+ if (this.moduleModels.isEmpty()
+ || (this.moduleModels.size() == 1 && this.moduleModels.get(0)
== internalModule)) {
+ destroy();
+ }
}
}
@@ -375,7 +285,7 @@ public class ApplicationModel extends ScopeModel {
public ModuleModel getDefaultModule() {
if (defaultModule == null) {
- synchronized (moduleLock) {
+ synchronized (instLock) {
if (defaultModule == null) {
defaultModule = findDefaultModule();
if (defaultModule == null) {
@@ -388,42 +298,20 @@ public class ApplicationModel extends ScopeModel {
}
private ModuleModel findDefaultModule() {
- for (ModuleModel moduleModel : moduleModels) {
- if (moduleModel != internalModule) {
- return moduleModel;
+ synchronized (instLock) {
+ for (ModuleModel moduleModel : moduleModels) {
+ if (moduleModel != internalModule) {
+ return moduleModel;
+ }
}
+ return null;
}
- return null;
}
public ModuleModel getInternalModule() {
return internalModule;
}
- /**
- * @deprecated only for ut
- */
- @Deprecated
- public void setEnvironment(Environment environment) {
- this.environment = environment;
- }
-
- /**
- * @deprecated only for ut
- */
- @Deprecated
- public void setConfigManager(ConfigManager configManager) {
- this.configManager = configManager;
- }
-
- /**
- * @deprecated only for ut
- */
- @Deprecated
- public void setServiceRepository(ServiceRepository serviceRepository) {
- this.serviceRepository = serviceRepository;
- }
-
@Override
public void addClassLoader(ClassLoader classLoader) {
super.addClassLoader(classLoader);
@@ -456,4 +344,128 @@ public class ApplicationModel extends ScopeModel {
public void setDeployer(ApplicationDeployer deployer) {
this.deployer = deployer;
}
+
+ // =============================== Deprecated Methods Start
=======================================
+
+ /**
+ * @deprecated use {@link ServiceRepository#allConsumerModels()}
+ */
+ @Deprecated
+ public static Collection<ConsumerModel> allConsumerModels() {
+ return
defaultModel().getApplicationServiceRepository().allConsumerModels();
+ }
+
+ /**
+ * @deprecated use {@link ServiceRepository#allProviderModels()}
+ */
+ @Deprecated
+ public static Collection<ProviderModel> allProviderModels() {
+ return
defaultModel().getApplicationServiceRepository().allProviderModels();
+ }
+
+ /**
+ * @deprecated use {@link
FrameworkServiceRepository#lookupExportedService(String)}
+ */
+ @Deprecated
+ public static ProviderModel getProviderModel(String serviceKey) {
+ return
defaultModel().getDefaultModule().getServiceRepository().lookupExportedService(serviceKey);
+ }
+
+ /**
+ * @deprecated ConsumerModel should fetch from context
+ */
+ @Deprecated
+ public static ConsumerModel getConsumerModel(String serviceKey) {
+ return
defaultModel().getDefaultModule().getServiceRepository().lookupReferredService(serviceKey);
+ }
+
+ /**
+ * @deprecated Replace to {@link ScopeModel#getModelEnvironment()}
+ */
+ @Deprecated
+ public static Environment getEnvironment() {
+ return defaultModel().getModelEnvironment();
+ }
+
+ /**
+ * @deprecated Replace to {@link
ApplicationModel#getApplicationConfigManager()}
+ */
+ @Deprecated
+ public static ConfigManager getConfigManager() {
+ return defaultModel().getApplicationConfigManager();
+ }
+
+ /**
+ * @deprecated Replace to {@link
ApplicationModel#getApplicationServiceRepository()}
+ */
+ @Deprecated
+ public static ServiceRepository getServiceRepository() {
+ return defaultModel().getApplicationServiceRepository();
+ }
+
+ /**
+ * @deprecated Replace to {@link
ApplicationModel#getApplicationExecutorRepository()}
+ */
+ @Deprecated
+ public static ExecutorRepository getExecutorRepository() {
+ return defaultModel().getApplicationExecutorRepository();
+ }
+
+ /**
+ * @deprecated Replace to {@link ApplicationModel#getCurrentConfig()}
+ */
+ @Deprecated
+ public static ApplicationConfig getApplicationConfig() {
+ return defaultModel().getCurrentConfig();
+ }
+
+ /**
+ * @deprecated Replace to {@link ApplicationModel#getApplicationName()}
+ */
+ @Deprecated
+ public static String getName() {
+ return defaultModel().getCurrentConfig().getName();
+ }
+
+ /**
+ * @deprecated Replace to {@link ApplicationModel#getApplicationName()}
+ */
+ @Deprecated
+ public static String getApplication() {
+ return getName();
+ }
+
+ // only for unit test
+ @Deprecated
+ public static void reset() {
+ if (FrameworkModel.defaultModel().getDefaultAppModel() != null) {
+ FrameworkModel.defaultModel().getDefaultAppModel().destroy();
+ }
+ }
+
+ /**
+ * @deprecated only for ut
+ */
+ @Deprecated
+ public void setEnvironment(Environment environment) {
+ this.environment = environment;
+ }
+
+ /**
+ * @deprecated only for ut
+ */
+ @Deprecated
+ public void setConfigManager(ConfigManager configManager) {
+ this.configManager = configManager;
+ }
+
+ /**
+ * @deprecated only for ut
+ */
+ @Deprecated
+ public void setServiceRepository(ServiceRepository serviceRepository) {
+ this.serviceRepository = serviceRepository;
+ }
+
+ // =============================== Deprecated Methods End
=======================================
}
diff --git
a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/FrameworkModel.java
b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/FrameworkModel.java
index 65baff1750..8c2787eadc 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/FrameworkModel.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/FrameworkModel.java
@@ -40,111 +40,117 @@ import java.util.stream.Collectors;
*/
public class FrameworkModel extends ScopeModel {
+ // ========================= Static Fields Start
===================================
+
protected static final Logger LOGGER =
LoggerFactory.getLogger(FrameworkModel.class);
public static final String NAME = "FrameworkModel";
private static final AtomicLong index = new AtomicLong(1);
- // internal app index is 0, default app index is 1
- private final AtomicLong appIndex = new AtomicLong(0);
private static final Object globalLock = new Object();
private volatile static FrameworkModel defaultInstance;
- private volatile ApplicationModel defaultAppModel;
+ private static final List<FrameworkModel> allInstances = new
CopyOnWriteArrayList<>();
+
+ // ========================= Static Fields End
===================================
- private static List<FrameworkModel> allInstances = new
CopyOnWriteArrayList<>();
+ // internal app index is 0, default app index is 1
+ private final AtomicLong appIndex = new AtomicLong(0);
- private List<ApplicationModel> applicationModels = new
CopyOnWriteArrayList<>();
+ private volatile ApplicationModel defaultAppModel;
- private List<ApplicationModel> pubApplicationModels = new
CopyOnWriteArrayList<>();
+ private final List<ApplicationModel> applicationModels = new
CopyOnWriteArrayList<>();
- private FrameworkServiceRepository serviceRepository;
+ private final List<ApplicationModel> pubApplicationModels = new
CopyOnWriteArrayList<>();
- private ApplicationModel internalApplicationModel;
+ private final FrameworkServiceRepository serviceRepository;
- private final Object instLock = new Object();
+ private final ApplicationModel internalApplicationModel;
+ /**
+ * Use {@link FrameworkModel#newModel()} to create a new model
+ */
public FrameworkModel() {
super(null, ExtensionScope.FRAMEWORK, false);
- this.setInternalId(String.valueOf(index.getAndIncrement()));
- // register FrameworkModel instance early
synchronized (globalLock) {
- allInstances.add(this);
- resetDefaultFrameworkModel();
- }
- if (LOGGER.isInfoEnabled()) {
- LOGGER.info(getDesc() + " is created");
- }
- initialize();
- }
+ synchronized (instLock) {
+ this.setInternalId(String.valueOf(index.getAndIncrement()));
+ // register FrameworkModel instance early
+ allInstances.add(this);
+ if (LOGGER.isInfoEnabled()) {
+ LOGGER.info(getDesc() + " is created");
+ }
+ initialize();
- @Override
- protected void initialize() {
- super.initialize();
+ TypeDefinitionBuilder.initBuilders(this);
- TypeDefinitionBuilder.initBuilders(this);
+ serviceRepository = new FrameworkServiceRepository(this);
- serviceRepository = new FrameworkServiceRepository(this);
+ ExtensionLoader<ScopeModelInitializer>
initializerExtensionLoader =
this.getExtensionLoader(ScopeModelInitializer.class);
+ Set<ScopeModelInitializer> initializers =
initializerExtensionLoader.getSupportedExtensionInstances();
+ for (ScopeModelInitializer initializer : initializers) {
+ initializer.initializeFrameworkModel(this);
+ }
- ExtensionLoader<ScopeModelInitializer> initializerExtensionLoader =
this.getExtensionLoader(ScopeModelInitializer.class);
- Set<ScopeModelInitializer> initializers =
initializerExtensionLoader.getSupportedExtensionInstances();
- for (ScopeModelInitializer initializer : initializers) {
- initializer.initializeFrameworkModel(this);
+ internalApplicationModel = new ApplicationModel(this, true);
+
internalApplicationModel.getApplicationConfigManager().setApplication(
+ new ApplicationConfig(internalApplicationModel,
CommonConstants.DUBBO_INTERNAL_APPLICATION));
+
internalApplicationModel.setModelName(CommonConstants.DUBBO_INTERNAL_APPLICATION);
+ }
}
-
- internalApplicationModel = new ApplicationModel(this, true);
- internalApplicationModel.getApplicationConfigManager().setApplication(
- new ApplicationConfig(internalApplicationModel,
CommonConstants.DUBBO_INTERNAL_APPLICATION));
-
internalApplicationModel.setModelName(CommonConstants.DUBBO_INTERNAL_APPLICATION);
}
@Override
protected void onDestroy() {
- if (defaultInstance == this) {
- // NOTE: During destroying the default FrameworkModel, the
FrameworkModel.defaultModel() or ApplicationModel.defaultModel()
- // will return a broken model, maybe cause unpredictable problem.
+ synchronized (instLock) {
+ if (defaultInstance == this) {
+ // NOTE: During destroying the default FrameworkModel, the
FrameworkModel.defaultModel() or ApplicationModel.defaultModel()
+ // will return a broken model, maybe cause unpredictable
problem.
+ if (LOGGER.isInfoEnabled()) {
+ LOGGER.info("Destroying default framework model: " +
getDesc());
+ }
+ }
+
if (LOGGER.isInfoEnabled()) {
- LOGGER.info("Destroying default framework model: " +
getDesc());
+ LOGGER.info(getDesc() + " is destroying ...");
}
- }
- if (LOGGER.isInfoEnabled()) {
- LOGGER.info(getDesc() + " is destroying ...");
- }
+ // destroy all application model
+ for (ApplicationModel applicationModel : new
ArrayList<>(applicationModels)) {
+ applicationModel.destroy();
+ }
+ // check whether all application models are destroyed
+ checkApplicationDestroy();
- // destroy all application model
- for (ApplicationModel applicationModel : new
ArrayList<>(applicationModels)) {
- applicationModel.destroy();
- }
- // check whether all application models are destroyed
- checkApplicationDestroy();
+ // notify destroy and clean framework resources
+ // see org.apache.dubbo.config.deploy.FrameworkModelCleaner
+ notifyDestroy();
- // notify destroy and clean framework resources
- // see org.apache.dubbo.config.deploy.FrameworkModelCleaner
- notifyDestroy();
+ if (LOGGER.isInfoEnabled()) {
+ LOGGER.info(getDesc() + " is destroyed");
+ }
- if (LOGGER.isInfoEnabled()) {
- LOGGER.info(getDesc() + " is destroyed");
- }
+ // remove from allInstances and reset default FrameworkModel
+ synchronized (globalLock) {
+ allInstances.remove(this);
+ resetDefaultFrameworkModel();
+ }
- // remove from allInstances and reset default FrameworkModel
- synchronized (globalLock) {
- allInstances.remove(this);
- resetDefaultFrameworkModel();
+ // if all FrameworkModels are destroyed, clean global static
resources, shutdown dubbo completely
+ destroyGlobalResources();
}
-
- // if all FrameworkModels are destroyed, clean global static
resources, shutdown dubbo completely
- destroyGlobalResources();
}
private void checkApplicationDestroy() {
- if (applicationModels.size() > 0) {
- List<String> remainApplications = applicationModels.stream()
- .map(ScopeModel::getDesc)
- .collect(Collectors.toList());
- throw new IllegalStateException("Not all application models are
completely destroyed, remaining " +
- remainApplications.size() + " application models may be
created during destruction: " + remainApplications);
+ synchronized (instLock) {
+ if (applicationModels.size() > 0) {
+ List<String> remainApplications = applicationModels.stream()
+ .map(ScopeModel::getDesc)
+ .collect(Collectors.toList());
+ throw new IllegalStateException("Not all application models
are completely destroyed, remaining " +
+ remainApplications.size() + " application models may be
created during destruction: " + remainApplications);
+ }
}
}
@@ -182,20 +188,26 @@ public class FrameworkModel extends ScopeModel {
* @return
*/
public static List<FrameworkModel> getAllInstances() {
- return Collections.unmodifiableList(new ArrayList<>(allInstances));
+ synchronized (globalLock) {
+ return Collections.unmodifiableList(new ArrayList<>(allInstances));
+ }
}
/**
* Destroy all framework model instances, shutdown dubbo engine completely.
*/
public static void destroyAll() {
- for (FrameworkModel frameworkModel : new ArrayList<>(allInstances)) {
- frameworkModel.destroy();
+ synchronized (globalLock) {
+ for (FrameworkModel frameworkModel : new
ArrayList<>(allInstances)) {
+ frameworkModel.destroy();
+ }
}
}
public ApplicationModel newApplication() {
- return new ApplicationModel(this);
+ synchronized (instLock) {
+ return new ApplicationModel(this);
+ }
}
/**
@@ -235,7 +247,6 @@ public class FrameworkModel extends ScopeModel {
if (!applicationModel.isInternal()) {
this.pubApplicationModels.add(applicationModel);
}
- resetDefaultAppModel();
}
}
}
@@ -323,14 +334,18 @@ public class FrameworkModel extends ScopeModel {
* Get all application models except for the internal application model.
*/
public List<ApplicationModel> getApplicationModels() {
- return Collections.unmodifiableList(pubApplicationModels);
+ synchronized (globalLock) {
+ return Collections.unmodifiableList(pubApplicationModels);
+ }
}
/**
* Get all application models including the internal application model.
*/
public List<ApplicationModel> getAllApplicationModels() {
- return Collections.unmodifiableList(applicationModels);
+ synchronized (globalLock) {
+ return Collections.unmodifiableList(applicationModels);
+ }
}
public ApplicationModel getInternalApplicationModel() {
diff --git
a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ModuleModel.java
b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ModuleModel.java
index f94a18f2a9..c06e3d075d 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ModuleModel.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ModuleModel.java
@@ -42,50 +42,49 @@ public class ModuleModel extends ScopeModel {
public static final String NAME = "ModuleModel";
private final ApplicationModel applicationModel;
- private ModuleEnvironment moduleEnvironment;
- private ModuleServiceRepository serviceRepository;
- private ModuleConfigManager moduleConfigManager;
- private ModuleDeployer deployer;
+ private volatile ModuleServiceRepository serviceRepository;
+ private volatile ModuleEnvironment moduleEnvironment;
+ private volatile ModuleConfigManager moduleConfigManager;
+ private volatile ModuleDeployer deployer;
- public ModuleModel(ApplicationModel applicationModel) {
+ protected ModuleModel(ApplicationModel applicationModel) {
this(applicationModel, false);
}
- public ModuleModel(ApplicationModel applicationModel, boolean isInternal) {
+ protected ModuleModel(ApplicationModel applicationModel, boolean
isInternal) {
super(applicationModel, ExtensionScope.MODULE, isInternal);
- Assert.notNull(applicationModel, "ApplicationModel can not be null");
- this.applicationModel = applicationModel;
- applicationModel.addModule(this, isInternal);
- if (LOGGER.isInfoEnabled()) {
- LOGGER.info(getDesc() + " is created");
- }
-
- initialize();
- Assert.notNull(getServiceRepository(), "ModuleServiceRepository can
not be null");
- Assert.notNull(getConfigManager(), "ModuleConfigManager can not be
null");
- Assert.assertTrue(getConfigManager().isInitialized(),
"ModuleConfigManager can not be initialized");
-
- // notify application check state
- ApplicationDeployer applicationDeployer =
applicationModel.getDeployer();
- if (applicationDeployer != null) {
- applicationDeployer.notifyModuleChanged(this, DeployState.PENDING);
- }
- }
-
- @Override
- protected void initialize() {
- super.initialize();
- this.serviceRepository = new ModuleServiceRepository(this);
-
- initModuleExt();
-
- ExtensionLoader<ScopeModelInitializer> initializerExtensionLoader =
this.getExtensionLoader(ScopeModelInitializer.class);
- Set<ScopeModelInitializer> initializers =
initializerExtensionLoader.getSupportedExtensionInstances();
- for (ScopeModelInitializer initializer : initializers) {
- initializer.initializeModuleModel(this);
+ synchronized (instLock) {
+ Assert.notNull(applicationModel, "ApplicationModel can not be
null");
+ this.applicationModel = applicationModel;
+ applicationModel.addModule(this, isInternal);
+ if (LOGGER.isInfoEnabled()) {
+ LOGGER.info(getDesc() + " is created");
+ }
+
+ initialize();
+
+ this.serviceRepository = new ModuleServiceRepository(this);
+
+ initModuleExt();
+
+ ExtensionLoader<ScopeModelInitializer> initializerExtensionLoader
= this.getExtensionLoader(ScopeModelInitializer.class);
+ Set<ScopeModelInitializer> initializers =
initializerExtensionLoader.getSupportedExtensionInstances();
+ for (ScopeModelInitializer initializer : initializers) {
+ initializer.initializeModuleModel(this);
+ }
+ Assert.notNull(getServiceRepository(), "ModuleServiceRepository
can not be null");
+ Assert.notNull(getConfigManager(), "ModuleConfigManager can not be
null");
+ Assert.assertTrue(getConfigManager().isInitialized(),
"ModuleConfigManager can not be initialized");
+
+ // notify application check state
+ ApplicationDeployer applicationDeployer =
applicationModel.getDeployer();
+ if (applicationDeployer != null) {
+ applicationDeployer.notifyModuleChanged(this,
DeployState.PENDING);
+ }
}
}
+ // already synchronized in constructor
private void initModuleExt() {
Set<ModuleExt> exts =
this.getExtensionLoader(ModuleExt.class).getSupportedExtensionInstances();
for (ModuleExt ext : exts) {
@@ -95,39 +94,41 @@ public class ModuleModel extends ScopeModel {
@Override
protected void onDestroy() {
- // 1. remove from applicationModel
- applicationModel.removeModule(this);
-
- // 2. set stopping
- if (deployer != null) {
- deployer.preDestroy();
+ synchronized (instLock) {
+ // 1. remove from applicationModel
+ applicationModel.removeModule(this);
+
+ // 2. set stopping
+ if (deployer != null) {
+ deployer.preDestroy();
+ }
+
+ // 3. release services
+ if (deployer != null) {
+ deployer.postDestroy();
+ }
+
+ // destroy other resources
+ notifyDestroy();
+
+ if (serviceRepository != null) {
+ serviceRepository.destroy();
+ serviceRepository = null;
+ }
+
+ if (moduleEnvironment != null) {
+ moduleEnvironment.destroy();
+ moduleEnvironment = null;
+ }
+
+ if (moduleConfigManager != null) {
+ moduleConfigManager.destroy();
+ moduleConfigManager = null;
+ }
+
+ // destroy application if none pub module
+ applicationModel.tryDestroy();
}
-
- // 3. release services
- if (deployer != null) {
- deployer.postDestroy();
- }
-
- // destroy other resources
- notifyDestroy();
-
- if (serviceRepository != null) {
- serviceRepository.destroy();
- serviceRepository = null;
- }
-
- if (moduleEnvironment != null) {
- moduleEnvironment.destroy();
- moduleEnvironment = null;
- }
-
- if (moduleConfigManager != null) {
- moduleConfigManager.destroy();
- moduleConfigManager = null;
- }
-
- // destroy application if none pub module
- applicationModel.tryDestroy();
}
public ApplicationModel getApplicationModel() {
diff --git
a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ScopeModel.java
b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ScopeModel.java
index a749fef584..b83f96f46f 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ScopeModel.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ScopeModel.java
@@ -28,11 +28,11 @@ import org.apache.dubbo.common.utils.StringUtils;
import java.util.Collections;
import java.util.HashSet;
-import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.atomic.AtomicBoolean;
import static
org.apache.dubbo.common.constants.LoggerCodeConstants.CONFIG_UNABLE_DESTROY_MODEL;
@@ -62,23 +62,25 @@ public abstract class ScopeModel implements
ExtensionAccessor {
private String desc;
- private Set<ClassLoader> classLoaders;
+ private final Set<ClassLoader> classLoaders = new ConcurrentHashSet<>();
private final ScopeModel parent;
private final ExtensionScope scope;
- private ExtensionDirector extensionDirector;
+ private volatile ExtensionDirector extensionDirector;
- private ScopeBeanFactory beanFactory;
- private List<ScopeModelDestroyListener> destroyListeners;
+ private volatile ScopeBeanFactory beanFactory;
+ private final List<ScopeModelDestroyListener> destroyListeners = new
CopyOnWriteArrayList<>();
- private List<ScopeClassLoaderListener> classLoaderListeners;
+ private final List<ScopeClassLoaderListener> classLoaderListeners = new
CopyOnWriteArrayList<>();
- private Map<String, Object> attributes;
+ private final Map<String, Object> attributes = new ConcurrentHashMap<>();
private final AtomicBoolean destroyed = new AtomicBoolean(false);
private final boolean internalScope;
- public ScopeModel(ScopeModel parent, ExtensionScope scope, boolean
isInternal) {
+ protected final Object instLock = new Object();
+
+ protected ScopeModel(ScopeModel parent, ExtensionScope scope, boolean
isInternal) {
this.parent = parent;
this.scope = scope;
this.internalScope = isInternal;
@@ -94,18 +96,16 @@ public abstract class ScopeModel implements
ExtensionAccessor {
* </ol>
*/
protected void initialize() {
- this.extensionDirector = new ExtensionDirector(parent != null ?
parent.getExtensionDirector() : null, scope, this);
- this.extensionDirector.addExtensionPostProcessor(new
ScopeModelAwareExtensionProcessor(this));
- this.beanFactory = new ScopeBeanFactory(parent != null ?
parent.getBeanFactory() : null, extensionDirector);
- this.destroyListeners = new LinkedList<>();
- this.classLoaderListeners = new LinkedList<>();
- this.attributes = new ConcurrentHashMap<>();
- this.classLoaders = new ConcurrentHashSet<>();
-
- // Add Framework's ClassLoader by default
- ClassLoader dubboClassLoader = ScopeModel.class.getClassLoader();
- if (dubboClassLoader != null) {
- this.addClassLoader(dubboClassLoader);
+ synchronized (instLock) {
+ this.extensionDirector = new ExtensionDirector(parent != null ?
parent.getExtensionDirector() : null, scope, this);
+ this.extensionDirector.addExtensionPostProcessor(new
ScopeModelAwareExtensionProcessor(this));
+ this.beanFactory = new ScopeBeanFactory(parent != null ?
parent.getBeanFactory() : null, extensionDirector);
+
+ // Add Framework's ClassLoader by default
+ ClassLoader dubboClassLoader = ScopeModel.class.getClassLoader();
+ if (dubboClassLoader != null) {
+ this.addClassLoader(dubboClassLoader);
+ }
}
}
@@ -203,22 +203,26 @@ public abstract class ScopeModel implements
ExtensionAccessor {
}
public void addClassLoader(ClassLoader classLoader) {
- this.classLoaders.add(classLoader);
- if (parent != null) {
- parent.addClassLoader(classLoader);
+ synchronized (instLock) {
+ this.classLoaders.add(classLoader);
+ if (parent != null) {
+ parent.addClassLoader(classLoader);
+ }
+ extensionDirector.removeAllCachedLoader();
+ notifyClassLoaderAdd(classLoader);
}
- extensionDirector.removeAllCachedLoader();
- notifyClassLoaderAdd(classLoader);
}
public void removeClassLoader(ClassLoader classLoader) {
- if (checkIfClassLoaderCanRemoved(classLoader)) {
- this.classLoaders.remove(classLoader);
- if (parent != null) {
- parent.removeClassLoader(classLoader);
+ synchronized (instLock) {
+ if (checkIfClassLoaderCanRemoved(classLoader)) {
+ this.classLoaders.remove(classLoader);
+ if (parent != null) {
+ parent.removeClassLoader(classLoader);
+ }
+ extensionDirector.removeAllCachedLoader();
+ notifyClassLoaderDestroy(classLoader);
}
- extensionDirector.removeAllCachedLoader();
- notifyClassLoaderDestroy(classLoader);
}
}
diff --git
a/dubbo-common/src/test/java/org/apache/dubbo/common/CommonScopeModelInitializerTest.java
b/dubbo-common/src/test/java/org/apache/dubbo/common/CommonScopeModelInitializerTest.java
index 93ec99bec7..caa32c8975 100644
---
a/dubbo-common/src/test/java/org/apache/dubbo/common/CommonScopeModelInitializerTest.java
+++
b/dubbo-common/src/test/java/org/apache/dubbo/common/CommonScopeModelInitializerTest.java
@@ -41,8 +41,8 @@ class CommonScopeModelInitializerTest {
@BeforeEach
public void setUp() {
frameworkModel = new FrameworkModel();
- applicationModel = new ApplicationModel(frameworkModel);
- moduleModel = new ModuleModel(applicationModel);
+ applicationModel = frameworkModel.newApplication();
+ moduleModel = applicationModel.newModule();
}
@AfterEach
@@ -60,4 +60,4 @@ class CommonScopeModelInitializerTest {
ScopeBeanFactory moduleModelBeanFactory = moduleModel.getBeanFactory();
Assertions.assertNotNull(moduleModelBeanFactory.getBean(ConfigurationCache.class));
}
-}
\ No newline at end of file
+}
diff --git
a/dubbo-common/src/test/java/org/apache/dubbo/common/config/ConfigurationUtilsTest.java
b/dubbo-common/src/test/java/org/apache/dubbo/common/config/ConfigurationUtilsTest.java
index da4e01a3f6..de3bd2df71 100644
---
a/dubbo-common/src/test/java/org/apache/dubbo/common/config/ConfigurationUtilsTest.java
+++
b/dubbo-common/src/test/java/org/apache/dubbo/common/config/ConfigurationUtilsTest.java
@@ -36,7 +36,7 @@ class ConfigurationUtilsTest {
void testCachedProperties() {
FrameworkModel frameworkModel = new FrameworkModel();
- ApplicationModel applicationModel = new
ApplicationModel(frameworkModel);
+ ApplicationModel applicationModel = frameworkModel.newApplication();
Environment originApplicationEnvironment =
applicationModel.getModelEnvironment();
Environment applicationEnvironment =
Mockito.spy(originApplicationEnvironment);
applicationModel.setEnvironment(applicationEnvironment);
@@ -51,7 +51,7 @@ class ConfigurationUtilsTest {
// cached key
Assertions.assertEquals("a",
ConfigurationUtils.getCachedDynamicProperty(applicationModel, "TestKey",
"xxx"));
- ModuleModel moduleModel = new ModuleModel(applicationModel);
+ ModuleModel moduleModel = applicationModel.newModule();
ModuleEnvironment originModuleEnvironment =
moduleModel.getModelEnvironment();
ModuleEnvironment moduleEnvironment =
Mockito.spy(originModuleEnvironment);
moduleModel.setModuleEnvironment(moduleEnvironment);
@@ -109,4 +109,4 @@ class ConfigurationUtilsTest {
Assertions.assertEquals(1, result.size());
Assertions.assertEquals("zookeeper://127.0.0.1:2181\\ndubbo.protocol.port=20880",
result.get("dubbo.registry.address"));
}
-}
\ No newline at end of file
+}
diff --git
a/dubbo-common/src/test/java/org/apache/dubbo/common/config/EnvironmentTest.java
b/dubbo-common/src/test/java/org/apache/dubbo/common/config/EnvironmentTest.java
index 01c00fa43e..75c88306fc 100644
---
a/dubbo-common/src/test/java/org/apache/dubbo/common/config/EnvironmentTest.java
+++
b/dubbo-common/src/test/java/org/apache/dubbo/common/config/EnvironmentTest.java
@@ -64,7 +64,7 @@ class EnvironmentTest {
@Test
void test() {
FrameworkModel frameworkModel = new FrameworkModel();
- ApplicationModel applicationModel = new
ApplicationModel(frameworkModel);
+ ApplicationModel applicationModel = frameworkModel.newApplication();
Environment environment = applicationModel.getModelEnvironment();
// test getPrefixedConfiguration
@@ -112,4 +112,4 @@ class EnvironmentTest {
frameworkModel.destroy();
}
-}
\ No newline at end of file
+}
diff --git
a/dubbo-common/src/test/java/org/apache/dubbo/common/extension/ExtensionDirectorTest.java
b/dubbo-common/src/test/java/org/apache/dubbo/common/extension/ExtensionDirectorTest.java
index 95f9b59d48..ad1c7beb95 100644
---
a/dubbo-common/src/test/java/org/apache/dubbo/common/extension/ExtensionDirectorTest.java
+++
b/dubbo-common/src/test/java/org/apache/dubbo/common/extension/ExtensionDirectorTest.java
@@ -90,8 +90,8 @@ class ExtensionDirectorTest {
// 3. Framework scope SPI can be injected FrameworkModel, but not
ModuleModel, ApplicationModel
FrameworkModel frameworkModel = new FrameworkModel();
- ApplicationModel applicationModel = new
ApplicationModel(frameworkModel);
- ModuleModel moduleModel = new ModuleModel(applicationModel);
+ ApplicationModel applicationModel = frameworkModel.newApplication();
+ ModuleModel moduleModel = applicationModel.newModule();
ExtensionDirector moduleExtensionDirector =
moduleModel.getExtensionDirector();
ExtensionDirector appExtensionDirector =
applicationModel.getExtensionDirector();
@@ -152,16 +152,16 @@ class ExtensionDirectorTest {
// └─moduleModel211
FrameworkModel frameworkModel1 = new FrameworkModel();
- ApplicationModel applicationModel11 = new
ApplicationModel(frameworkModel1);
- ModuleModel moduleModel111 = new ModuleModel(applicationModel11);
- ModuleModel moduleModel112 = new ModuleModel(applicationModel11);
+ ApplicationModel applicationModel11 = frameworkModel1.newApplication();
+ ModuleModel moduleModel111 = applicationModel11.newModule();
+ ModuleModel moduleModel112 = applicationModel11.newModule();
- ApplicationModel applicationModel12 = new
ApplicationModel(frameworkModel1);
- ModuleModel moduleModel121 = new ModuleModel(applicationModel12);
+ ApplicationModel applicationModel12 = frameworkModel1.newApplication();
+ ModuleModel moduleModel121 = applicationModel12.newModule();
FrameworkModel frameworkModel2 = new FrameworkModel();
- ApplicationModel applicationModel21 = new
ApplicationModel(frameworkModel2);
- ModuleModel moduleModel211 = new ModuleModel(applicationModel21);
+ ApplicationModel applicationModel21 = frameworkModel2.newApplication();
+ ModuleModel moduleModel211 = applicationModel21.newModule();
// test model references
Collection<ApplicationModel> applicationsOfFw1 =
frameworkModel1.getApplicationModels();
@@ -235,8 +235,8 @@ class ExtensionDirectorTest {
// 3. Module scope extension can be injected to extensions of Module
scope, but not Framework/Application scope
FrameworkModel frameworkModel = new FrameworkModel();
- ApplicationModel applicationModel = new
ApplicationModel(frameworkModel);
- ModuleModel moduleModel = new ModuleModel(applicationModel);
+ ApplicationModel applicationModel = frameworkModel.newApplication();
+ ModuleModel moduleModel = applicationModel.newModule();
// check module service
TestModuleService moduleService = (TestModuleService)
moduleModel.getExtensionDirector()
@@ -272,4 +272,4 @@ class ExtensionDirectorTest {
Assertions.assertTrue(appService.isDestroyed());
Assertions.assertTrue(frameworkService.isDestroyed());
}
-}
\ No newline at end of file
+}
diff --git
a/dubbo-common/src/test/java/org/apache/dubbo/common/extension/inject/AdaptiveExtensionInjectorTest.java
b/dubbo-common/src/test/java/org/apache/dubbo/common/extension/inject/AdaptiveExtensionInjectorTest.java
index 566ffa4787..7e3fc696f4 100644
---
a/dubbo-common/src/test/java/org/apache/dubbo/common/extension/inject/AdaptiveExtensionInjectorTest.java
+++
b/dubbo-common/src/test/java/org/apache/dubbo/common/extension/inject/AdaptiveExtensionInjectorTest.java
@@ -56,4 +56,4 @@ class AdaptiveExtensionInjectorTest {
frameworkModel.destroy();
}
-}
\ No newline at end of file
+}
diff --git
a/dubbo-common/src/test/java/org/apache/dubbo/common/status/reporter/FrameworkStatusReportServiceTest.java
b/dubbo-common/src/test/java/org/apache/dubbo/common/status/reporter/FrameworkStatusReportServiceTest.java
index 1892be1f84..f00a56cb5b 100644
---
a/dubbo-common/src/test/java/org/apache/dubbo/common/status/reporter/FrameworkStatusReportServiceTest.java
+++
b/dubbo-common/src/test/java/org/apache/dubbo/common/status/reporter/FrameworkStatusReportServiceTest.java
@@ -41,7 +41,7 @@ class FrameworkStatusReportServiceTest {
@Test
void test() {
FrameworkModel frameworkModel = new FrameworkModel();
- ApplicationModel applicationModel = new
ApplicationModel(frameworkModel);
+ ApplicationModel applicationModel = frameworkModel.newApplication();
ApplicationConfig app = new ApplicationConfig("APP");
applicationModel.getApplicationConfigManager().setApplication(app);
FrameworkStatusReportService reportService =
applicationModel.getBeanFactory().getBean(FrameworkStatusReportService.class);
@@ -103,4 +103,4 @@ class FrameworkStatusReportServiceTest {
frameworkModel.destroy();
}
-}
\ No newline at end of file
+}
diff --git
a/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/ApplicationModelTest.java
b/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/ApplicationModelTest.java
index 318ab343c3..aaaaaf5f20 100644
---
a/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/ApplicationModelTest.java
+++
b/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/ApplicationModelTest.java
@@ -35,7 +35,7 @@ class ApplicationModelTest {
@Test
void testInitialize() {
FrameworkModel frameworkModel = new FrameworkModel();
- ApplicationModel applicationModel = new
ApplicationModel(frameworkModel);
+ ApplicationModel applicationModel = frameworkModel.newApplication();
Assertions.assertEquals(applicationModel.getParent(), frameworkModel);
Assertions.assertEquals(applicationModel.getScope(),
ExtensionScope.APPLICATION);
@@ -77,7 +77,7 @@ class ApplicationModelTest {
@Test
void testModule() {
FrameworkModel frameworkModel = new FrameworkModel();
- ApplicationModel applicationModel = new
ApplicationModel(frameworkModel);
+ ApplicationModel applicationModel = frameworkModel.newApplication();
ModuleModel defaultModule = applicationModel.getDefaultModule();
ModuleModel internalModule = applicationModel.getInternalModule();
@@ -101,7 +101,7 @@ class ApplicationModelTest {
applicationModel.getFrameworkModel().destroy();
FrameworkModel frameworkModel = new FrameworkModel();
- ApplicationModel applicationModel1 = new
ApplicationModel(frameworkModel);
+ ApplicationModel applicationModel1 = frameworkModel.newApplication();
ApplicationModel applicationModel2 =
ApplicationModel.ofNullable(applicationModel1);
Assertions.assertEquals(applicationModel1, applicationModel2);
frameworkModel.destroy();
@@ -110,7 +110,7 @@ class ApplicationModelTest {
@Test
void testDestroy() {
FrameworkModel frameworkModel = new FrameworkModel();
- ApplicationModel applicationModel = new
ApplicationModel(frameworkModel);
+ ApplicationModel applicationModel = frameworkModel.newApplication();
applicationModel.getDefaultModule();
applicationModel.newModule();
@@ -144,4 +144,4 @@ class ApplicationModelTest {
}
-}
\ No newline at end of file
+}
diff --git
a/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/FrameworkModelTest.java
b/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/FrameworkModelTest.java
index 5f9ff99901..3359c73525 100644
---
a/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/FrameworkModelTest.java
+++
b/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/FrameworkModelTest.java
@@ -105,4 +105,4 @@ class FrameworkModelTest {
}
}
-}
\ No newline at end of file
+}
diff --git
a/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/FrameworkServiceRepositoryTest.java
b/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/FrameworkServiceRepositoryTest.java
index ce691994b4..96909e6529 100644
---
a/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/FrameworkServiceRepositoryTest.java
+++
b/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/FrameworkServiceRepositoryTest.java
@@ -43,8 +43,8 @@ class FrameworkServiceRepositoryTest {
@BeforeEach
public void setUp() {
frameworkModel = new FrameworkModel();
- applicationModel = new ApplicationModel(frameworkModel);
- moduleModel = new ModuleModel(applicationModel);
+ applicationModel = frameworkModel.newApplication();
+ moduleModel = applicationModel.newModule();
}
@AfterEach
@@ -111,4 +111,4 @@ class FrameworkServiceRepositoryTest {
}
return interfaceName + ":" + version;
}
-}
\ No newline at end of file
+}
diff --git
a/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/ModuleModelTest.java
b/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/ModuleModelTest.java
index 1f4d7cd209..9a876e6624 100644
--- a/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/ModuleModelTest.java
+++ b/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/ModuleModelTest.java
@@ -33,8 +33,8 @@ class ModuleModelTest {
@Test
void testInitialize() {
FrameworkModel frameworkModel = new FrameworkModel();
- ApplicationModel applicationModel = new
ApplicationModel(frameworkModel);
- ModuleModel moduleModel = new ModuleModel(applicationModel);
+ ApplicationModel applicationModel = frameworkModel.newApplication();
+ ModuleModel moduleModel = applicationModel.newModule();
Assertions.assertEquals(moduleModel.getParent(), applicationModel);
Assertions.assertEquals(moduleModel.getScope(), ExtensionScope.MODULE);
Assertions.assertEquals(moduleModel.getApplicationModel(),
applicationModel);
@@ -57,8 +57,8 @@ class ModuleModelTest {
@Test
void testModelEnvironment() {
FrameworkModel frameworkModel = new FrameworkModel();
- ApplicationModel applicationModel = new
ApplicationModel(frameworkModel);
- ModuleModel moduleModel = new ModuleModel(applicationModel);
+ ApplicationModel applicationModel = frameworkModel.newApplication();
+ ModuleModel moduleModel = applicationModel.newModule();
ModuleEnvironment modelEnvironment = moduleModel.getModelEnvironment();
Assertions.assertNotNull(modelEnvironment);
@@ -69,8 +69,8 @@ class ModuleModelTest {
@Test
void testDestroy() {
FrameworkModel frameworkModel = new FrameworkModel();
- ApplicationModel applicationModel = new
ApplicationModel(frameworkModel);
- ModuleModel moduleModel = new ModuleModel(applicationModel);
+ ApplicationModel applicationModel = frameworkModel.newApplication();
+ ModuleModel moduleModel = applicationModel.newModule();
MockScopeModelDestroyListener destroyListener = new
MockScopeModelDestroyListener();
moduleModel.addDestroyListener(destroyListener);
@@ -87,4 +87,4 @@ class ModuleModelTest {
Assertions.assertTrue(frameworkModel.isDestroyed());
}
-}
\ No newline at end of file
+}
diff --git
a/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/ModuleServiceRepositoryTest.java
b/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/ModuleServiceRepositoryTest.java
index 17f15348fe..04d1f4eac2 100644
---
a/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/ModuleServiceRepositoryTest.java
+++
b/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/ModuleServiceRepositoryTest.java
@@ -39,8 +39,8 @@ class ModuleServiceRepositoryTest {
@BeforeEach
public void setUp() {
frameworkModel = new FrameworkModel();
- applicationModel = new ApplicationModel(frameworkModel);
- moduleModel = new ModuleModel(applicationModel);
+ applicationModel = frameworkModel.newApplication();
+ moduleModel = applicationModel.newModule();
}
@AfterEach
@@ -111,4 +111,4 @@ class ModuleServiceRepositoryTest {
Assertions.assertTrue(repository.getExportedServices().isEmpty());
Assertions.assertTrue(frameworkModel.getServiceRepository().allProviderModels().isEmpty());
}
-}
\ No newline at end of file
+}
diff --git
a/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/ReflectionServiceDescriptorTest.java
b/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/ReflectionServiceDescriptorTest.java
index 8e1a54c284..3361312e1f 100644
---
a/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/ReflectionServiceDescriptorTest.java
+++
b/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/ReflectionServiceDescriptorTest.java
@@ -96,4 +96,4 @@ class ReflectionServiceDescriptorTest {
DemoService.class);
Assertions.assertEquals(service2.hashCode(), service3.hashCode());
}
-}
\ No newline at end of file
+}
diff --git
a/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/ScopeModelAwareExtensionProcessorTest.java
b/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/ScopeModelAwareExtensionProcessorTest.java
index 999d403a2e..87d0c11771 100644
---
a/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/ScopeModelAwareExtensionProcessorTest.java
+++
b/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/ScopeModelAwareExtensionProcessorTest.java
@@ -34,8 +34,8 @@ class ScopeModelAwareExtensionProcessorTest {
@BeforeEach
public void setUp() {
frameworkModel = new FrameworkModel();
- applicationModel = new ApplicationModel(frameworkModel);
- moduleModel = new ModuleModel(applicationModel);
+ applicationModel = frameworkModel.newApplication();
+ moduleModel = applicationModel.newModule();
}
@AfterEach
@@ -76,4 +76,4 @@ class ScopeModelAwareExtensionProcessorTest {
Assertions.assertEquals(mockScopeModelAware.getApplicationModel(),
applicationModel);
Assertions.assertEquals(mockScopeModelAware.getModuleModel(),
moduleModel);
}
-}
\ No newline at end of file
+}
diff --git
a/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/ScopeModelTest.java
b/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/ScopeModelTest.java
index e17f9319e6..a7f56c4066 100644
--- a/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/ScopeModelTest.java
+++ b/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/ScopeModelTest.java
@@ -109,4 +109,4 @@ class ScopeModelTest {
List<String> remainFrameworks =
FrameworkModel.getAllInstances().stream().map(m ->
m.getDesc()).collect(Collectors.toList());
Assertions.assertEquals(0, FrameworkModel.getAllInstances().size(),
"FrameworkModel is not completely destroyed: " + remainFrameworks);
}
-}
\ No newline at end of file
+}
diff --git
a/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/ScopeModelUtilTest.java
b/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/ScopeModelUtilTest.java
index 74e912ffdf..147fad70d0 100644
---
a/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/ScopeModelUtilTest.java
+++
b/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/ScopeModelUtilTest.java
@@ -36,8 +36,8 @@ class ScopeModelUtilTest {
@BeforeEach
public void setUp() {
frameworkModel = new FrameworkModel();
- applicationModel = new ApplicationModel(frameworkModel);
- moduleModel = new ModuleModel(applicationModel);
+ applicationModel = frameworkModel.newApplication();
+ moduleModel = applicationModel.newModule();
}
@AfterEach
@@ -111,4 +111,4 @@ class ScopeModelUtilTest {
}
}
-}
\ No newline at end of file
+}
diff --git
a/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/ServiceRepositoryTest.java
b/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/ServiceRepositoryTest.java
index 06787f726c..d7490c0333 100644
---
a/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/ServiceRepositoryTest.java
+++
b/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/ServiceRepositoryTest.java
@@ -40,8 +40,8 @@ class ServiceRepositoryTest {
@BeforeEach
public void setUp() {
frameworkModel = new FrameworkModel();
- applicationModel = new ApplicationModel(frameworkModel);
- moduleModel = new ModuleModel(applicationModel);
+ applicationModel = frameworkModel.newApplication();
+ moduleModel = applicationModel.newModule();
}
@AfterEach
@@ -88,4 +88,4 @@ class ServiceRepositoryTest {
}
-}
\ No newline at end of file
+}
diff --git
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ConfigScopeModelInitializerTest.java
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ConfigScopeModelInitializerTest.java
index 41dcd420ca..4946e0b2b2 100644
---
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ConfigScopeModelInitializerTest.java
+++
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ConfigScopeModelInitializerTest.java
@@ -33,8 +33,8 @@ class ConfigScopeModelInitializerTest {
@BeforeEach
public void setUp() {
frameworkModel = new FrameworkModel();
- applicationModel = new ApplicationModel(frameworkModel);
- moduleModel = new ModuleModel(applicationModel);
+ applicationModel = frameworkModel.newApplication();
+ moduleModel = applicationModel.newModule();
}
@AfterEach
@@ -47,4 +47,4 @@ class ConfigScopeModelInitializerTest {
Assertions.assertNotNull(applicationModel.getDeployer());
Assertions.assertNotNull(moduleModel.getDeployer());
}
-}
\ No newline at end of file
+}
diff --git
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ReferenceConfigTest.java
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ReferenceConfigTest.java
index 043c974170..e2c781ec22 100644
---
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ReferenceConfigTest.java
+++
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ReferenceConfigTest.java
@@ -966,9 +966,9 @@ class ReferenceConfigTest {
@Test
void testDifferentClassLoader() throws Exception {
ApplicationConfig applicationConfig = new ApplicationConfig("TestApp");
- ApplicationModel applicationModel = new
ApplicationModel(FrameworkModel.defaultModel());
+ ApplicationModel applicationModel = ApplicationModel.defaultModel();
applicationModel.getApplicationConfigManager().setApplication(applicationConfig);
- ModuleModel moduleModel = new ModuleModel(applicationModel);
+ ModuleModel moduleModel = applicationModel.newModule();
DemoService demoService = new DemoServiceImpl();
ServiceConfig<DemoService> serviceConfig = new ServiceConfig<>();
@@ -1047,9 +1047,9 @@ class ReferenceConfigTest {
TestClassLoader2 classLoader3 = new TestClassLoader2(classLoader2,
basePath);
ApplicationConfig applicationConfig = new ApplicationConfig("TestApp");
- ApplicationModel applicationModel = new
ApplicationModel(frameworkModel);
+ ApplicationModel applicationModel = frameworkModel.newApplication();
applicationModel.getApplicationConfigManager().setApplication(applicationConfig);
- ModuleModel moduleModel = new ModuleModel(applicationModel);
+ ModuleModel moduleModel = applicationModel.newModule();
Class<?> clazz1 =
classLoader1.loadClass(MultiClassLoaderService.class.getName(), false);
Class<?> clazz1impl =
classLoader1.loadClass(MultiClassLoaderServiceImpl.class.getName(), false);
diff --git
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/MultiInstanceTest.java
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/MultiInstanceTest.java
index 6f2a035422..276afc4839 100644
---
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/MultiInstanceTest.java
+++
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/MultiInstanceTest.java
@@ -739,7 +739,7 @@ class MultiInstanceTest {
// consumer app
- ApplicationModel consumerApplicationModel = new
ApplicationModel(FrameworkModel.defaultModel());
+ ApplicationModel consumerApplicationModel =
ApplicationModel.defaultModel();
ReferenceConfig<DemoService> referenceConfig = new
ReferenceConfig<>();
referenceConfig.setScopeModel(consumerApplicationModel.getDefaultModule());
referenceConfig.setApplication(new
ApplicationConfig("consumer-app"));
diff --git
a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/context/customize/DubboSpringInitCustomizerTest.java
b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/context/customize/DubboSpringInitCustomizerTest.java
index ed2178bde6..4662a62acc 100644
---
a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/context/customize/DubboSpringInitCustomizerTest.java
+++
b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/context/customize/DubboSpringInitCustomizerTest.java
@@ -105,4 +105,4 @@ class DubboSpringInitCustomizerTest {
}
-}
\ No newline at end of file
+}
diff --git
a/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/InvokeTelnetTest.java
b/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/InvokeTelnetTest.java
index 4b101ad1ac..3c49226a27 100644
---
a/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/InvokeTelnetTest.java
+++
b/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/InvokeTelnetTest.java
@@ -58,7 +58,7 @@ class InvokeTelnetTest {
mockChannel = mock(Channel.class);
mockCommandContext = mock(CommandContext.class);
given(mockCommandContext.getRemote()).willReturn(mockChannel);
- ApplicationModel applicationModel = new
ApplicationModel(frameworkModel);
+ ApplicationModel applicationModel = frameworkModel.newApplication();
repository =
applicationModel.getDefaultModule().getServiceRepository();
}
@@ -267,4 +267,4 @@ class InvokeTelnetTest {
null
);
}
-}
\ No newline at end of file
+}
diff --git
a/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/LiveTest.java
b/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/LiveTest.java
index b655b298db..a54d81e4d1 100644
---
a/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/LiveTest.java
+++
b/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/LiveTest.java
@@ -50,4 +50,4 @@ class LiveTest {
Assertions.assertEquals(result, "true");
Assertions.assertEquals(commandContext.getHttpCode(), 200);
}
-}
\ No newline at end of file
+}
diff --git
a/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/LsTest.java
b/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/LsTest.java
index 8eb412f907..335a7a4b05 100644
---
a/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/LsTest.java
+++
b/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/LsTest.java
@@ -100,4 +100,4 @@ class LsTest {
serviceMetadata, methodConfigs,
referenceConfig.getInterfaceClassLoader());
repository.registerConsumer(consumerModel);
}
-}
\ No newline at end of file
+}
diff --git
a/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/OfflineTest.java
b/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/OfflineTest.java
index bee74a7448..2c665abfe5 100644
---
a/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/OfflineTest.java
+++
b/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/OfflineTest.java
@@ -100,4 +100,4 @@ class OfflineTest {
);
repository.registerProvider(providerModel);
}
-}
\ No newline at end of file
+}
diff --git
a/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/OnlineTest.java
b/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/OnlineTest.java
index c7b4c986e8..f5c4cf0d20 100644
---
a/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/OnlineTest.java
+++
b/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/OnlineTest.java
@@ -100,4 +100,4 @@ class OnlineTest {
);
repository.registerProvider(providerModel);
}
-}
\ No newline at end of file
+}
diff --git
a/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/PublishMetadataTest.java
b/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/PublishMetadataTest.java
index 7c763dd96c..0b3f02bfe4 100644
---
a/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/PublishMetadataTest.java
+++
b/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/PublishMetadataTest.java
@@ -68,4 +68,4 @@ class PublishMetadataTest {
Assertions.assertEquals(result, expectResult);
}
-}
\ No newline at end of file
+}
diff --git
a/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/SerializeCheckStatusTest.java
b/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/SerializeCheckStatusTest.java
index 6f32cdd239..f7ee1d69d1 100644
---
a/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/SerializeCheckStatusTest.java
+++
b/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/SerializeCheckStatusTest.java
@@ -19,6 +19,7 @@ package org.apache.dubbo.qos.command.impl;
import org.apache.dubbo.common.utils.SerializeSecurityManager;
import org.apache.dubbo.qos.command.CommandContext;
import org.apache.dubbo.rpc.model.FrameworkModel;
+
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
diff --git
a/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/SerializeWarnedClassesTest.java
b/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/SerializeWarnedClassesTest.java
index bc957f9104..d772e75713 100644
---
a/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/SerializeWarnedClassesTest.java
+++
b/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/SerializeWarnedClassesTest.java
@@ -19,6 +19,7 @@ package org.apache.dubbo.qos.command.impl;
import org.apache.dubbo.common.utils.SerializeSecurityManager;
import org.apache.dubbo.qos.command.CommandContext;
import org.apache.dubbo.rpc.model.FrameworkModel;
+
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
diff --git
a/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/util/SerializeCheckUtilsTest.java
b/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/util/SerializeCheckUtilsTest.java
index df8ddc93a0..00c23ca847 100644
---
a/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/util/SerializeCheckUtilsTest.java
+++
b/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/util/SerializeCheckUtilsTest.java
@@ -19,6 +19,7 @@ package org.apache.dubbo.qos.command.util;
import org.apache.dubbo.common.utils.SerializeCheckStatus;
import org.apache.dubbo.common.utils.SerializeSecurityManager;
import org.apache.dubbo.rpc.model.FrameworkModel;
+
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
diff --git
a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/MetadataServiceNameMappingTest.java
b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/MetadataServiceNameMappingTest.java
index a217a214cb..b34928fb41 100644
---
a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/MetadataServiceNameMappingTest.java
+++
b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/MetadataServiceNameMappingTest.java
@@ -32,6 +32,8 @@ import org.apache.dubbo.metadata.report.MetadataReport;
import org.apache.dubbo.metadata.report.MetadataReportInstance;
import org.apache.dubbo.rpc.model.ApplicationModel;
import org.apache.dubbo.rpc.model.FrameworkModel;
+
+import org.checkerframework.checker.units.qual.A;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -58,7 +60,7 @@ class MetadataServiceNameMappingTest {
@BeforeEach
public void setUp() {
- applicationModel = new ApplicationModel(FrameworkModel.defaultModel());
+ applicationModel = ApplicationModel.defaultModel();
configManager = mock(ConfigManager.class);
metadataReport = mock(MetadataReport.class);
metadataReportList.put("default", metadataReport);
diff --git
a/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/DecodeableRpcInvocationTest.java
b/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/DecodeableRpcInvocationTest.java
index 25c75d2085..da86b50045 100644
---
a/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/DecodeableRpcInvocationTest.java
+++
b/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/DecodeableRpcInvocationTest.java
@@ -66,7 +66,7 @@ class DecodeableRpcInvocationTest {
ChannelBuffer buffer = writeBuffer(url, inv, proto);
FrameworkModel frameworkModel = new FrameworkModel();
- ApplicationModel applicationModel = new
ApplicationModel(frameworkModel);
+ ApplicationModel applicationModel = frameworkModel.newApplication();
applicationModel.getDefaultModule().getServiceRepository().registerService(DemoService.class.getName(),
DemoService.class);
frameworkModel.getServiceRepository().registerProviderUrl(url);
diff --git
a/dubbo-rpc/dubbo-rpc-injvm/src/test/java/org/apache/dubbo/rpc/protocol/injvm/InjvmClassLoaderTest.java
b/dubbo-rpc/dubbo-rpc-injvm/src/test/java/org/apache/dubbo/rpc/protocol/injvm/InjvmClassLoaderTest.java
index cd47462c1b..98af4c313b 100644
---
a/dubbo-rpc/dubbo-rpc-injvm/src/test/java/org/apache/dubbo/rpc/protocol/injvm/InjvmClassLoaderTest.java
+++
b/dubbo-rpc/dubbo-rpc-injvm/src/test/java/org/apache/dubbo/rpc/protocol/injvm/InjvmClassLoaderTest.java
@@ -27,7 +27,6 @@ import org.apache.dubbo.rpc.Protocol;
import org.apache.dubbo.rpc.ProxyFactory;
import org.apache.dubbo.rpc.model.ApplicationModel;
import org.apache.dubbo.rpc.model.ConsumerModel;
-import org.apache.dubbo.rpc.model.FrameworkModel;
import org.apache.dubbo.rpc.model.ModuleModel;
import org.apache.dubbo.rpc.model.ProviderModel;
import org.apache.dubbo.rpc.model.ServiceDescriptor;
@@ -62,9 +61,9 @@ class InjvmClassLoaderTest {
TestClassLoader2 classLoader3 = new TestClassLoader2(classLoader2,
basePath);
ApplicationConfig applicationConfig = new ApplicationConfig("TestApp");
- ApplicationModel applicationModel = new
ApplicationModel(FrameworkModel.defaultModel());
+ ApplicationModel applicationModel = ApplicationModel.defaultModel();
applicationModel.getApplicationConfigManager().setApplication(applicationConfig);
- ModuleModel moduleModel = new ModuleModel(applicationModel);
+ ModuleModel moduleModel = applicationModel.newModule();
Class clazz1 =
classLoader1.loadClass(MultiClassLoaderService.class.getName(), false);
Class<?> clazz1impl =
classLoader1.loadClass(MultiClassLoaderServiceImpl.class.getName(), false);
diff --git
a/dubbo-rpc/dubbo-rpc-injvm/src/test/java/org/apache/dubbo/rpc/protocol/injvm/InjvmDeepCopyTest.java
b/dubbo-rpc/dubbo-rpc-injvm/src/test/java/org/apache/dubbo/rpc/protocol/injvm/InjvmDeepCopyTest.java
index 3acb7b254f..80c7fba273 100644
---
a/dubbo-rpc/dubbo-rpc-injvm/src/test/java/org/apache/dubbo/rpc/protocol/injvm/InjvmDeepCopyTest.java
+++
b/dubbo-rpc/dubbo-rpc-injvm/src/test/java/org/apache/dubbo/rpc/protocol/injvm/InjvmDeepCopyTest.java
@@ -25,7 +25,6 @@ import org.apache.dubbo.rpc.Protocol;
import org.apache.dubbo.rpc.ProxyFactory;
import org.apache.dubbo.rpc.model.ApplicationModel;
import org.apache.dubbo.rpc.model.ConsumerModel;
-import org.apache.dubbo.rpc.model.FrameworkModel;
import org.apache.dubbo.rpc.model.ModuleModel;
import org.apache.dubbo.rpc.model.ProviderModel;
import org.apache.dubbo.rpc.model.ServiceDescriptor;
@@ -40,7 +39,7 @@ class InjvmDeepCopyTest {
@Test
void testDeepCopy() {
- ApplicationModel applicationModel = new
ApplicationModel(FrameworkModel.defaultModel());
+ ApplicationModel applicationModel = ApplicationModel.defaultModel();
applicationModel.getApplicationConfigManager().setApplication(new
ApplicationConfig("TestInjvm"));
ModuleModel moduleModel = applicationModel.newModule();
diff --git
a/dubbo-rpc/dubbo-rpc-triple/src/test/java/org/apache/dubbo/rpc/protocol/tri/service/TriBuiltinServiceTest.java
b/dubbo-rpc/dubbo-rpc-triple/src/test/java/org/apache/dubbo/rpc/protocol/tri/service/TriBuiltinServiceTest.java
index 413a44eca7..6710fdc142 100644
---
a/dubbo-rpc/dubbo-rpc-triple/src/test/java/org/apache/dubbo/rpc/protocol/tri/service/TriBuiltinServiceTest.java
+++
b/dubbo-rpc/dubbo-rpc-triple/src/test/java/org/apache/dubbo/rpc/protocol/tri/service/TriBuiltinServiceTest.java
@@ -16,12 +16,12 @@
*/
package org.apache.dubbo.rpc.protocol.tri.service;
-import io.grpc.health.v1.DubboHealthTriple;
import org.apache.dubbo.rpc.PathResolver;
import org.apache.dubbo.rpc.model.FrameworkModel;
-
import org.apache.dubbo.rpc.model.ModuleServiceRepository;
import org.apache.dubbo.rpc.stub.StubSuppliers;
+
+import io.grpc.health.v1.DubboHealthTriple;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;