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 <gno...@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(); }