This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch tc-loader in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/tc-loader by this push: new 4159108 CAMEL-13313: Add support for generating type converter loader source code to be able to load component type converters in a faster way 4159108 is described below commit 4159108642fe6df862031809a0a68683660f7a8f Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Sat Mar 16 13:24:51 2019 +0100 CAMEL-13313: Add support for generating type converter loader source code to be able to load component type converters in a faster way --- ...rRegistry.java => FastTypeConverterRegistry.java} | 20 +++++++++++++------- .../core/xml/AbstractCamelContextFactoryBean.java | 2 +- .../org/apache/camel/impl/AbstractCamelContext.java | 1 - .../org/apache/camel/impl/DefaultCamelContext.java | 7 ------- ...NoBindingWithTypeConverterLoaderRegistryTest.java | 4 ++-- .../camel/converter/stream/StreamCacheConverter.java | 2 +- 6 files changed, 17 insertions(+), 19 deletions(-) diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/converter/TypeConverterLoaderRegistry.java b/core/camel-base/src/main/java/org/apache/camel/impl/converter/FastTypeConverterRegistry.java similarity index 89% rename from core/camel-base/src/main/java/org/apache/camel/impl/converter/TypeConverterLoaderRegistry.java rename to core/camel-base/src/main/java/org/apache/camel/impl/converter/FastTypeConverterRegistry.java index 5b3bb93..23804c1 100644 --- a/core/camel-base/src/main/java/org/apache/camel/impl/converter/TypeConverterLoaderRegistry.java +++ b/core/camel-base/src/main/java/org/apache/camel/impl/converter/FastTypeConverterRegistry.java @@ -26,6 +26,7 @@ import java.util.LinkedHashSet; import java.util.Set; import java.util.StringTokenizer; +import org.apache.camel.CamelContext; import org.apache.camel.RuntimeCamelException; import org.apache.camel.spi.TypeConverterLoader; import org.apache.camel.util.IOHelper; @@ -33,28 +34,33 @@ import org.apache.camel.util.StringHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -// TODO: We can automatic detect this for example like headersmap-factory by having this on the classpath - /** * An optimized {@link org.apache.camel.spi.TypeConverterRegistry} which loads * the type converters up-front on startup in a faster way by leveraging * source generated type converter loaders (<tt>@Converter(loader = true)</tt>, - * and will not perform slower package scanning. + * as well as invoking the type converters without reflection, + * and will not perform classpath scanning. */ -public class TypeConverterLoaderRegistry extends BaseTypeConverterRegistry { +public class FastTypeConverterRegistry extends BaseTypeConverterRegistry { - // TODO: Maybe it should be named FastTypeConverterRegistry + // TODO: We can automatic detect this for example like headersmap-factory by having this on the classpath public static final String META_INF_SERVICES = "META-INF/services/org/apache/camel/TypeConverterLoader"; - private static final Logger LOG = LoggerFactory.getLogger(TypeConverterLoaderRegistry.class); + private static final Logger LOG = LoggerFactory.getLogger(FastTypeConverterRegistry.class); private static final Charset UTF8 = Charset.forName("UTF-8"); - public TypeConverterLoaderRegistry() { + public FastTypeConverterRegistry() { super(null, null, null); // pass in null to base class as we load all type converters without package scanning } @Override + public void setCamelContext(CamelContext camelContext) { + super.setCamelContext(camelContext); + setInjector(camelContext.getInjector()); + } + + @Override public boolean allowNull() { return false; } diff --git a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java index 44e761c..3a6353c 100644 --- a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java +++ b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java @@ -168,7 +168,7 @@ public abstract class AbstractCamelContextFactoryBean<T extends ModelCamelContex getContext().setPackageScanClassResolver(packageResolver); } - // set the package scan resolver as soon as possible + // also set type converter registry as early as possible TypeConverterRegistry tcr = getBeanForType(TypeConverterRegistry.class); if (tcr != null) { LOG.info("Using custom TypeConverterRegistry: {}", tcr); diff --git a/core/camel-core/src/main/java/org/apache/camel/impl/AbstractCamelContext.java b/core/camel-core/src/main/java/org/apache/camel/impl/AbstractCamelContext.java index e056f5c..3e9ee4b 100644 --- a/core/camel-core/src/main/java/org/apache/camel/impl/AbstractCamelContext.java +++ b/core/camel-core/src/main/java/org/apache/camel/impl/AbstractCamelContext.java @@ -88,7 +88,6 @@ import org.apache.camel.health.HealthCheckRegistry; import org.apache.camel.impl.transformer.TransformerKey; import org.apache.camel.impl.validator.ValidatorKey; import org.apache.camel.model.DataFormatDefinition; -import org.apache.camel.model.FromDefinition; import org.apache.camel.model.HystrixConfigurationDefinition; import org.apache.camel.model.ModelCamelContext; import org.apache.camel.model.ModelHelper; diff --git a/core/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java b/core/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java index 6e9848e..c5c5969 100644 --- a/core/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java +++ b/core/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java @@ -16,11 +16,8 @@ */ package org.apache.camel.impl; -import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.ServiceLoader; - import javax.naming.Context; import org.apache.camel.CamelContext; @@ -28,7 +25,6 @@ import org.apache.camel.Endpoint; import org.apache.camel.NoFactoryAvailableException; import org.apache.camel.PollingConsumer; import org.apache.camel.Producer; -import org.apache.camel.RuntimeCamelException; import org.apache.camel.TypeConverter; import org.apache.camel.health.HealthCheckRegistry; import org.apache.camel.impl.converter.BaseTypeConverterRegistry; @@ -55,10 +51,7 @@ import org.apache.camel.spi.HeadersMapFactory; import org.apache.camel.spi.InflightRepository; import org.apache.camel.spi.Injector; import org.apache.camel.spi.LanguageResolver; -import org.apache.camel.spi.LifecycleStrategy; import org.apache.camel.spi.ManagementNameStrategy; -import org.apache.camel.spi.ManagementStrategy; -import org.apache.camel.spi.ManagementStrategyFactory; import org.apache.camel.spi.MessageHistoryFactory; import org.apache.camel.spi.ModelJAXBContextFactory; import org.apache.camel.spi.NodeIdFactory; diff --git a/core/camel-core/src/test/java/org/apache/camel/component/bean/BeanProxyNoBindingWithTypeConverterLoaderRegistryTest.java b/core/camel-core/src/test/java/org/apache/camel/component/bean/BeanProxyNoBindingWithTypeConverterLoaderRegistryTest.java index 46cffa6..a94d39e 100644 --- a/core/camel-core/src/test/java/org/apache/camel/component/bean/BeanProxyNoBindingWithTypeConverterLoaderRegistryTest.java +++ b/core/camel-core/src/test/java/org/apache/camel/component/bean/BeanProxyNoBindingWithTypeConverterLoaderRegistryTest.java @@ -17,7 +17,7 @@ package org.apache.camel.component.bean; import org.apache.camel.CamelContext; -import org.apache.camel.impl.converter.TypeConverterLoaderRegistry; +import org.apache.camel.impl.converter.FastTypeConverterRegistry; public class BeanProxyNoBindingWithTypeConverterLoaderRegistryTest extends BeanProxyNoBindingTest { @@ -25,7 +25,7 @@ public class BeanProxyNoBindingWithTypeConverterLoaderRegistryTest extends BeanP protected CamelContext createCamelContext() throws Exception { CamelContext context = super.createCamelContext(); // switch to using the faster type converter loader - context.setTypeConverterRegistry(new TypeConverterLoaderRegistry()); + context.setTypeConverterRegistry(new FastTypeConverterRegistry()); return context; } } diff --git a/core/camel-support/src/main/java/org/apache/camel/converter/stream/StreamCacheConverter.java b/core/camel-support/src/main/java/org/apache/camel/converter/stream/StreamCacheConverter.java index 2d0e6f4..7f6a15e 100644 --- a/core/camel-support/src/main/java/org/apache/camel/converter/stream/StreamCacheConverter.java +++ b/core/camel-support/src/main/java/org/apache/camel/converter/stream/StreamCacheConverter.java @@ -39,7 +39,7 @@ import org.apache.camel.util.IOHelper; * A set of {@link Converter} methods for wrapping stream-based messages in a {@link StreamCache} * implementation to ensure message re-readability (eg multicasting, retrying) */ -@Converter +@Converter(loader = true) public final class StreamCacheConverter { /**