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/common/config/ModuleEnvironment.java b/dubbo-common/src/main/java/org/apache/dubbo/common/config/ModuleEnvironment.java index db532150d3..9557d41839 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/config/ModuleEnvironment.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/config/ModuleEnvironment.java @@ -220,7 +220,7 @@ public class ModuleEnvironment extends Environment implements ModuleExt { } @Override - public void refreshClassLoaders() { + public synchronized void refreshClassLoaders() { orderedPropertiesConfiguration.refresh(); applicationDelegate.refreshClassLoaders(); } 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 1a10209931..00b589402a 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 @@ -55,20 +55,19 @@ public class ApplicationModel extends ScopeModel { public static final String NAME = "ApplicationModel"; private final List moduleModels = new CopyOnWriteArrayList<>(); private final List 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 final AtomicInteger moduleIndex = new AtomicInteger(0); - private final Object moduleLock = new Object(); // --------- static methods ----------// @@ -91,6 +90,262 @@ public class ApplicationModel extends ScopeModel { return FrameworkModel.defaultModel().defaultApplication(); } + // ------------- instance methods ---------------// + + protected ApplicationModel(FrameworkModel frameworkModel) { + this(frameworkModel, false); + } + + protected ApplicationModel(FrameworkModel frameworkModel, boolean isInternal) { + super(frameworkModel, ExtensionScope.APPLICATION, isInternal); + 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(); + + this.internalModule = new ModuleModel(this, true); + this.serviceRepository = new ServiceRepository(this); + + ExtensionLoader extensionLoader = this.getExtensionLoader(ApplicationInitListener.class); + Set listenerNames = extensionLoader.getSupportedExtensions(); + for (String listenerName : listenerNames) { + extensionLoader.getExtension(listenerName).init(); + } + + initApplicationExts(); + + ExtensionLoader initializerExtensionLoader = this.getExtensionLoader(ScopeModelInitializer.class); + Set 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 exts = this.getExtensionLoader(ApplicationExt.class).getSupportedExtensionInstances(); + for (ApplicationExt ext : exts) { + ext.initialize(); + } + } + + @Override + protected void onDestroy() { + 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(); + } + + // 3. Try to destroy protocols to stop this instance from receiving new requests from connections + frameworkModel.tryDestroyProtocols(); + + // 4. destroy application resources + for (ModuleModel moduleModel : moduleModels) { + if (moduleModel != internalModule) { + moduleModel.destroy(); + } + } + // 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(); + + if (environment != null) { + environment.destroy(); + environment = null; + } + if (configManager != null) { + configManager.destroy(); + configManager = null; + } + if (serviceRepository != null) { + serviceRepository.destroy(); + serviceRepository = null; + } + + // 8. destroy framework if none application + frameworkModel.tryDestroy(); + } + } + + public FrameworkModel getFrameworkModel() { + return frameworkModel; + } + + public ModuleModel newModule() { + synchronized (instLock) { + return new ModuleModel(this); + } + } + + @Override + public Environment getModelEnvironment() { + if (environment == null) { + environment = (Environment) this.getExtensionLoader(ApplicationExt.class) + .getExtension(Environment.NAME); + } + return environment; + } + + public ConfigManager getApplicationConfigManager() { + if (configManager == null) { + configManager = (ConfigManager) this.getExtensionLoader(ApplicationExt.class) + .getExtension(ConfigManager.NAME); + } + return configManager; + } + + public ServiceRepository getApplicationServiceRepository() { + return serviceRepository; + } + + public ExecutorRepository getApplicationExecutorRepository() { + return ExecutorRepository.getInstance(this); + } + + public ApplicationConfig getCurrentConfig() { + return getApplicationConfigManager().getApplicationOrElseThrow(); + } + + public String getApplicationName() { + return getCurrentConfig().getName(); + } + + public String tryGetApplicationName() { + Optional appCfgOptional = getApplicationConfigManager().getApplication(); + return appCfgOptional.isPresent() ? appCfgOptional.get().getName() : null; + } + + void addModule(ModuleModel moduleModel, boolean isInternal) { + synchronized (instLock) { + if (!this.moduleModels.contains(moduleModel)) { + checkDestroyed(); + this.moduleModels.add(moduleModel); + moduleModel.setInternalId(buildInternalId(getInternalId(), moduleIndex.getAndIncrement())); + if (!isInternal) { + pubModuleModels.add(moduleModel); + } + } + } + } + + public void removeModule(ModuleModel moduleModel) { + synchronized (instLock) { + this.moduleModels.remove(moduleModel); + this.pubModuleModels.remove(moduleModel); + if (moduleModel == defaultModule) { + defaultModule = findDefaultModule(); + } + } + } + + void tryDestroy() { + synchronized (instLock) { + if (this.moduleModels.isEmpty() + || (this.moduleModels.size() == 1 && this.moduleModels.get(0) == internalModule)) { + destroy(); + } + } + } + + private void checkDestroyed() { + if (isDestroyed()) { + throw new IllegalStateException("ApplicationModel is destroyed"); + } + } + + public List getModuleModels() { + return Collections.unmodifiableList(moduleModels); + } + + public List getPubModuleModels() { + return Collections.unmodifiableList(pubModuleModels); + } + + public ModuleModel getDefaultModule() { + if (defaultModule == null) { + synchronized (instLock) { + if (defaultModule == null) { + defaultModule = findDefaultModule(); + if (defaultModule == null) { + defaultModule = this.newModule(); + } + } + } + } + return defaultModule; + } + + private ModuleModel findDefaultModule() { + synchronized (instLock) { + for (ModuleModel moduleModel : moduleModels) { + if (moduleModel != internalModule) { + return moduleModel; + } + } + return null; + } + } + + public ModuleModel getInternalModule() { + return internalModule; + } + + @Override + public void addClassLoader(ClassLoader classLoader) { + super.addClassLoader(classLoader); + if (environment != null) { + environment.refreshClassLoaders(); + } + } + + @Override + public void removeClassLoader(ClassLoader classLoader) { + super.removeClassLoader(classLoader); + if (environment != null) { + environment.refreshClassLoaders(); + } + } + + @Override + protected boolean checkIfClassLoaderCanRemoved(ClassLoader classLoader) { + return super.checkIfClassLoaderCanRemoved(classLoader) && !containsClassLoader(classLoader); + } + + protected boolean containsClassLoader(ClassLoader classLoader) { + return moduleModels.stream().anyMatch(moduleModel -> moduleModel.getClassLoaders().contains(classLoader)); + } + + public ApplicationDeployer getDeployer() { + return deployer; + } + + public void setDeployer(ApplicationDeployer deployer) { + this.deployer = deployer; + } + + // =============================== Deprecated Methods Start ======================================= + /** * @deprecated use {@link ServiceRepository#allConsumerModels()} */ @@ -187,218 +442,6 @@ public class ApplicationModel extends ScopeModel { } } - // ------------- instance methods ---------------// - - public ApplicationModel(FrameworkModel frameworkModel) { - this(frameworkModel, false); - } - - public 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"); - } - - @Override - protected void initialize() { - super.initialize(); - internalModule = new ModuleModel(this, true); - this.serviceRepository = new ServiceRepository(this); - - ExtensionLoader extensionLoader = this.getExtensionLoader(ApplicationInitListener.class); - Set listenerNames = extensionLoader.getSupportedExtensions(); - for (String listenerName : listenerNames) { - extensionLoader.getExtension(listenerName).init(); - } - - initApplicationExts(); - - ExtensionLoader initializerExtensionLoader = this.getExtensionLoader(ScopeModelInitializer.class); - Set initializers = initializerExtensionLoader.getSupportedExtensionInstances(); - for (ScopeModelInitializer initializer : initializers) { - initializer.initializeApplicationModel(this); - } - } - - private void initApplicationExts() { - Set exts = this.getExtensionLoader(ApplicationExt.class).getSupportedExtensionInstances(); - for (ApplicationExt ext : exts) { - ext.initialize(); - } - } - - @Override - protected void onDestroy() { - // 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(); - } - - // 3. Try to destroy protocols to stop this instance from receiving new requests from connections - frameworkModel.tryDestroyProtocols(); - - // 4. destroy application resources - for (ModuleModel moduleModel : moduleModels) { - if (moduleModel != internalModule) { - moduleModel.destroy(); - } - } - // 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(); - - if (environment != null) { - environment.destroy(); - environment = null; - } - if (configManager != null) { - configManager.destroy(); - configManager = null; - } - 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); - } - - @Override - public Environment getModelEnvironment() { - if (environment == null) { - environment = (Environment) this.getExtensionLoader(ApplicationExt.class) - .getExtension(Environment.NAME); - } - return environment; - } - - public ConfigManager getApplicationConfigManager() { - if (configManager == null) { - configManager = (ConfigManager) this.getExtensionLoader(ApplicationExt.class) - .getExtension(ConfigManager.NAME); - } - return configManager; - } - - public ServiceRepository getApplicationServiceRepository() { - return serviceRepository; - } - - public ExecutorRepository getApplicationExecutorRepository() { - return ExecutorRepository.getInstance(this); - } - - public ApplicationConfig getCurrentConfig() { - return getApplicationConfigManager().getApplicationOrElseThrow(); - } - - public String getApplicationName() { - return getCurrentConfig().getName(); - } - - public String tryGetApplicationName() { - Optional appCfgOptional = getApplicationConfigManager().getApplication(); - return appCfgOptional.isPresent() ? appCfgOptional.get().getName() : null; - } - - void addModule(ModuleModel moduleModel, boolean isInternal) { - synchronized (moduleLock) { - if (!this.moduleModels.contains(moduleModel)) { - checkDestroyed(); - this.moduleModels.add(moduleModel); - moduleModel.setInternalId(buildInternalId(getInternalId(), moduleIndex.getAndIncrement())); - if (!isInternal) { - pubModuleModels.add(moduleModel); - } - } - } - } - - public void removeModule(ModuleModel moduleModel) { - synchronized (moduleLock) { - this.moduleModels.remove(moduleModel); - this.pubModuleModels.remove(moduleModel); - if (moduleModel == defaultModule) { - defaultModule = findDefaultModule(); - } - } - } - - void tryDestroy() { - if (this.moduleModels.isEmpty() - || (this.moduleModels.size() == 1 && this.moduleModels.get(0) == internalModule)) { - destroy(); - } - } - - private void checkDestroyed() { - if (isDestroyed()) { - throw new IllegalStateException("ApplicationModel is destroyed"); - } - } - - public List getModuleModels() { - return Collections.unmodifiableList(moduleModels); - } - - public List getPubModuleModels() { - return Collections.unmodifiableList(pubModuleModels); - } - - public ModuleModel getDefaultModule() { - if (defaultModule == null) { - synchronized (moduleLock) { - if (defaultModule == null) { - defaultModule = findDefaultModule(); - if (defaultModule == null) { - defaultModule = this.newModule(); - } - } - } - } - return defaultModule; - } - - private ModuleModel findDefaultModule() { - for (ModuleModel moduleModel : moduleModels) { - if (moduleModel != internalModule) { - return moduleModel; - } - } - return null; - } - - public ModuleModel getInternalModule() { - return internalModule; - } - /** * @deprecated only for ut */ @@ -423,37 +466,5 @@ public class ApplicationModel extends ScopeModel { this.serviceRepository = serviceRepository; } - @Override - public void addClassLoader(ClassLoader classLoader) { - super.addClassLoader(classLoader); - if (environment != null) { - environment.refreshClassLoaders(); - } - } - - @Override - public void removeClassLoader(ClassLoader classLoader) { - super.removeClassLoader(classLoader); - if (environment != null) { - environment.refreshClassLoaders(); - } - } - - @Override - protected boolean checkIfClassLoaderCanRemoved(ClassLoader classLoader) { - return super.checkIfClassLoaderCanRemoved(classLoader) && !containsClassLoader(classLoader); - } - - protected boolean containsClassLoader(ClassLoader classLoader) { - return moduleModels.stream().anyMatch(moduleModel -> moduleModel.getClassLoaders().contains(classLoader)); - } - - public ApplicationDeployer getDeployer() { - return deployer; - } - - public void setDeployer(ApplicationDeployer deployer) { - this.deployer = deployer; - } - + // =============================== 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 static final List allInstances = new CopyOnWriteArrayList<>(); + + // ========================= Static Fields End =================================== + + // internal app index is 0, default app index is 1 + private final AtomicLong appIndex = new AtomicLong(0); + private volatile ApplicationModel defaultAppModel; - private static List allInstances = new CopyOnWriteArrayList<>(); + private final List applicationModels = new CopyOnWriteArrayList<>(); - private List applicationModels = new CopyOnWriteArrayList<>(); + private final List pubApplicationModels = new CopyOnWriteArrayList<>(); - private List pubApplicationModels = new CopyOnWriteArrayList<>(); + private final FrameworkServiceRepository serviceRepository; - private FrameworkServiceRepository serviceRepository; - - private ApplicationModel internalApplicationModel; - - 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(); + synchronized (instLock) { + this.setInternalId(String.valueOf(index.getAndIncrement())); + // register FrameworkModel instance early + allInstances.add(this); + if (LOGGER.isInfoEnabled()) { + LOGGER.info(getDesc() + " is created"); + } + initialize(); + + TypeDefinitionBuilder.initBuilders(this); + + serviceRepository = new FrameworkServiceRepository(this); + + ExtensionLoader initializerExtensionLoader = this.getExtensionLoader(ScopeModelInitializer.class); + Set 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); + } } - if (LOGGER.isInfoEnabled()) { - LOGGER.info(getDesc() + " is created"); - } - initialize(); - } - - @Override - protected void initialize() { - super.initialize(); - - TypeDefinitionBuilder.initBuilders(this); - - serviceRepository = new FrameworkServiceRepository(this); - - ExtensionLoader initializerExtensionLoader = this.getExtensionLoader(ScopeModelInitializer.class); - Set 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); } @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. - if (LOGGER.isInfoEnabled()) { - LOGGER.info("Destroying default framework model: " + getDesc()); + 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(getDesc() + " is destroying ..."); + } + + // 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(); + + if (LOGGER.isInfoEnabled()) { + LOGGER.info(getDesc() + " is destroyed"); + } + + // 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 (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(); - - // notify destroy and clean framework resources - // see org.apache.dubbo.config.deploy.FrameworkModelCleaner - notifyDestroy(); - - if (LOGGER.isInfoEnabled()) { - LOGGER.info(getDesc() + " is destroyed"); - } - - // 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(); } private void checkApplicationDestroy() { - if (applicationModels.size() > 0) { - List 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 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 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 getApplicationModels() { - return Collections.unmodifiableList(pubApplicationModels); + synchronized (globalLock) { + return Collections.unmodifiableList(pubApplicationModels); + } } /** * Get all application models including the internal application model. */ public List 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 1af68750f8..d11ebc9a0b 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,51 +42,50 @@ 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; private boolean lifeCycleManagedExternally = false; - 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"); - } + 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(); - 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"); + initialize(); - // 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 initializerExtensionLoader = this.getExtensionLoader(ScopeModelInitializer.class); - Set initializers = initializerExtensionLoader.getSupportedExtensionInstances(); - for (ScopeModelInitializer initializer : initializers) { - initializer.initializeModuleModel(this); + this.serviceRepository = new ModuleServiceRepository(this); + + initModuleExt(); + + ExtensionLoader initializerExtensionLoader = this.getExtensionLoader(ScopeModelInitializer.class); + Set 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 exts = this.getExtensionLoader(ModuleExt.class).getSupportedExtensionInstances(); for (ModuleExt ext : exts) { @@ -96,39 +95,41 @@ public class ModuleModel extends ScopeModel { @Override protected void onDestroy() { - // 1. remove from applicationModel - applicationModel.removeModule(this); + synchronized (instLock) { + // 1. remove from applicationModel + applicationModel.removeModule(this); - // 2. set stopping - if (deployer != null) { - deployer.preDestroy(); + // 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 classLoaders; + private final Set classLoaders = new ConcurrentHashSet<>(); private final ScopeModel parent; private final ExtensionScope scope; - private ExtensionDirector extensionDirector; + private volatile ExtensionDirector extensionDirector; - private ScopeBeanFactory beanFactory; - private List destroyListeners; + private volatile ScopeBeanFactory beanFactory; + private final List destroyListeners = new CopyOnWriteArrayList<>(); - private List classLoaderListeners; + private final List classLoaderListeners = new CopyOnWriteArrayList<>(); - private Map attributes; + private final Map 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 { * */ 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<>(); + 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); + // 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 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 782b7b6004..6735caa5f5 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 @@ -40,7 +40,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); @@ -82,7 +82,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(); @@ -106,7 +106,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(); @@ -115,7 +115,7 @@ class ApplicationModelTest { @Test void testDestroy() { FrameworkModel frameworkModel = new FrameworkModel(); - ApplicationModel applicationModel = new ApplicationModel(frameworkModel); + ApplicationModel applicationModel = frameworkModel.newApplication(); applicationModel.getDefaultModule(); applicationModel.newModule(); 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 dc1d4115f9..2f76c09edb 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); @@ -58,8 +58,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); @@ -70,8 +70,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); @@ -88,4 +88,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 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 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 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;