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

zhangliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new 941b1b668df Add ContextManagerLifecycleListenerModeRequired (#35016)
941b1b668df is described below

commit 941b1b668df0731785639616d57ec82c6e2986e7
Author: Liang Zhang <zhangli...@apache.org>
AuthorDate: Mon Mar 17 00:14:24 2025 +0800

    Add ContextManagerLifecycleListenerModeRequired (#35016)
---
 ...teSplittingContextManagerLifecycleListener.java |  2 +
 .../PipelineContextManagerLifecycleListener.java   |  2 +
 ...ticsCollectContextManagerLifecycleListener.java |  2 +
 .../mode/manager/ContextManager.java               | 13 ++----
 .../ContextManagerLifecycleListenerFactory.java    | 50 ++++++++++++++++++++++
 ...ontextManagerLifecycleListenerModeRequired.java | 38 ++++++++++++++++
 6 files changed, 98 insertions(+), 9 deletions(-)

diff --git 
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/listener/ReadwriteSplittingContextManagerLifecycleListener.java
 
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/listener/ReadwriteSplittingContextManagerLifecycleListener.java
index ce7e240718a..7c6b577824e 100644
--- 
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/listener/ReadwriteSplittingContextManagerLifecycleListener.java
+++ 
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/listener/ReadwriteSplittingContextManagerLifecycleListener.java
@@ -23,12 +23,14 @@ import 
org.apache.shardingsphere.infra.rule.attribute.datasource.StaticDataSourc
 import 
org.apache.shardingsphere.infra.state.datasource.qualified.QualifiedDataSourceState;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import 
org.apache.shardingsphere.mode.manager.listener.ContextManagerLifecycleListener;
+import 
org.apache.shardingsphere.mode.manager.listener.ContextManagerLifecycleListenerModeRequired;
 
 import java.util.Map;
 
 /**
  * Readwrite splitting context manager lifecycle listener.
  */
+@ContextManagerLifecycleListenerModeRequired("Cluster")
 public class ReadwriteSplittingContextManagerLifecycleListener implements 
ContextManagerLifecycleListener {
     
     @Override
diff --git 
a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/listener/PipelineContextManagerLifecycleListener.java
 
b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/listener/PipelineContextManagerLifecycleListener.java
index 09c5fb2dff3..26f9c69a0da 100644
--- 
a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/listener/PipelineContextManagerLifecycleListener.java
+++ 
b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/listener/PipelineContextManagerLifecycleListener.java
@@ -35,6 +35,7 @@ import 
org.apache.shardingsphere.elasticjob.lite.lifecycle.domain.JobBriefInfo;
 import org.apache.shardingsphere.infra.database.core.DefaultDatabase;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import 
org.apache.shardingsphere.mode.manager.listener.ContextManagerLifecycleListener;
+import 
org.apache.shardingsphere.mode.manager.listener.ContextManagerLifecycleListenerModeRequired;
 
 import java.util.List;
 import java.util.stream.Collectors;
@@ -42,6 +43,7 @@ import java.util.stream.Collectors;
 /**
  * Pipeline context manager lifecycle listener.
  */
+@ContextManagerLifecycleListenerModeRequired("Cluster")
 @Slf4j
 public final class PipelineContextManagerLifecycleListener implements 
ContextManagerLifecycleListener {
     
diff --git 
a/kernel/schedule/core/src/main/java/org/apache/shardingsphere/schedule/core/job/statistics/collect/StatisticsCollectContextManagerLifecycleListener.java
 
b/kernel/schedule/core/src/main/java/org/apache/shardingsphere/schedule/core/job/statistics/collect/StatisticsCollectContextManagerLifecycleListener.java
index 361be27bf49..92532d2a46e 100644
--- 
a/kernel/schedule/core/src/main/java/org/apache/shardingsphere/schedule/core/job/statistics/collect/StatisticsCollectContextManagerLifecycleListener.java
+++ 
b/kernel/schedule/core/src/main/java/org/apache/shardingsphere/schedule/core/job/statistics/collect/StatisticsCollectContextManagerLifecycleListener.java
@@ -20,10 +20,12 @@ package 
org.apache.shardingsphere.schedule.core.job.statistics.collect;
 import org.apache.shardingsphere.infra.instance.metadata.InstanceType;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import 
org.apache.shardingsphere.mode.manager.listener.ContextManagerLifecycleListener;
+import 
org.apache.shardingsphere.mode.manager.listener.ContextManagerLifecycleListenerModeRequired;
 
 /**
  * Statistics collect context manager lifecycle listener.
  */
+@ContextManagerLifecycleListenerModeRequired("Cluster")
 public final class StatisticsCollectContextManagerLifecycleListener implements 
ContextManagerLifecycleListener {
     
     @Override
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
index c2fcf3bc097..fc427242702 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
@@ -39,11 +39,10 @@ import 
org.apache.shardingsphere.infra.metadata.database.schema.manager.GenericS
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
 import 
org.apache.shardingsphere.infra.metadata.statistics.builder.ShardingSphereStatisticsFactory;
 import org.apache.shardingsphere.infra.rule.builder.global.GlobalRulesBuilder;
-import org.apache.shardingsphere.infra.spi.ShardingSphereServiceLoader;
-import 
org.apache.shardingsphere.mode.manager.listener.ContextManagerLifecycleListener;
-import org.apache.shardingsphere.mode.metadata.manager.MetaDataContextManager;
+import 
org.apache.shardingsphere.mode.manager.listener.ContextManagerLifecycleListenerFactory;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
 import org.apache.shardingsphere.mode.metadata.factory.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.metadata.manager.MetaDataContextManager;
 import 
org.apache.shardingsphere.mode.metadata.manager.resource.SwitchingResource;
 import org.apache.shardingsphere.mode.persist.PersistServiceFacade;
 import org.apache.shardingsphere.mode.spi.repository.PersistRepository;
@@ -80,9 +79,7 @@ public final class ContextManager implements AutoCloseable {
         persistServiceFacade = new PersistServiceFacade(repository, 
computeNodeInstanceContext.getModeConfiguration(), metaDataContextManager);
         stateContext = new 
StateContext(persistServiceFacade.getStateService().load());
         executorEngine = 
ExecutorEngine.createExecutorEngineWithSize(metaDataContexts.getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.KERNEL_EXECUTOR_SIZE));
-        if (computeNodeInstanceContext.getModeConfiguration().isCluster()) {
-            
ShardingSphereServiceLoader.getServiceInstances(ContextManagerLifecycleListener.class).forEach(each
 -> each.onInitialized(this));
-        }
+        ContextManagerLifecycleListenerFactory.getListeners(this).forEach(each 
-> each.onInitialized(this));
     }
     
     /**
@@ -231,9 +228,7 @@ public final class ContextManager implements AutoCloseable {
     
     @Override
     public void close() {
-        if (computeNodeInstanceContext.getModeConfiguration().isCluster()) {
-            
ShardingSphereServiceLoader.getServiceInstances(ContextManagerLifecycleListener.class).forEach(each
 -> each.onDestroyed(this));
-        }
+        ContextManagerLifecycleListenerFactory.getListeners(this).forEach(each 
-> each.onDestroyed(this));
         executorEngine.close();
         metaDataContexts.getMetaData().close();
         persistServiceFacade.close();
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/listener/ContextManagerLifecycleListenerFactory.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/listener/ContextManagerLifecycleListenerFactory.java
new file mode 100644
index 00000000000..af895a7bf72
--- /dev/null
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/listener/ContextManagerLifecycleListenerFactory.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.mode.manager.listener;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.infra.spi.ShardingSphereServiceLoader;
+import org.apache.shardingsphere.mode.manager.ContextManager;
+
+import java.util.Collection;
+import java.util.LinkedList;
+
+/**
+ * Context manager lifecycle listener factory.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class ContextManagerLifecycleListenerFactory {
+    
+    /**
+     * Get context manager lifecycle listeners.
+     *
+     * @param contextManager context manager
+     * @return got listeners
+     */
+    public static Collection<ContextManagerLifecycleListener> 
getListeners(final ContextManager contextManager) {
+        Collection<ContextManagerLifecycleListener> result = new 
LinkedList<>();
+        for (ContextManagerLifecycleListener each : 
ShardingSphereServiceLoader.getServiceInstances(ContextManagerLifecycleListener.class))
 {
+            ContextManagerLifecycleListenerModeRequired modeRequired = 
each.getClass().getAnnotation(ContextManagerLifecycleListenerModeRequired.class);
+            if (null == modeRequired || 
modeRequired.value().equals(contextManager.getComputeNodeInstanceContext().getModeConfiguration().getType()))
 {
+                result.add(each);
+            }
+        }
+        return result;
+    }
+}
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/listener/ContextManagerLifecycleListenerModeRequired.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/listener/ContextManagerLifecycleListenerModeRequired.java
new file mode 100644
index 00000000000..fd408dbab0f
--- /dev/null
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/listener/ContextManagerLifecycleListenerModeRequired.java
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.mode.manager.listener;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Context manager lifecycle listener mode required.
+ */
+@Target(ElementType.TYPE)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface ContextManagerLifecycleListenerModeRequired {
+    
+    /**
+     * Get mode type.
+     *
+     * @return mode type
+     */
+    String value();
+}

Reply via email to