You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by or...@apache.org on 2023/04/01 11:30:30 UTC

[camel] 01/02: CAMEL-15105: make the PeriodicTaskScheduler a plugin of the context

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

orpiske pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 6f216ea59bcf9588c36e40a4915f9834aee3069b
Author: Otavio Rodolfo Piske <an...@gmail.com>
AuthorDate: Sat Apr 1 11:49:31 2023 +0200

    CAMEL-15105: make the PeriodicTaskScheduler a plugin of the context
---
 .../component/aws/secretsmanager/SecretsDevConsole.java   |  3 ++-
 .../azure/key/vault/AzureKeyVaultManagerDevConsole.java   |  3 ++-
 .../secret/manager/GoogleSecretManagerDevConsole.java     |  3 ++-
 .../main/java/org/apache/camel/ExtendedCamelContext.java  | 10 ----------
 .../apache/camel/impl/engine/AbstractCamelContext.java    |  2 +-
 .../camel/impl/engine/DefaultCamelContextExtension.java   | 15 ---------------
 .../apache/camel/impl/ExtendedCamelContextConfigurer.java |  6 ------
 .../camel/impl/lw/LightweightCamelContextExtension.java   | 10 ----------
 .../apache/camel/impl/engine/PeriodTaskSchedulerTest.java |  5 +++--
 .../main/java/org/apache/camel/main/BaseMainSupport.java  |  6 +++---
 .../main/java/org/apache/camel/support/PluginHelper.java  | 15 +++++++++++++++
 11 files changed, 28 insertions(+), 50 deletions(-)

diff --git a/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsDevConsole.java b/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsDevConsole.java
index 45962b8adb4..c632c9b8f69 100644
--- a/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsDevConsole.java
+++ b/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsDevConsole.java
@@ -26,6 +26,7 @@ import org.apache.camel.component.aws.secretsmanager.vault.CloudTrailReloadTrigg
 import org.apache.camel.spi.PeriodTaskScheduler;
 import org.apache.camel.spi.PropertiesFunction;
 import org.apache.camel.spi.annotations.DevConsole;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.support.console.AbstractDevConsole;
 import org.apache.camel.util.TimeUtils;
 import org.apache.camel.util.json.JsonArray;
@@ -54,7 +55,7 @@ public class SecretsDevConsole extends AbstractDevConsole {
         }
         AwsVaultConfiguration aws = getCamelContext().getVaultConfiguration().getAwsVaultConfiguration();
         if (aws != null && aws.isRefreshEnabled()) {
-            PeriodTaskScheduler scheduler = getCamelContext().getCamelContextExtension().getPeriodTaskScheduler();
+            PeriodTaskScheduler scheduler = PluginHelper.getPeriodTaskScheduler(getCamelContext());
             secretsRefreshTask = scheduler.getTaskByType(CloudTrailReloadTriggerTask.class);
         }
     }
diff --git a/components/camel-azure/camel-azure-key-vault/src/main/java/org/apache/camel/component/azure/key/vault/AzureKeyVaultManagerDevConsole.java b/components/camel-azure/camel-azure-key-vault/src/main/java/org/apache/camel/component/azure/key/vault/AzureKeyVaultManagerDevConsole.java
index a46a4d18efc..e995b197927 100644
--- a/components/camel-azure/camel-azure-key-vault/src/main/java/org/apache/camel/component/azure/key/vault/AzureKeyVaultManagerDevConsole.java
+++ b/components/camel-azure/camel-azure-key-vault/src/main/java/org/apache/camel/component/azure/key/vault/AzureKeyVaultManagerDevConsole.java
@@ -25,6 +25,7 @@ import java.util.Map;
 import org.apache.camel.spi.PeriodTaskScheduler;
 import org.apache.camel.spi.PropertiesFunction;
 import org.apache.camel.spi.annotations.DevConsole;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.support.console.AbstractDevConsole;
 import org.apache.camel.util.TimeUtils;
 import org.apache.camel.util.json.JsonArray;
@@ -53,7 +54,7 @@ public class AzureKeyVaultManagerDevConsole extends AbstractDevConsole {
         }
         AzureVaultConfiguration azure = getCamelContext().getVaultConfiguration().getAzureVaultConfiguration();
         if (azure != null && azure.isRefreshEnabled()) {
-            PeriodTaskScheduler scheduler = getCamelContext().getCamelContextExtension().getPeriodTaskScheduler();
+            PeriodTaskScheduler scheduler = PluginHelper.getPeriodTaskScheduler(getCamelContext());
             secretsRefreshTask = scheduler.getTaskByType(EventhubsReloadTriggerTask.class);
         }
     }
