Repository: camel
Updated Branches:
  refs/heads/master 888fdf7c0 -> 1fe303771


CAMEL-11321: Load core fallback type converters a bit faster


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/6c73ae86
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/6c73ae86
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/6c73ae86

Branch: refs/heads/master
Commit: 6c73ae86fc62c630e119b556edefee1507adcd41
Parents: a2324c3
Author: Claus Ibsen <davscl...@apache.org>
Authored: Wed May 24 20:29:15 2017 +0200
Committer: Claus Ibsen <davscl...@apache.org>
Committed: Thu May 25 11:09:52 2017 +0200

----------------------------------------------------------------------
 .../converter/BaseTypeConverterRegistry.java    | 32 +++++++++++++++++---
 1 file changed, 27 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/6c73ae86/camel-core/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java
 
b/camel-core/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java
index da15cfb..3cbbe59 100644
--- 
a/camel-core/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java
+++ 
b/camel-core/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java
@@ -88,18 +88,22 @@ public abstract class BaseTypeConverterRegistry extends 
ServiceSupport implement
         this.factoryFinder = factoryFinder;
         this.typeConverterLoaders.add(new 
AnnotationTypeConverterLoader(resolver));
 
+        List<FallbackTypeConverter> fallbacks = new ArrayList<>();
         // add to string first as it will then be last in the last as to 
string can nearly
         // always convert something to a string so we want it only as the last 
resort
         // ToStringTypeConverter should NOT allow to be promoted
-        addFallbackTypeConverter(new ToStringTypeConverter(), false);
+        addCoreFallbackTypeConverterToList(new ToStringTypeConverter(), false, 
fallbacks);
         // enum is okay to be promoted
-        addFallbackTypeConverter(new EnumTypeConverter(), true);
+        addCoreFallbackTypeConverterToList(new EnumTypeConverter(), true, 
fallbacks);
         // arrays is okay to be promoted
-        addFallbackTypeConverter(new ArrayTypeConverter(), true);
+        addCoreFallbackTypeConverterToList(new ArrayTypeConverter(), true, 
fallbacks);
         // and future should also not allowed to be promoted
-        addFallbackTypeConverter(new FutureTypeConverter(this), false);
+        addCoreFallbackTypeConverterToList(new FutureTypeConverter(this), 
false, fallbacks);
         // add sync processor to async processor converter is to be promoted
-        addFallbackTypeConverter(new AsyncProcessorTypeConverter(), true);
+        addCoreFallbackTypeConverterToList(new AsyncProcessorTypeConverter(), 
true, fallbacks);
+
+        // add all core fallback converters at once which is faster (profiler)
+        fallbackConverters.addAll(fallbacks);
     }
 
     @Override
@@ -465,6 +469,24 @@ public abstract class BaseTypeConverterRegistry extends 
ServiceSupport implement
         }
     }
 
+    private void addCoreFallbackTypeConverterToList(TypeConverter 
typeConverter, boolean canPromote, List<FallbackTypeConverter> converters) {
+        log.trace("Adding core fallback type converter: {} which can promote: 
{}", typeConverter, canPromote);
+
+        // add in top of fallback as the toString() fallback will nearly 
always be able to convert
+        // the last one which is add to the FallbackTypeConverter will be 
called at the first place
+        converters.add(0, new FallbackTypeConverter(typeConverter, 
canPromote));
+        if (typeConverter instanceof TypeConverterAware) {
+            TypeConverterAware typeConverterAware = (TypeConverterAware) 
typeConverter;
+            typeConverterAware.setTypeConverter(this);
+        }
+        if (typeConverter instanceof CamelContextAware) {
+            CamelContextAware camelContextAware = (CamelContextAware) 
typeConverter;
+            if (camelContext != null) {
+                camelContextAware.setCamelContext(camelContext);
+            }
+        }
+    }
+
     public TypeConverter getTypeConverter(Class<?> toType, Class<?> fromType) {
         TypeMapping key = new TypeMapping(toType, fromType);
         return typeMappings.get(key);

Reply via email to