You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by gn...@apache.org on 2020/02/19 09:27:37 UTC

[camel] branch master updated: CAMEL-14580 : make sure we clear all reifiers, not only processors

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 7c765da  CAMEL-14580 : make sure we clear all reifiers, not only processors
7c765da is described below

commit 7c765da57a1de3df3fe1ec70bd9d32e54b598cfb
Author: Guillaume Nodet <gn...@gmail.com>
AuthorDate: Wed Feb 19 10:02:03 2020 +0100

    CAMEL-14580 : make sure we clear all reifiers, not only processors
---
 .../org/apache/camel/ExtendedCamelContext.java     | 10 ---------
 .../camel/impl/engine/AbstractCamelContext.java    | 25 +++++++++++-----------
 .../org/apache/camel/impl/DefaultCamelContext.java |  8 -------
 .../org/apache/camel/reifier/ProcessorReifier.java | 15 ++++---------
 .../reifier/dataformat/DataFormatReifier.java      |  6 ++++++
 .../camel/reifier/language/ExpressionReifier.java  |  6 ++++++
 .../reifier/loadbalancer/LoadBalancerReifier.java  |  6 ++++++
 .../reifier/transformer/TransformerReifier.java    |  6 ++++++
 .../camel/reifier/validator/ValidatorReifier.java  |  6 ++++++
 9 files changed, 47 insertions(+), 41 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 e41f4ab..59ccf81 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
@@ -479,14 +479,4 @@ public interface ExtendedCamelContext extends CamelContext {
      */
     boolean isAllowAddingNewRoutes();
 
-    /**
-     * Sets the {@link ReifierStrategy} to use.
-     */
-    void setReifierStrategy(ReifierStrategy refierStrategy);
-
-    /**
-     * Gets the {@link ReifierStrategy} to use.
-     */
-    ReifierStrategy getReifierStrategy();
-
 }
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
index a847381..ce06f64 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
@@ -179,6 +179,8 @@ public abstract class AbstractCamelContext extends ServiceSupport implements Ext
         Eager, Default, Lazy
     }
 
+    private static final List<ReifierStrategy> reifierStrategies = new ArrayList<>();
+
     private final AtomicBoolean vetoStarted = new AtomicBoolean();
     private String managementName;
     private ClassLoader applicationContextClassLoader;
@@ -223,7 +225,6 @@ public abstract class AbstractCamelContext extends ServiceSupport implements Ext
     private Boolean allowUseOriginalMessage = Boolean.FALSE;
     private Boolean caseInsensitiveHeaders = Boolean.TRUE;
     private boolean allowAddingNewRoutes = true;
-    private ReifierStrategy reifierStrategy;
     private Long delay;
     private ErrorHandlerFactory errorHandlerFactory;
     private Map<String, String> globalOptions = new HashMap<>();
@@ -342,6 +343,14 @@ public abstract class AbstractCamelContext extends ServiceSupport implements Ext
         }
     }
 
+    public static void addReifierStrategy(ReifierStrategy strategy) {
+        reifierStrategies.add(strategy);
+    }
+
+    public static void clearReifiers() {
+        reifierStrategies.forEach(ReifierStrategy::clearReifiers);
+    }
+
     /**
      * Whether to eager create {@link TypeConverter} during initialization of CamelContext.
      * This is enabled by default to optimize camel-core.
@@ -1887,16 +1896,6 @@ public abstract class AbstractCamelContext extends ServiceSupport implements Ext
     }
 
     @Override
-    public ReifierStrategy getReifierStrategy() {
-        return reifierStrategy;
-    }
-
-    @Override
-    public void setReifierStrategy(ReifierStrategy reifierStrategy) {
-        this.reifierStrategy = reifierStrategy;
-    }
-
-    @Override
     public Registry getRegistry() {
         if (registry == null) {
             synchronized (lock) {
@@ -2494,7 +2493,9 @@ public abstract class AbstractCamelContext extends ServiceSupport implements Ext
      * Strategy invoked when adding new routes after CamelContext has been started is not allowed.
      * This is used to do some internal optimizations.
      */