diff --git a/components/camel-google/camel-google-secret-manager/src/main/java/org/apache/camel/component/google/secret/manager/GoogleSecretManagerDevConsole.java b/components/camel-google/camel-google-secret-manager/src/main/java/org/apache/camel/component/google/secret/manager/GoogleSecretManagerDevConsole.java
index 0cef8350354..89072482f2f 100644
--- a/components/camel-google/camel-google-secret-manager/src/main/java/org/apache/camel/component/google/secret/manager/GoogleSecretManagerDevConsole.java
+++ b/components/camel-google/camel-google-secret-manager/src/main/java/org/apache/camel/component/google/secret/manager/GoogleSecretManagerDevConsole.java
@@ -26,6 +26,7 @@ import org.apache.camel.component.google.secret.manager.vault.PubsubReloadTrigge
 import org.apache.camel.spi.PeriodTaskScheduler;
 import org.apache.camel.spi.PropertiesFunction;
 import org.apache.camel.spi.annotations.DevConsole;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.support.console.AbstractDevConsole;
 import org.apache.camel.util.TimeUtils;
 import org.apache.camel.util.json.JsonArray;
@@ -54,7 +55,7 @@ public class GoogleSecretManagerDevConsole extends AbstractDevConsole {
         }
         GcpVaultConfiguration gcp = getCamelContext().getVaultConfiguration().getGcpVaultConfiguration();
         if (gcp != null && gcp.isRefreshEnabled()) {
-            PeriodTaskScheduler scheduler = getCamelContext().getCamelContextExtension().getPeriodTaskScheduler();
+            PeriodTaskScheduler scheduler = PluginHelper.getPeriodTaskScheduler(getCamelContext());
             secretsRefreshTask = scheduler.getTaskByType(PubsubReloadTriggerTask.class);
         }
     }
