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