-    protected abstract void disallowAddingNewRoutes();
+    protected void disallowAddingNewRoutes() {
+        clearReifiers();
+    }
 
     @Override
     public void stop() {
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultCamelContext.java b/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
index 49bbf83..cf731f8 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
@@ -169,14 +169,6 @@ public class DefaultCamelContext extends AbstractModelCamelContext {
     }
 
     @Override
-    protected void disallowAddingNewRoutes() {
-        // we no longer need reifiers so clear its map (danger)
-        if (getReifierStrategy() != null) {
-            getReifierStrategy().clearReifiers();
-        }
-    }
-
-    @Override
     protected TypeConverter createTypeConverter() {
         return new DefaultTypeConverter(this, getPackageScanClassResolver(), getInjector(), getDefaultFactoryFinder(), isLoadTypeConverters());
     }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ProcessorReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ProcessorReifier.java
index 9247aa9..5aedb87 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ProcessorReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ProcessorReifier.java
@@ -30,6 +30,7 @@ import org.apache.camel.Channel;
 import org.apache.camel.ErrorHandlerFactory;
 import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.Processor;
+import org.apache.camel.impl.engine.AbstractCamelContext;
 import org.apache.camel.model.AggregateDefinition;
 import org.apache.camel.model.BeanDefinition;
 import org.apache.camel.model.CatchDefinition;
@@ -116,7 +117,7 @@ import org.apache.camel.util.ObjectHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public abstract class ProcessorReifier<T extends ProcessorDefinition<?>> extends AbstractReifier implements ReifierStrategy {
+public abstract class ProcessorReifier<T extends ProcessorDefinition<?>> extends AbstractReifier {
 
     private static final Map<Class<?>, BiFunction<RouteContext, ProcessorDefinition<?>, ProcessorReifier<? extends ProcessorDefinition<?>>>> PROCESSORS;
     static {
@@ -189,6 +190,7 @@ public abstract class ProcessorReifier<T extends ProcessorDefinition<?>> extends
         map.put(WhenSkipSendToEndpointDefinition.class, WhenSkipSendToEndpointReifier::new);
         map.put(WhenDefinition.class, WhenReifier::new);
         PROCESSORS = map;
+        AbstractCamelContext.addReifierStrategy(ProcessorReifier::clearReifiers);
     }
     protected final Logger log = LoggerFactory.getLogger(getClass());
 
@@ -197,27 +199,18 @@ public abstract class ProcessorReifier<T extends ProcessorDefinition<?>> extends
     public ProcessorReifier(RouteContext routeContext, T definition) {
         super(routeContext);
         this.definition = definition;
-        // its okay to override the reifier strategy
-        if (routeContext != null && routeContext.getCamelContext() != null) {
-            routeContext.getCamelContext().adapt(ExtendedCamelContext.class).setReifierStrategy(this);
-        }
     }
 
     public ProcessorReifier(CamelContext camelContext, T definition) {
         super(camelContext);
         this.definition = definition;
-        if (camelContext != null) {
-            // its okay to override the reifier strategy
-            camelContext.adapt(ExtendedCamelContext.class).setReifierStrategy(this);
-        }
     }
 
     public static void registerReifier(Class<?> processorClass, BiFunction<RouteContext, ProcessorDefinition<?>, ProcessorReifier<? extends ProcessorDefinition<?>>> creator) {
         PROCESSORS.put(processorClass, creator);
     }
 
-    @Override
-    public void clearReifiers() {
+    public static void clearReifiers() {
         PROCESSORS.clear();
     }
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/dataformat/DataFormatReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/dataformat/DataFormatReifier.java
index fdd432d..6db7b35 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/dataformat/DataFormatReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/dataformat/DataFormatReifier.java
@@ -25,6 +25,7 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.NoFactoryAvailableException;
 import org.apache.camel.RuntimeCamelException;
+import org.apache.camel.impl.engine.AbstractCamelContext;
 import org.apache.camel.model.DataFormatDefinition;
 import org.apache.camel.model.Model;
 import org.apache.camel.model.dataformat.ASN1DataFormat;
@@ -131,6 +132,7 @@ public abstract class DataFormatReifier<T extends DataFormatDefinition> extends
         map.put(ZipDeflaterDataFormat.class, ZipDataFormatReifier::new);
         map.put(ZipFileDataFormat.class, ZipFileDataFormatReifier::new);
         DATAFORMATS = map;
+        AbstractCamelContext.addReifierStrategy(DataFormatReifier::clearReifiers);
     }
 
     protected final T definition;
@@ -145,6 +147,10 @@ public abstract class DataFormatReifier<T extends DataFormatDefinition> extends
         DATAFORMATS.put(dataFormatClass, creator);
     }
 
+    public static void clearReifiers() {
+        DATAFORMATS.clear();
+    }
+
     /**
      * Factory method to create the data format
      *
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/ExpressionReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/ExpressionReifier.java
index bb5806d..c0e9b5c 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/ExpressionReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/ExpressionReifier.java
@@ -26,6 +26,7 @@ import org.apache.camel.CamelContextAware;
 import org.apache.camel.Expression;
 import org.apache.camel.NoSuchLanguageException;
 import org.apache.camel.Predicate;
+import org.apache.camel.impl.engine.AbstractCamelContext;
 import org.apache.camel.model.ExpressionSubElementDefinition;
 import org.apache.camel.model.language.ConstantExpression;
 import org.apache.camel.model.language.ExchangePropertyExpression;
@@ -79,6 +80,7 @@ public class ExpressionReifier<T extends ExpressionDefinition> extends AbstractR
         map.put(XPathExpression.class, XPathExpressionReifier::new);
         map.put(XQueryExpression.class, XQueryExpressionReifier::new);
         EXPRESSIONS = map;
+        AbstractCamelContext.addReifierStrategy(ExpressionReifier::clearReifiers);
     }
 
     protected final T definition;
@@ -100,6 +102,10 @@ public class ExpressionReifier<T extends ExpressionDefinition> extends AbstractR
         throw new IllegalStateException("Unsupported definition: " + definition);
     }
 
+    public static void clearReifiers() {
+        EXPRESSIONS.clear();
+    }
+
     public Expression createExpression() {
         Expression expression = definition.getExpressionValue();
         if (expression == null) {
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/loadbalancer/LoadBalancerReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/loadbalancer/LoadBalancerReifier.java
index e672c62..74432c9 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/loadbalancer/LoadBalancerReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/loadbalancer/LoadBalancerReifier.java
@@ -21,6 +21,7 @@ import java.util.Map;
 import java.util.function.BiFunction;
 import java.util.function.Function;
 
+import org.apache.camel.impl.engine.AbstractCamelContext;
 import org.apache.camel.model.LoadBalancerDefinition;
 import org.apache.camel.model.loadbalancer.CustomLoadBalancerDefinition;
 import org.apache.camel.model.loadbalancer.FailoverLoadBalancerDefinition;
@@ -48,6 +49,7 @@ public class LoadBalancerReifier<T extends LoadBalancerDefinition> extends Abstr
         map.put(TopicLoadBalancerDefinition.class, TopicLoadBalancerReifier::new);
         map.put(WeightedLoadBalancerDefinition.class, WeightedLoadBalancerReifier::new);
         LOAD_BALANCERS = map;
+        AbstractCamelContext.addReifierStrategy(LoadBalancerReifier::clearReifiers);
     }
 
     protected final T definition;
@@ -65,6 +67,10 @@ public class LoadBalancerReifier<T extends LoadBalancerDefinition> extends Abstr
         throw new IllegalStateException("Unsupported definition: " + definition);
     }
 
+    public static void clearReifiers() {
+        LOAD_BALANCERS.clear();
+    }
+
     /**
      * Factory method to create the load balancer from the loadBalancerTypeName
      */
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/transformer/TransformerReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/transformer/TransformerReifier.java
index cde403b..b1df10c 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/transformer/TransformerReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/transformer/TransformerReifier.java
@@ -21,6 +21,7 @@ import java.util.Map;
 import java.util.function.BiFunction;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.impl.engine.AbstractCamelContext;
 import org.apache.camel.model.transformer.CustomTransformerDefinition;
 import org.apache.camel.model.transformer.DataFormatTransformerDefinition;
 import org.apache.camel.model.transformer.EndpointTransformerDefinition;
@@ -37,6 +38,7 @@ public abstract class TransformerReifier<T> extends AbstractReifier {
         map.put(DataFormatTransformerDefinition.class, DataFormatTransformeReifier::new);
         map.put(EndpointTransformerDefinition.class, EndpointTransformeReifier::new);
         TRANSFORMERS = map;
+        AbstractCamelContext.addReifierStrategy(TransformerReifier::clearReifiers);
     }
 
     protected final T definition;
@@ -54,6 +56,10 @@ public abstract class TransformerReifier<T> extends AbstractReifier {
         throw new IllegalStateException("Unsupported definition: " + definition);
     }
 
+    public static void clearReifiers() {
+        TRANSFORMERS.clear();
+    }
+
     public Transformer createTransformer() {
         return doCreateTransformer();
     }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/validator/ValidatorReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/validator/ValidatorReifier.java
index 8789f3b..fcd1f53 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/validator/ValidatorReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/validator/ValidatorReifier.java
@@ -21,6 +21,7 @@ import java.util.Map;
 import java.util.function.BiFunction;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.impl.engine.AbstractCamelContext;
 import org.apache.camel.model.validator.CustomValidatorDefinition;
 import org.apache.camel.model.validator.EndpointValidatorDefinition;
 import org.apache.camel.model.validator.PredicateValidatorDefinition;
@@ -37,6 +38,7 @@ public abstract class ValidatorReifier<T> extends AbstractReifier  {
         map.put(EndpointValidatorDefinition.class, EndpointValidatorReifier::new);
         map.put(PredicateValidatorDefinition.class, PredicateValidatorReifier::new);
         VALIDATORS = map;
+        AbstractCamelContext.addReifierStrategy(ValidatorReifier::clearReifiers);
     }
 
     protected final T definition;
@@ -58,6 +60,10 @@ public abstract class ValidatorReifier<T> extends AbstractReifier  {
         throw new IllegalStateException("Unsupported definition: " + definition);
     }
 
+    public static void clearReifiers() {
+        VALIDATORS.clear();
+    }
+
     public Validator createValidator() {
         return doCreateValidator();
     }