This is an automated email from the ASF dual-hosted git repository.

albumenj pushed a commit to branch 3.2
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/3.2 by this push:
     new 17887768d0 Add onInitialize Support (#11962)
17887768d0 is described below

commit 17887768d0ea4dbea61d0df0b86e72d58805777d
Author: Albumen Kevin <[email protected]>
AuthorDate: Sun Apr 2 14:03:30 2023 +0800

    Add onInitialize Support (#11962)
    
    * Add onInitialize Support
    
    * Fix compile
---
 .../common/deploy/ApplicationDeployListener.java    |  1 +
 .../apache/dubbo/common/deploy/DeployListener.java  |  4 ++++
 .../dubbo/common/deploy/DeployListenerAdapter.java  |  5 +++++
 .../config/deploy/DefaultApplicationDeployer.java   | 12 ++++++++++++
 .../dubbo/config/deploy/DefaultModuleDeployer.java  | 21 +++++++++++++++++----
 .../config/metadata/ExporterDeployListener.java     |  5 +++++
 .../dubbo/config/bootstrap/MultiInstanceTest.java   |  5 +++++
 .../dubbo/security/cert/CertDeployerListener.java   |  5 +++++
 8 files changed, 54 insertions(+), 4 deletions(-)

diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/common/deploy/ApplicationDeployListener.java
 
b/dubbo-common/src/main/java/org/apache/dubbo/common/deploy/ApplicationDeployListener.java
index 674ca90e3c..f045c4259d 100644
--- 
a/dubbo-common/src/main/java/org/apache/dubbo/common/deploy/ApplicationDeployListener.java
+++ 
b/dubbo-common/src/main/java/org/apache/dubbo/common/deploy/ApplicationDeployListener.java
@@ -25,6 +25,7 @@ import org.apache.dubbo.rpc.model.ApplicationModel;
  */
 @SPI(scope = ExtensionScope.APPLICATION)
 public interface ApplicationDeployListener extends 
DeployListener<ApplicationModel> {
+
     default void onModuleStarted(ApplicationModel applicationModel) {
 
     }
diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/common/deploy/DeployListener.java 
b/dubbo-common/src/main/java/org/apache/dubbo/common/deploy/DeployListener.java
index fb0e7ad4d9..94d31bbd64 100644
--- 
a/dubbo-common/src/main/java/org/apache/dubbo/common/deploy/DeployListener.java
+++ 
b/dubbo-common/src/main/java/org/apache/dubbo/common/deploy/DeployListener.java
@@ -19,6 +19,10 @@ package org.apache.dubbo.common.deploy;
 import org.apache.dubbo.rpc.model.ScopeModel;
 
 public interface DeployListener<E extends ScopeModel> {
+    /**
+     * Useful to inject some configuration like MetricsConfig, RegistryConfig, 
etc.
+     */
+    void onInitialize(E scopeModel);
 
     void onStarting(E scopeModel);
 
diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/common/deploy/DeployListenerAdapter.java
 
b/dubbo-common/src/main/java/org/apache/dubbo/common/deploy/DeployListenerAdapter.java
index ed78f40c8d..925747dae4 100644
--- 
a/dubbo-common/src/main/java/org/apache/dubbo/common/deploy/DeployListenerAdapter.java
+++ 
b/dubbo-common/src/main/java/org/apache/dubbo/common/deploy/DeployListenerAdapter.java
@@ -19,6 +19,11 @@ package org.apache.dubbo.common.deploy;
 import org.apache.dubbo.rpc.model.ScopeModel;
 
 public class DeployListenerAdapter<E extends ScopeModel> implements 
DeployListener<E>{
+    @Override
+    public void onInitialize(E scopeModel) {
+
+    }
+
     @Override
     public void onStarting(E scopeModel) {
     }
diff --git 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultApplicationDeployer.java
 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultApplicationDeployer.java
index 4220ba5fec..203fcebe94 100644
--- 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultApplicationDeployer.java
+++ 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultApplicationDeployer.java
@@ -201,6 +201,8 @@ public class DefaultApplicationDeployer extends 
AbstractDeployer<ApplicationMode
             if (initialized) {
                 return;
             }
+            onInitialize();
+
             // register shutdown hook
             registerShutdownHook();
 
@@ -1082,6 +1084,16 @@ public class DefaultApplicationDeployer extends 
AbstractDeployer<ApplicationMode
         return newState;
     }
 
+    private void onInitialize() {
+        for (DeployListener<ApplicationModel> listener : listeners) {
+            try {
+                listener.onInitialize(applicationModel);
+            } catch (Throwable e) {
+                logger.error(CONFIG_FAILED_START_MODEL, "", "", 
getIdentifier() + " an exception occurred when handle initialize event", e);
+            }
+        }
+    }
+
     private void exportMetadataService() {
         if (!isStarting()) {
             return;
diff --git 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultModuleDeployer.java
 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultModuleDeployer.java
index 25b6363914..c611892073 100644
--- 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultModuleDeployer.java
+++ 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultModuleDeployer.java
@@ -19,6 +19,7 @@ package org.apache.dubbo.config.deploy;
 import org.apache.dubbo.common.config.ReferenceCache;
 import org.apache.dubbo.common.deploy.AbstractDeployer;
 import org.apache.dubbo.common.deploy.ApplicationDeployer;
+import org.apache.dubbo.common.deploy.DeployListener;
 import org.apache.dubbo.common.deploy.DeployState;
 import org.apache.dubbo.common.deploy.ModuleDeployListener;
 import org.apache.dubbo.common.deploy.ModuleDeployer;
@@ -46,12 +47,12 @@ import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Future;
 
-import static 
org.apache.dubbo.common.constants.LoggerCodeConstants.CONFIG_FAILED_START_MODEL;
-import static 
org.apache.dubbo.common.constants.LoggerCodeConstants.CONFIG_UNABLE_DESTROY_MODEL;
-import static 
org.apache.dubbo.common.constants.LoggerCodeConstants.CONFIG_FAILED_REFERENCE_MODEL;
 import static 
org.apache.dubbo.common.constants.LoggerCodeConstants.CONFIG_FAILED_EXPORT_SERVICE;
-import static 
org.apache.dubbo.common.constants.LoggerCodeConstants.CONFIG_FAILED_WAIT_EXPORT_REFER;
+import static 
org.apache.dubbo.common.constants.LoggerCodeConstants.CONFIG_FAILED_REFERENCE_MODEL;
 import static 
org.apache.dubbo.common.constants.LoggerCodeConstants.CONFIG_FAILED_REFER_SERVICE;
+import static 
org.apache.dubbo.common.constants.LoggerCodeConstants.CONFIG_FAILED_START_MODEL;
+import static 
org.apache.dubbo.common.constants.LoggerCodeConstants.CONFIG_FAILED_WAIT_EXPORT_REFER;
+import static 
org.apache.dubbo.common.constants.LoggerCodeConstants.CONFIG_UNABLE_DESTROY_MODEL;
 
 /**
  * Export/refer services of module
@@ -110,6 +111,8 @@ public class DefaultModuleDeployer extends 
AbstractDeployer<ModuleModel> impleme
             if (initialized) {
                 return;
             }
+            onInitialize();
+
             loadConfigs();
 
             // read ModuleConfig
@@ -249,6 +252,16 @@ public class DefaultModuleDeployer extends 
AbstractDeployer<ModuleModel> impleme
         onModuleStopped();
     }
 
+    private void onInitialize() {
+        for (DeployListener<ModuleModel> listener : listeners) {
+            try {
+                listener.onInitialize(moduleModel);
+            } catch (Throwable e) {
+                logger.error(CONFIG_FAILED_START_MODEL, "", "", 
getIdentifier() + " an exception occurred when handle initialize event", e);
+            }
+        }
+    }
+
     private void onModuleStarting() {
         setStarting();
         startFuture = new CompletableFuture();
diff --git 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/ExporterDeployListener.java
 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/ExporterDeployListener.java
index bff2e2920e..e7237c875d 100644
--- 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/ExporterDeployListener.java
+++ 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/ExporterDeployListener.java
@@ -28,6 +28,11 @@ import static 
org.apache.dubbo.common.constants.CommonConstants.REMOTE_METADATA_
 public class ExporterDeployListener implements ApplicationDeployListener, 
Prioritized {
     protected volatile ConfigurableMetadataServiceExporter 
metadataServiceExporter;
 
+    @Override
+    public void onInitialize(ApplicationModel scopeModel) {
+
+    }
+
     @Override
     public void onStarting(ApplicationModel scopeModel) {
 
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 276afc4839..5987b8acf9 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
@@ -896,6 +896,11 @@ class MultiInstanceTest {
             this.moduleModel = moduleModel;
         }
 
+        @Override
+        public void onInitialize(ModuleModel scopeModel) {
+            Assertions.assertEquals(moduleModel, scopeModel);
+        }
+
         @Override
         public void onStarting(ModuleModel scopeModel) {
             Assertions.assertEquals(moduleModel, scopeModel);
diff --git 
a/dubbo-plugin/dubbo-security/src/main/java/org/apache/dubbo/security/cert/CertDeployerListener.java
 
b/dubbo-plugin/dubbo-security/src/main/java/org/apache/dubbo/security/cert/CertDeployerListener.java
index 8edd581d11..2ed9be0e76 100644
--- 
a/dubbo-plugin/dubbo-security/src/main/java/org/apache/dubbo/security/cert/CertDeployerListener.java
+++ 
b/dubbo-plugin/dubbo-security/src/main/java/org/apache/dubbo/security/cert/CertDeployerListener.java
@@ -30,6 +30,11 @@ public class CertDeployerListener implements 
ApplicationDeployListener {
         dubboCertManager = 
frameworkModel.getBeanFactory().getBean(DubboCertManager.class);
     }
 
+    @Override
+    public void onInitialize(ApplicationModel scopeModel) {
+
+    }
+
     @Override
     public void onStarting(ApplicationModel scopeModel) {
         scopeModel.getApplicationConfigManager().getSsl().ifPresent(sslConfig 
-> {

Reply via email to