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/03/31 11:05:41 UTC

[camel] 01/02: CAMEL-15105: make the ErrorHandlerExecutorService 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 fa2cc3f2bec9da086ca6fc7e0183e82fa64f42d4
Author: Otavio Rodolfo Piske <an...@gmail.com>
AuthorDate: Fri Mar 31 11:03:13 2023 +0200

    CAMEL-15105: make the ErrorHandlerExecutorService a plugin of the context
---
 .../main/java/org/apache/camel/ExtendedCamelContext.java |  6 ------
 .../apache/camel/impl/engine/AbstractCamelContext.java   |  3 +--
 .../camel/impl/engine/DefaultCamelContextExtension.java  | 14 --------------
 .../org/apache/camel/impl/engine/SimpleCamelContext.java |  2 ++
 .../camel/impl/lw/LightweightCamelContextExtension.java  |  6 ------
 .../processor/errorhandler/RedeliveryErrorHandler.java   |  3 ++-
 .../main/java/org/apache/camel/support/PluginHelper.java | 16 ++++++++++++++++
 7 files changed, 21 insertions(+), 29 deletions(-)

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 d6082ef3222..7d4b51aebfc 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
@@ -19,7 +19,6 @@ package org.apache.camel;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.concurrent.ScheduledExecutorService;
 
 import org.apache.camel.catalog.RuntimeCamelCatalog;
 import org.apache.camel.console.DevConsoleResolver;
@@ -534,11 +533,6 @@ public interface ExtendedCamelContext {
      */
     BeanProcessorFactory getBeanProcessorFactory();
 
-    /**
-     * Gets the default shared thread pool for error handlers which leverages this for asynchronous redelivery tasks.
-     */
-    ScheduledExecutorService getErrorHandlerExecutorService();
-
     /**
      * Adds the given interceptor strategy
      *
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 876f8eb565a..13e0ebdc8d2 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
@@ -239,7 +239,6 @@ public abstract class AbstractCamelContext extends BaseService
     volatile AsyncProcessorAwaitManager asyncProcessorAwaitManager;
     volatile ModelJAXBContextFactory modelJAXBContextFactory;
     volatile UnitOfWorkFactory unitOfWorkFactory;
-    volatile ScheduledExecutorService errorHandlerExecutorService;
     volatile BeanIntrospection beanIntrospection;
     volatile boolean eventNotificationApplicable;
     volatile StartupStepRecorder startupStepRecorder = new DefaultStartupStepRecorder();
@@ -2926,10 +2925,10 @@ public abstract class AbstractCamelContext extends BaseService
         // the stop order is important
 
         // shutdown default error handler thread pool
+        final ScheduledExecutorService errorHandlerExecutorService = PluginHelper.getErrorHandlerExecutorService(this);
         if (errorHandlerExecutorService != null) {
             // force shutting down the thread pool
             getExecutorServiceManager().shutdownNow(errorHandlerExecutorService);
-            errorHandlerExecutorService = null;
         }
 
         // shutdown debugger
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 f2505551171..d2d6d6a21b3 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
@@ -23,7 +23,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ScheduledExecutorService;
 
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.Endpoint;
@@ -307,19 +306,6 @@ class DefaultCamelContextExtension implements ExtendedCamelContext {
         this.errorHandlerFactory = errorHandlerFactory;
     }
 
-    @Override
-    public ScheduledExecutorService getErrorHandlerExecutorService() {
-        if (camelContext.errorHandlerExecutorService == null) {
-            synchronized (camelContext.lock) {
-                if (camelContext.errorHandlerExecutorService == null) {
-                    // setup default thread pool for error handler
-                    camelContext.errorHandlerExecutorService = camelContext.createErrorHandlerExecutorService();
-                }
-            }
-        }
-        return camelContext.errorHandlerExecutorService;
-    }
-
     @Override
     public UnitOfWorkFactory getUnitOfWorkFactory() {
         if (camelContext.unitOfWorkFactory == null) {
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java
index 937b2cae356..93bef777bd5 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java
@@ -18,6 +18,7 @@ package org.apache.camel.impl.engine;
 
 import java.util.Map;
 import java.util.Optional;
+import java.util.concurrent.ScheduledExecutorService;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
@@ -132,6 +133,7 @@ public class SimpleCamelContext extends AbstractCamelContext {
         super.doBuild();
 
         getCamelContextExtension().addContextPlugin(CliConnectorFactory.class, createCliConnectorFactory());
+        getCamelContextExtension().addContextPlugin(ScheduledExecutorService.class, createErrorHandlerExecutorService());
     }
 
     @Override
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 da2443a87a8..7eb7b2bbd2b 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
@@ -21,7 +21,6 @@ import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.camel.CamelContext;
@@ -424,11 +423,6 @@ class LightweightCamelContextExtension implements ExtendedCamelContext {
         throw new UnsupportedOperationException();
     }
 
-    @Override
-    public ScheduledExecutorService getErrorHandlerExecutorService() {
-        throw new UnsupportedOperationException();
-    }
-
     @Override
     public List<InterceptStrategy> getInterceptStrategies() {
         throw new UnsupportedOperationException();
diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryErrorHandler.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryErrorHandler.java
index 05392b9d9ee..2e8eba75bd7 100644
--- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryErrorHandler.java
+++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryErrorHandler.java
@@ -54,6 +54,7 @@ import org.apache.camel.support.CamelContextHelper;
 import org.apache.camel.support.EventHelper;
 import org.apache.camel.support.ExchangeHelper;
 import org.apache.camel.support.MessageHelper;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.support.service.ServiceHelper;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.StopWatch;
@@ -1621,7 +1622,7 @@ public abstract class RedeliveryErrorHandler extends ErrorHandlerSupport
         if (redeliveryEnabled) {
             if (executorService == null) {
                 // use default shared executor service
-                executorService = camelContext.getCamelContextExtension().getErrorHandlerExecutorService();
+                executorService = PluginHelper.getErrorHandlerExecutorService(camelContext);
             }
             if (LOG.isDebugEnabled()) {
                 LOG.debug("Using ExecutorService: {} for redeliveries on error handler: {}", executorService, this);
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 5439f21a401..8ef62d0efd9 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
@@ -17,6 +17,8 @@
 
 package org.apache.camel.support;
 
+import java.util.concurrent.ScheduledExecutorService;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.spi.CamelBeanPostProcessor;
@@ -135,4 +137,18 @@ public final class PluginHelper {
     public static UriFactoryResolver getUriFactoryResolver(ExtendedCamelContext extendedCamelContext) {
         return extendedCamelContext.getContextPlugin(UriFactoryResolver.class);
     }
+
+    /**
+     * Gets the default shared thread pool for error handlers which leverages this for asynchronous redelivery tasks.
+     */
+    public static ScheduledExecutorService getErrorHandlerExecutorService(CamelContext camelContext) {
+        return getErrorHandlerExecutorService(camelContext.getCamelContextExtension());
+    }
+
+    /**
+     * Gets the default shared thread pool for error handlers which leverages this for asynchronous redelivery tasks.
+     */
+    public static ScheduledExecutorService getErrorHandlerExecutorService(ExtendedCamelContext extendedCamelContext) {
+        return extendedCamelContext.getContextPlugin(ScheduledExecutorService.class);
+    }
 }