diff --git a/core/camel-api/src/main/java/org/apache/camel/ExtendedCamelContext.java b/core/camel-api/src/main/java/org/apache/camel/ExtendedCamelContext.java
index e3ff1eb98f7..3cd1cc335be 100644
--- a/core/camel-api/src/main/java/org/apache/camel/ExtendedCamelContext.java
+++ b/core/camel-api/src/main/java/org/apache/camel/ExtendedCamelContext.java
@@ -682,16 +682,6 @@ public interface ExtendedCamelContext {
      */
     byte getStatusPhase();
 
-    /**
-     * Gets the period task scheduler
-     */
-    PeriodTaskScheduler getPeriodTaskScheduler();
-
-    /**
-     * To use a custom period task scheduler
-     */
-    void setPeriodTaskScheduler(PeriodTaskScheduler periodTaskScheduler);
-
     /**
      * Gets access to the internal plugin manager
      *
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
index 463ff7bf548..5fbee500fa4 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
@@ -224,7 +224,6 @@ public abstract class AbstractCamelContext extends BaseService
     volatile RestBindingJaxbDataFormatFactory restBindingJaxbDataFormatFactory;
     volatile RuntimeCamelCatalog runtimeCamelCatalog;
     volatile ProcessorFactory processorFactory;
-    volatile PeriodTaskScheduler periodTaskScheduler;
     volatile InternalProcessorFactory internalProcessorFactory;
     volatile InterceptEndpointFactory interceptEndpointFactory;
     volatile RouteFactory routeFactory;
@@ -380,6 +379,7 @@ public abstract class AbstractCamelContext extends BaseService
         camelContextExtension.lazyAddContextPlugin(ModelJAXBContextFactory.class, this::createModelJAXBContextFactory);
         camelContextExtension.addContextPlugin(DataFormatResolver.class, createDataFormatResolver());
         camelContextExtension.lazyAddContextPlugin(PeriodTaskResolver.class, this::createPeriodTaskResolver);
+        camelContextExtension.lazyAddContextPlugin(PeriodTaskScheduler.class, this::createPeriodTaskScheduler);
 
         if (build) {
             try {
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultCamelContextExtension.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultCamelContextExtension.java
index 35514f8e210..5d67e91d200 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultCamelContextExtension.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultCamelContextExtension.java
@@ -365,21 +365,6 @@ class DefaultCamelContextExtension implements ExtendedCamelContext {
         return factories.computeIfAbsent(path, camelContext::createFactoryFinder);
     }
 
-    public PeriodTaskScheduler getPeriodTaskScheduler() {
-        if (camelContext.periodTaskScheduler == null) {
-            synchronized (camelContext.lock) {
-                if (camelContext.periodTaskScheduler == null) {
-                    setPeriodTaskScheduler(camelContext.createPeriodTaskScheduler());
-                }
-            }
-        }
-        return camelContext.periodTaskScheduler;
-    }
-
-    public void setPeriodTaskScheduler(PeriodTaskScheduler periodTaskScheduler) {
-        camelContext.periodTaskScheduler = camelContext.getInternalServiceManager().addService(periodTaskScheduler);
-    }
-
     @Override
     public void setupManagement(Map<String, Object> options) {
         LOG.trace("Setting up management");
diff --git a/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java b/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java
index 1abc1508172..1d4595d1dd8 100644
--- a/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java
+++ b/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java
@@ -59,8 +59,6 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com
         case "ModelToXMLDumper": target.setModelToXMLDumper(property(camelContext, org.apache.camel.spi.ModelToXMLDumper.class, value)); return true;
         case "name":
         case "Name": target.setName(property(camelContext, java.lang.String.class, value)); return true;
-        case "periodtaskscheduler":
-        case "PeriodTaskScheduler": target.setPeriodTaskScheduler(property(camelContext, org.apache.camel.spi.PeriodTaskScheduler.class, value)); return true;
         case "processorexchangefactory":
         case "ProcessorExchangeFactory": target.setProcessorExchangeFactory(property(camelContext, org.apache.camel.spi.ProcessorExchangeFactory.class, value)); return true;
         case "processorfactory":
@@ -128,8 +126,6 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com
         case "ModelToXMLDumper": return org.apache.camel.spi.ModelToXMLDumper.class;
         case "name":
         case "Name": return java.lang.String.class;
-        case "periodtaskscheduler":
-        case "PeriodTaskScheduler": return org.apache.camel.spi.PeriodTaskScheduler.class;
         case "processorexchangefactory":
         case "ProcessorExchangeFactory": return org.apache.camel.spi.ProcessorExchangeFactory.class;
         case "processorfactory":
@@ -198,8 +194,6 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com
         case "ModelToXMLDumper": return target.getModelToXMLDumper();
         case "name":
         case "Name": return target.getName();
-        case "periodtaskscheduler":
-        case "PeriodTaskScheduler": return target.getPeriodTaskScheduler();
         case "processorexchangefactory":
         case "ProcessorExchangeFactory": return target.getProcessorExchangeFactory();
         case "processorfactory":
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContextExtension.java b/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContextExtension.java
index f805740ed97..9257979aedd 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContextExtension.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContextExtension.java
@@ -693,16 +693,6 @@ class LightweightCamelContextExtension implements ExtendedCamelContext {
         throw new UnsupportedOperationException();
     }
 
-    @Override
-    public void setPeriodTaskScheduler(PeriodTaskScheduler periodTaskScheduler) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public PeriodTaskScheduler getPeriodTaskScheduler() {
-        return camelContext.getCamelContextExtension().getPeriodTaskScheduler();
-    }
-
     @Override
     public PluginManager getPluginManager() {
         return camelContext.getCamelContextExtension().getPluginManager();
diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/engine/PeriodTaskSchedulerTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/engine/PeriodTaskSchedulerTest.java
index 4d218f97eab..462d43bd8b9 100644
--- a/core/camel-core/src/test/java/org/apache/camel/impl/engine/PeriodTaskSchedulerTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/impl/engine/PeriodTaskSchedulerTest.java
@@ -21,6 +21,7 @@ import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.spi.PeriodTaskScheduler;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.support.TimerListenerManager;
 import org.apache.camel.support.service.ServiceSupport;
 import org.awaitility.Awaitility;
@@ -40,7 +41,7 @@ public class PeriodTaskSchedulerTest extends ContextTestSupport {
     public void testScheduler() throws Exception {
         counter.set(0);
 
-        PeriodTaskScheduler scheduler = context.getCamelContextExtension().getPeriodTaskScheduler();
+        PeriodTaskScheduler scheduler = PluginHelper.getPeriodTaskScheduler(context);
         if (scheduler instanceof TimerListenerManager) {
             // speedup unit test
             ((TimerListenerManager) scheduler).setInterval(10);
@@ -57,7 +58,7 @@ public class PeriodTaskSchedulerTest extends ContextTestSupport {
 
         MyTask task = new MyTask();
 
-        PeriodTaskScheduler scheduler = context.getCamelContextExtension().getPeriodTaskScheduler();
+        PeriodTaskScheduler scheduler = PluginHelper.getPeriodTaskScheduler(context);
         if (scheduler instanceof TimerListenerManager) {
             // speedup unit test
             ((TimerListenerManager) scheduler).setInterval(10);
diff --git a/core/camel-main/src/main/java/org/apache/camel/main/BaseMainSupport.java b/core/camel-main/src/main/java/org/apache/camel/main/BaseMainSupport.java
index 2eb09f00fc8..800799dcc75 100644
--- a/core/camel-main/src/main/java/org/apache/camel/main/BaseMainSupport.java
+++ b/core/camel-main/src/main/java/org/apache/camel/main/BaseMainSupport.java
@@ -411,7 +411,7 @@ public abstract class BaseMainSupport extends BaseService {
                     ContextReloadStrategy reloader = new DefaultContextReloadStrategy();
                     camelContext.addService(reloader);
                 }
-                PeriodTaskScheduler scheduler = getCamelContext().getCamelContextExtension().getPeriodTaskScheduler();
+                PeriodTaskScheduler scheduler = PluginHelper.getPeriodTaskScheduler(getCamelContext());
                 scheduler.schedulePeriodTask(r, period);
             }
         }
@@ -430,7 +430,7 @@ public abstract class BaseMainSupport extends BaseService {
                     ContextReloadStrategy reloader = new DefaultContextReloadStrategy();
                     camelContext.addService(reloader);
                 }
-                PeriodTaskScheduler scheduler = getCamelContext().getCamelContextExtension().getPeriodTaskScheduler();
+                PeriodTaskScheduler scheduler = PluginHelper.getPeriodTaskScheduler(getCamelContext());
                 scheduler.schedulePeriodTask(r, period);
             }
         }
@@ -449,7 +449,7 @@ public abstract class BaseMainSupport extends BaseService {
                     ContextReloadStrategy reloader = new DefaultContextReloadStrategy();
                     camelContext.addService(reloader);
                 }
-                PeriodTaskScheduler scheduler = getCamelContext().getCamelContextExtension().getPeriodTaskScheduler();
+                PeriodTaskScheduler scheduler = PluginHelper.getPeriodTaskScheduler(getCamelContext());
                 scheduler.schedulePeriodTask(r, period);
             }
         }
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/PluginHelper.java b/core/camel-support/src/main/java/org/apache/camel/support/PluginHelper.java
index 3db96cee8c9..7e04519984b 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/PluginHelper.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/PluginHelper.java
@@ -34,6 +34,7 @@ import org.apache.camel.spi.ModelineFactory;
 import org.apache.camel.spi.PackageScanClassResolver;
 import org.apache.camel.spi.PackageScanResourceResolver;
 import org.apache.camel.spi.PeriodTaskResolver;
+import org.apache.camel.spi.PeriodTaskScheduler;
 import org.apache.camel.spi.UriFactoryResolver;
 
 public final class PluginHelper {
@@ -292,4 +293,18 @@ public final class PluginHelper {
     public static PeriodTaskResolver getPeriodTaskResolver(ExtendedCamelContext extendedCamelContext) {
         return extendedCamelContext.getContextPlugin(PeriodTaskResolver.class);
     }
+
+    /**
+     * Gets the period task scheduler
+     */
+    public static PeriodTaskScheduler getPeriodTaskScheduler(CamelContext camelContext) {
+        return getPeriodTaskScheduler(camelContext.getCamelContextExtension());
+    }
+
+    /**
+     * Gets the period task scheduler
+     */
+    public static PeriodTaskScheduler getPeriodTaskScheduler(ExtendedCamelContext extendedCamelContext) {
+        return extendedCamelContext.getContextPlugin(PeriodTaskScheduler.class);
+    }
 }