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/04/02 13:31:48 UTC

[camel-quarkus] branch lightweight created (now 72d6f21)

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

gnodet pushed a change to branch lightweight
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git.


      at 72d6f21  Leverage lightweight context and fix wrt latest Camel changes

This branch includes the following new commits:

     new ac490ec  Upgrade to Camel 3.2.0 - WIP
     new 72d6f21  Leverage lightweight context and fix wrt latest Camel changes

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[camel-quarkus] 02/02: Leverage lightweight context and fix wrt latest Camel changes

Posted by gn...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 72d6f21dd57a898efedc683035a49c4be2292dd2
Author: Guillaume Nodet <gn...@gmail.com>
AuthorDate: Wed Mar 25 08:27:53 2020 +0100

    Leverage lightweight context and fix wrt latest Camel changes
---
 docs/modules/ROOT/pages/cdi.adoc                   |   2 +-
 .../src/main/java/org/acme/timer/TimerRoute.java   |   2 +-
 .../src/main/kotlin/org/acme/timer/routes.kt       |   2 +-
 .../src/main/java/org/acme/timer/TimerRoute.java   |   2 +-
 .../src/main/resources/routes/my-routes.xml        |   2 +-
 .../src/main/java/org/acme/timer/TimerRoute.java   |   2 +-
 .../graal/SubstituteCachingServiceDiscovery.java   |  56 ---
 .../quarkus/core/deployment/BuildProcessor.java    |  53 ++-
 .../org/apache/camel/quarkus/core/BaseModel.java   | 364 ------------------
 .../org/apache/camel/quarkus/core/CamelConfig.java |   7 +
 .../org/apache/camel/quarkus/core/CamelMain.java   |  24 +-
 .../camel/quarkus/core/CamelMainRecorder.java      |  13 +-
 .../apache/camel/quarkus/core/CamelRecorder.java   |  83 ++++-
 .../camel/quarkus/core/CamelRoutesCollector.java   |   5 +
 .../quarkus/core/DisabledValidateReifier.java      |   6 +-
 .../camel/quarkus/core/FastCamelContext.java       | 263 ++++++++-----
 .../org/apache/camel/quarkus/core/FastModel.java   | 413 +++++++++++++--------
 .../camel/quarkus/core/FastTypeConverter.java      |   1 -
 .../java/org/apache/camel/quarkus/core/Flags.java  |  12 +-
 .../executor/deployment/BuildProcessor.java        |   2 +-
 .../component/xml/jaxb/XmlJaxbRecorder.java        |   2 +-
 .../org/apache/camel/quarkus/kotlin/RoutesDSL.kt   |   2 +-
 .../deployment/MicroProfileHealthProcessor.java    |   3 +
 .../component/qute/QuteComponentConfigurer.java    |  32 +-
 .../component/qute/QuteEndpointConfigurer.java     |  36 +-
 pom.xml                                            |   2 +-
 poms/bom/pom.xml                                   |  45 +++
 27 files changed, 720 insertions(+), 716 deletions(-)

diff --git a/docs/modules/ROOT/pages/cdi.adoc b/docs/modules/ROOT/pages/cdi.adoc
index e9f1420..f858973 100644
--- a/docs/modules/ROOT/pages/cdi.adoc
+++ b/docs/modules/ROOT/pages/cdi.adoc
@@ -15,7 +15,7 @@ import org.eclipse.microprofile.config.inject.ConfigProperty;
 @ApplicationScoped <1>
 public class TimerRoute extends RouteBuilder {
 
-    @ConfigProperty(name = "timer.period", defaultValue = "1s") <2>
+    @ConfigProperty(name = "timer.period", defaultValue = "1000") <2>
     String period;
 
     @Inject
diff --git a/examples/timer-log-cdi/src/main/java/org/acme/timer/TimerRoute.java b/examples/timer-log-cdi/src/main/java/org/acme/timer/TimerRoute.java
index 8052005..0e0056f 100644
--- a/examples/timer-log-cdi/src/main/java/org/acme/timer/TimerRoute.java
+++ b/examples/timer-log-cdi/src/main/java/org/acme/timer/TimerRoute.java
@@ -32,7 +32,7 @@ import org.eclipse.microprofile.config.inject.ConfigProperty;
 public class TimerRoute extends RouteBuilder {
 
     /** {@code timer.period} is defined in {@code src/main/resources/application.properties} */
-    @ConfigProperty(name = "timer.period", defaultValue = "1s")
+    @ConfigProperty(name = "timer.period", defaultValue = "1000")
     String period;
 
     /** An injected bean */
diff --git a/examples/timer-log-kotlin/src/main/kotlin/org/acme/timer/routes.kt b/examples/timer-log-kotlin/src/main/kotlin/org/acme/timer/routes.kt
index 129a6ef..467bab6 100644
--- a/examples/timer-log-kotlin/src/main/kotlin/org/acme/timer/routes.kt
+++ b/examples/timer-log-kotlin/src/main/kotlin/org/acme/timer/routes.kt
@@ -25,7 +25,7 @@ import javax.enterprise.inject.Produces
 class Routes {
     @Produces
     fun myRoutes() = routes {
-        from("timer:foo?period=1s")
+        from("timer:foo?period=1000")
                 .process { e: Exchange -> e.message.body = "Hello from Kotlin!" }
                 .log("\${body}")
     }
diff --git a/examples/timer-log-spring/src/main/java/org/acme/timer/TimerRoute.java b/examples/timer-log-spring/src/main/java/org/acme/timer/TimerRoute.java
index 21c07bd..a7cdd61 100644
--- a/examples/timer-log-spring/src/main/java/org/acme/timer/TimerRoute.java
+++ b/examples/timer-log-spring/src/main/java/org/acme/timer/TimerRoute.java
@@ -31,7 +31,7 @@ public class TimerRoute extends RouteBuilder {
      * {@code timer.period} is defined in {@code src/main/resources/application.properties}
      */
     @Value("timer.period")
-    String period = "1s";
+    String period = "1000";
 
     /**
      * An injected bean
diff --git a/examples/timer-log-xml/src/main/resources/routes/my-routes.xml b/examples/timer-log-xml/src/main/resources/routes/my-routes.xml
index 42fd73f..ed63c39 100644
--- a/examples/timer-log-xml/src/main/resources/routes/my-routes.xml
+++ b/examples/timer-log-xml/src/main/resources/routes/my-routes.xml
@@ -24,7 +24,7 @@
             http://camel.apache.org/schema/spring/camel-spring.xsd">
 
     <route id="xml-route">
-        <from uri="timer:from-xml?period=1s"/>
+        <from uri="timer:from-xml?period=1000"/>
         <log message="Hello XML!"/>
     </route>
 
diff --git a/examples/timer-log/src/main/java/org/acme/timer/TimerRoute.java b/examples/timer-log/src/main/java/org/acme/timer/TimerRoute.java
index 70b8bd7..0a3b0b9 100644
--- a/examples/timer-log/src/main/java/org/acme/timer/TimerRoute.java
+++ b/examples/timer-log/src/main/java/org/acme/timer/TimerRoute.java
@@ -22,7 +22,7 @@ public class TimerRoute extends RouteBuilder {
 
     @Override
     public void configure() throws Exception {
-        from("timer:foo?period=1s")
+        from("timer:foo?period=1000")
                 .log("Hello World");
     }
 }
diff --git a/extensions-core/core-cloud/runtime/src/main/java/org/apache/camel/core/cloud/graal/SubstituteCachingServiceDiscovery.java b/extensions-core/core-cloud/runtime/src/main/java/org/apache/camel/core/cloud/graal/SubstituteCachingServiceDiscovery.java
deleted file mode 100644
index 988b4d3..0000000
--- a/extensions-core/core-cloud/runtime/src/main/java/org/apache/camel/core/cloud/graal/SubstituteCachingServiceDiscovery.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.core.cloud.graal;
-
-import java.util.List;
-import java.util.concurrent.Executor;
-import java.util.concurrent.ForkJoinPool;
-import java.util.concurrent.TimeUnit;
-
-import com.github.benmanes.caffeine.cache.Caffeine;
-import com.github.benmanes.caffeine.cache.LoadingCache;
-import com.oracle.svm.core.annotate.Alias;
-import com.oracle.svm.core.annotate.Substitute;
-import com.oracle.svm.core.annotate.TargetClass;
-import org.apache.camel.cloud.ServiceDefinition;
-import org.apache.camel.cloud.ServiceDiscovery;
-import org.apache.camel.impl.cloud.CachingServiceDiscovery;
-
-@TargetClass(CachingServiceDiscovery.class)
-final class SubstituteCachingServiceDiscovery {
-    @Alias
-    private ServiceDiscovery delegate;
-    @Alias
-    private LoadingCache<String, List<ServiceDefinition>> cache;
-    @Alias
-    private long timeout;
-
-    @Substitute
-    public void setTimeout(long timeout) {
-        this.timeout = timeout;
-        this.cache = Caffeine.newBuilder()
-                .executor(new Executor() {
-                    @Override
-                    public void execute(Runnable command) {
-                        // workaround for https://github.com/quarkusio/quarkus/issues/3300
-                        ForkJoinPool.commonPool().execute(command);
-                    }
-                })
-                .expireAfterAccess(timeout, TimeUnit.MILLISECONDS)
-                .build(delegate::getServices);
-    }
-}
diff --git a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/BuildProcessor.java b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/BuildProcessor.java
index 7595070..485d510 100644
--- a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/BuildProcessor.java
+++ b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/BuildProcessor.java
@@ -61,6 +61,7 @@ import org.apache.camel.quarkus.core.deployment.util.PathFilter;
 import org.apache.camel.quarkus.support.common.CamelCapabilities;
 import org.apache.camel.spi.TypeConverterLoader;
 import org.apache.camel.spi.TypeConverterRegistry;
+import org.apache.camel.spi.XMLRoutesDefinitionLoader;
 import org.jboss.jandex.ClassInfo;
 import org.jboss.jandex.DotName;
 import org.jboss.jandex.IndexView;
@@ -156,6 +157,11 @@ class BuildProcessor {
                     "META-INF/services/org/apache/camel/language/*",
                     "META-INF/services/org/apache/camel/dataformat/*",
                     "META-INF/services/org/apache/camel/cron/*"));
+
+            services.produce(new CamelServicePatternBuildItem(
+                    CamelServiceDestination.DISCOVERY,
+                    false,
+                    "META-INF/services/org/apache/camel/" + XMLRoutesDefinitionLoader.FACTORY));
         }
 
         @BuildStep
@@ -384,13 +390,21 @@ class BuildProcessor {
 
         @Record(ExecutionTime.RUNTIME_INIT)
         @BuildStep
-        CamelRuntimeRegistryBuildItem bindRuntimeBeansToRegistry(
+        CamelRuntimeRegistryBuildItem bindRuntimeBeansToRegistryStatic(
                 CamelRecorder recorder,
                 RecorderContext recorderContext,
                 ContainerBeansBuildItem containerBeans,
                 CamelRegistryBuildItem registry,
                 List<CamelRuntimeBeanBuildItem> registryItems) {
+            return doBindRuntimeBeansToRegistry(recorder, recorderContext, containerBeans, registry, registryItems);
+        }
 
+        CamelRuntimeRegistryBuildItem doBindRuntimeBeansToRegistry(
+                CamelRecorder recorder,
+                RecorderContext recorderContext,
+                ContainerBeansBuildItem containerBeans,
+                CamelRegistryBuildItem registry,
+                List<CamelRuntimeBeanBuildItem> registryItems) {
             registryItems.stream()
                     .filter(item -> !containerBeans.getBeans().contains(item))
                     .forEach(item -> {
@@ -502,7 +516,7 @@ class BuildProcessor {
         }
 
         @Overridable
-        @Record(value = ExecutionTime.RUNTIME_INIT, optional = true)
+        @Record(value = ExecutionTime.STATIC_INIT, optional = true)
         @BuildStep(onlyIf = Flags.MainEnabled.class)
         CamelReactiveExecutorBuildItem reactiveExecutor(CamelMainRecorder recorder) {
             return new CamelReactiveExecutorBuildItem(recorder.createReactiveExecutor());
@@ -519,6 +533,7 @@ class BuildProcessor {
         @Record(ExecutionTime.STATIC_INIT)
         @BuildStep(onlyIf = Flags.MainEnabled.class)
         CamelMainBuildItem main(
+                CamelConfig camelConfig,
                 ContainerBeansBuildItem containerBeans,
                 CamelMainRecorder recorder,
                 CamelContextBuildItem context,
@@ -528,6 +543,7 @@ class BuildProcessor {
                 BeanContainerBuildItem beanContainer) {
 
             RuntimeValue<CamelMain> main = recorder.createCamelMain(
+                    camelConfig,
                     context.getCamelContext(),
                     routesCollector.getValue(),
                     beanContainer.getValue());
@@ -555,6 +571,35 @@ class BuildProcessor {
          *                  placeholder to
          *                  ensure the {@link org.apache.camel.spi.Registry} is fully configured before starting camel-main.
          * @param executor  the {@link org.apache.camel.spi.ReactiveExecutor} to be configured on camel-main, this
+         *                  happens during {@link ExecutionTime#STATIC_INIT} because the executor may need to start
+         *                  threads and so on.
+         * @param shutdown  a reference to a {@link io.quarkus.runtime.ShutdownContext} used to register shutdown logic.
+         * @param startList a placeholder to ensure camel-main start after the ArC container is fully initialized. This
+         *                  is required as under the hoods the camel registry may look-up beans form the
+         *                  container thus we need it to be fully initialized to avoid unexpected behaviors.
+         */
+        @Record(ExecutionTime.STATIC_INIT)
+        @BuildStep(onlyIf = { Flags.MainEnabled.class })
+        void startInit(
+                CamelMainRecorder recorder,
+                CamelMainBuildItem main,
+                CamelRuntimeRegistryBuildItem registry,
+                CamelReactiveExecutorBuildItem executor,
+                ShutdownContextBuildItem shutdown,
+                List<ServiceStartBuildItem> startList) {
+
+            recorder.init(shutdown, main.getInstance(), executor.getInstance());
+        }
+
+        /**
+         * This method is responsible to start camel-main ar runtime.
+         *
+         * @param recorder  the recorder.
+         * @param main      a reference to a {@link CamelMain}.
+         * @param registry  a reference to a {@link org.apache.camel.spi.Registry}; note that this parameter is here as
+         *                  placeholder to
+         *                  ensure the {@link org.apache.camel.spi.Registry} is fully configured before starting camel-main.
+         * @param executor  the {@link org.apache.camel.spi.ReactiveExecutor} to be configured on camel-main, this
          *                  happens during {@link ExecutionTime#RUNTIME_INIT} because the executor may need to start
          *                  threads and so on.
          * @param shutdown  a reference to a {@link io.quarkus.runtime.ShutdownContext} used to register shutdown logic.
@@ -572,9 +617,9 @@ class BuildProcessor {
                 ShutdownContextBuildItem shutdown,
                 List<ServiceStartBuildItem> startList) {
 
-            recorder.setReactiveExecutor(main.getInstance(), executor.getInstance());
-            recorder.start(shutdown, main.getInstance());
+            recorder.start(main.getInstance());
         }
+
     }
 
     /**
diff --git a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/BaseModel.java b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/BaseModel.java
deleted file mode 100644
index 0a11942..0000000
--- a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/BaseModel.java
+++ /dev/null
@@ -1,364 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.quarkus.core;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.function.Function;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.ExtendedCamelContext;
-import org.apache.camel.FailedToStartRouteException;
-import org.apache.camel.model.DataFormatDefinition;
-import org.apache.camel.model.HystrixConfigurationDefinition;
-import org.apache.camel.model.Model;
-import org.apache.camel.model.ProcessorDefinition;
-import org.apache.camel.model.ProcessorDefinitionHelper;
-import org.apache.camel.model.Resilience4jConfigurationDefinition;
-import org.apache.camel.model.RouteDefinition;
-import org.apache.camel.model.RouteDefinitionHelper;
-import org.apache.camel.model.RouteFilters;
-import org.apache.camel.model.cloud.ServiceCallConfigurationDefinition;
-import org.apache.camel.model.rest.RestDefinition;
-import org.apache.camel.model.transformer.TransformerDefinition;
-import org.apache.camel.model.validator.ValidatorDefinition;
-
-public abstract class BaseModel implements Model {
-
-    private final CamelContext camelContext;
-
-    private final List<RouteDefinition> routeDefinitions = new ArrayList<>();
-    private final List<RestDefinition> restDefinitions = new ArrayList<>();
-    private Map<String, DataFormatDefinition> dataFormats = new HashMap<>();
-    private List<TransformerDefinition> transformers = new ArrayList<>();
-    private List<ValidatorDefinition> validators = new ArrayList<>();
-    private Map<String, ServiceCallConfigurationDefinition> serviceCallConfigurations = new ConcurrentHashMap<>();
-    private Map<String, HystrixConfigurationDefinition> hystrixConfigurations = new ConcurrentHashMap<>();
-    private Map<String, Resilience4jConfigurationDefinition> resilience4jConfigurations = new ConcurrentHashMap<>();
-    private Function<RouteDefinition, Boolean> routeFilter;
-
-    public BaseModel(CamelContext camelContext) {
-        this.camelContext = camelContext;
-    }
-
-    public CamelContext getCamelContext() {
-        return camelContext;
-    }
-
-    @Override
-    public synchronized void addRouteDefinitions(Collection<RouteDefinition> routeDefinitions) throws Exception {
-        if (routeDefinitions == null || routeDefinitions.isEmpty()) {
-            return;
-        }
-        List<RouteDefinition> list = new ArrayList<>();
-        routeDefinitions.forEach(r -> {
-            if (routeFilter == null || routeFilter.apply(r)) {
-                list.add(r);
-            }
-        });
-
-        removeRouteDefinitions(list);
-        this.routeDefinitions.addAll(list);
-        if (shouldStartRoutes()) {
-            startRouteDefinitions(list);
-        }
-    }
-
-    @Override
-    public void addRouteDefinition(RouteDefinition routeDefinition) throws Exception {
-        addRouteDefinitions(Collections.singletonList(routeDefinition));
-    }
-
-    @Override
-    public synchronized void removeRouteDefinitions(Collection<RouteDefinition> routeDefinitions) throws Exception {
-        for (RouteDefinition routeDefinition : routeDefinitions) {
-            removeRouteDefinition(routeDefinition);
-        }
-    }
-
-    @Override
-    public synchronized void removeRouteDefinition(RouteDefinition routeDefinition) throws Exception {
-        RouteDefinition toBeRemoved = routeDefinition;
-        String id = routeDefinition.getId();
-        if (id != null) {
-            // remove existing route
-            camelContext.getRouteController().stopRoute(id);
-            camelContext.removeRoute(id);
-            toBeRemoved = getRouteDefinition(id);
-        }
-        this.routeDefinitions.remove(toBeRemoved);
-    }
-
-    @Override
-    public synchronized List<RouteDefinition> getRouteDefinitions() {
-        return routeDefinitions;
-    }
-
-    @Override
-    public synchronized RouteDefinition getRouteDefinition(String id) {
-        for (RouteDefinition route : routeDefinitions) {
-            if (route.idOrCreate(camelContext.adapt(ExtendedCamelContext.class).getNodeIdFactory()).equals(id)) {
-                return route;
-            }
-        }
-        return null;
-    }
-
-    @Override
-    public synchronized List<RestDefinition> getRestDefinitions() {
-        return restDefinitions;
-    }
-
-    @Override
-    public synchronized void addRestDefinitions(Collection<RestDefinition> restDefinitions, boolean addToRoutes)
-            throws Exception {
-        if (restDefinitions == null || restDefinitions.isEmpty()) {
-            return;
-        }
-
-        this.restDefinitions.addAll(restDefinitions);
-        if (addToRoutes) {
-            // rests are also routes so need to add them there too
-            for (final RestDefinition restDefinition : restDefinitions) {
-                List<RouteDefinition> routeDefinitions = restDefinition.asRouteDefinition(camelContext);
-                addRouteDefinitions(routeDefinitions);
-            }
-        }
-    }
-
-    @Override
-    public ServiceCallConfigurationDefinition getServiceCallConfiguration(String serviceName) {
-        if (serviceName == null) {
-            serviceName = "";
-        }
-
-        return serviceCallConfigurations.get(serviceName);
-    }
-
-    @Override
-    public void setServiceCallConfiguration(ServiceCallConfigurationDefinition configuration) {
-        serviceCallConfigurations.put("", configuration);
-    }
-
-    @Override
-    public void setServiceCallConfigurations(List<ServiceCallConfigurationDefinition> configurations) {
-        if (configurations != null) {
-            for (ServiceCallConfigurationDefinition configuration : configurations) {
-                serviceCallConfigurations.put(configuration.getId(), configuration);
-            }
-        }
-    }
-
-    @Override
-    public void addServiceCallConfiguration(String serviceName, ServiceCallConfigurationDefinition configuration) {
-        serviceCallConfigurations.put(serviceName, configuration);
-    }
-
-    @Override
-    public HystrixConfigurationDefinition getHystrixConfiguration(String id) {
-        if (id == null) {
-            id = "";
-        }
-
-        return hystrixConfigurations.get(id);
-    }
-
-    @Override
-    public void setHystrixConfiguration(HystrixConfigurationDefinition configuration) {
-        hystrixConfigurations.put("", configuration);
-    }
-
-    @Override
-    public void setHystrixConfigurations(List<HystrixConfigurationDefinition> configurations) {
-        if (configurations != null) {
-            for (HystrixConfigurationDefinition configuration : configurations) {
-                hystrixConfigurations.put(configuration.getId(), configuration);
-            }
-        }
-    }
-
-    @Override
-    public void addHystrixConfiguration(String id, HystrixConfigurationDefinition configuration) {
-        hystrixConfigurations.put(id, configuration);
-    }
-
-    @Override
-    public Resilience4jConfigurationDefinition getResilience4jConfiguration(String id) {
-        if (id == null) {
-            id = "";
-        }
-
-        return resilience4jConfigurations.get(id);
-    }
-
-    @Override
-    public void setResilience4jConfiguration(Resilience4jConfigurationDefinition configuration) {
-        resilience4jConfigurations.put("", configuration);
-    }
-
-    @Override
-    public void setResilience4jConfigurations(List<Resilience4jConfigurationDefinition> configurations) {
-        if (configurations != null) {
-            for (Resilience4jConfigurationDefinition configuration : configurations) {
-                resilience4jConfigurations.put(configuration.getId(), configuration);
-            }
-        }
-    }
-
-    @Override
-    public void addResilience4jConfiguration(String id, Resilience4jConfigurationDefinition configuration) {
-        resilience4jConfigurations.put(id, configuration);
-    }
-
-    @Override
-    public DataFormatDefinition resolveDataFormatDefinition(String name) {
-        // lookup type and create the data format from it
-        DataFormatDefinition type = lookup(camelContext, name, DataFormatDefinition.class);
-        if (type == null && getDataFormats() != null) {
-            type = getDataFormats().get(name);
-        }
-        return type;
-    }
-
-    @Override
-    public ProcessorDefinition getProcessorDefinition(String id) {
-        for (RouteDefinition route : getRouteDefinitions()) {
-            Iterator<ProcessorDefinition> it = ProcessorDefinitionHelper.filterTypeInOutputs(route.getOutputs(),
-                    ProcessorDefinition.class);
-            while (it.hasNext()) {
-                ProcessorDefinition proc = it.next();
-                if (id.equals(proc.getId())) {
-                    return proc;
-                }
-            }
-        }
-        return null;
-    }
-
-    @Override
-    public <T extends ProcessorDefinition> T getProcessorDefinition(String id, Class<T> type) {
-        ProcessorDefinition answer = getProcessorDefinition(id);
-        if (answer != null) {
-            return type.cast(answer);
-        }
-        return null;
-    }
-
-    @Override
-    public void setDataFormats(Map<String, DataFormatDefinition> dataFormats) {
-        this.dataFormats = dataFormats;
-    }
-
-    @Override
-    public Map<String, DataFormatDefinition> getDataFormats() {
-        return dataFormats;
-    }
-
-    @Override
-    public void setTransformers(List<TransformerDefinition> transformers) {
-        this.transformers = transformers;
-    }
-
-    @Override
-    public List<TransformerDefinition> getTransformers() {
-        return transformers;
-    }
-
-    @Override
-    public void setValidators(List<ValidatorDefinition> validators) {
-        this.validators = validators;
-    }
-
-    @Override
-    public List<ValidatorDefinition> getValidators() {
-        return validators;
-    }
-
-    @Override
-    public void startRouteDefinitions() throws Exception {
-        startRouteDefinitions(routeDefinitions);
-    }
-
-    @Override
-    public void setRouteFilterPattern(String include, String exclude) {
-        setRouteFilter(RouteFilters.filterByPattern(include, exclude));
-    }
-
-    @Override
-    public Function<RouteDefinition, Boolean> getRouteFilter() {
-        return routeFilter;
-    }
-
-    @Override
-    public void setRouteFilter(Function<RouteDefinition, Boolean> routeFilter) {
-        this.routeFilter = routeFilter;
-    }
-
-    protected void startRouteDefinitions(Collection<RouteDefinition> list) throws Exception {
-        if (list != null) {
-            for (RouteDefinition route : list) {
-                startRoute(route);
-            }
-        }
-    }
-
-    public void startRoute(RouteDefinition routeDefinition) throws Exception {
-        prepare(routeDefinition);
-        start(routeDefinition);
-    }
-
-    protected void prepare(RouteDefinition routeDefinition) throws Exception {
-        // assign ids to the routes and validate that the id's is all unique
-        RouteDefinitionHelper.forceAssignIds(camelContext, routeDefinitions);
-        String duplicate = RouteDefinitionHelper.validateUniqueIds(routeDefinition, routeDefinitions);
-        if (duplicate != null) {
-            throw new FailedToStartRouteException(routeDefinition.getId(),
-                    "duplicate id detected: " + duplicate + ". Please correct ids to be unique among all your routes.");
-        }
-
-        // must ensure route is prepared, before we can start it
-        if (!routeDefinition.isPrepared()) {
-            RouteDefinitionHelper.prepareRoute(camelContext, routeDefinition);
-            routeDefinition.markPrepared();
-        }
-    }
-
-    protected abstract void start(RouteDefinition routeDefinition) throws Exception;
-
-    /**
-     * Should we start newly added routes?
-     */
-    protected boolean shouldStartRoutes() {
-        return camelContext.isStarted() && !camelContext.isStarting();
-    }
-
-    protected static <T> T lookup(CamelContext context, String ref, Class<T> type) {
-        try {
-            return context.getRegistry().lookupByNameAndType(ref, type);
-        } catch (Exception e) {
-            // need to ignore not same type and return it as null
-            return null;
-        }
-    }
-
-}
diff --git a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelConfig.java b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelConfig.java
index b8fa70b..70de1b1 100644
--- a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelConfig.java
+++ b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelConfig.java
@@ -63,6 +63,13 @@ public class CamelConfig {
         public boolean enabled;
 
         /**
+         * If {@code true}, the camel context will be started at initialization time
+         * to boot up faster.
+         */
+        @ConfigItem
+        public boolean lightweight;
+
+        /**
          * Build time configuration options for routes discovery.
          */
         @ConfigItem
diff --git a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelMain.java b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelMain.java
index 98691cf..f5d90ad 100644
--- a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelMain.java
+++ b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelMain.java
@@ -19,11 +19,7 @@ package org.apache.camel.quarkus.core;
 import java.util.Collection;
 import java.util.Collections;
 
-import org.apache.camel.CamelContext;
-import org.apache.camel.CamelContextAware;
-import org.apache.camel.ExtendedCamelContext;
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.RoutesBuilder;
+import org.apache.camel.*;
 import org.apache.camel.main.BaseMainSupport;
 import org.apache.camel.main.MainConfigurationProperties;
 import org.apache.camel.main.MainListener;
@@ -35,30 +31,44 @@ import org.slf4j.LoggerFactory;
 public class CamelMain extends BaseMainSupport implements CamelContextAware {
     private static final Logger LOGGER = LoggerFactory.getLogger(CamelMain.class);
 
+    public CamelMain() {
+    }
+
     @Override
     public void setCamelContext(CamelContext camelContext) {
         this.camelContext = camelContext;
     }
 
     @Override
+    protected void doInit() throws Exception {
+        super.doInit();
+        postProcessCamelContext(camelContext);
+        camelContext.init();
+    }
+
+    @Override
     protected void doStart() throws Exception {
         for (MainListener listener : listeners) {
             listener.beforeStart(this);
         }
 
-        postProcessCamelContext(getCamelContext());
         getCamelContext().start();
 
         for (MainListener listener : listeners) {
             listener.afterStart(this);
         }
+
+        if (getMainConfigurationProperties().isLightweight()) {
+            routesCollector = null;
+            routeBuilders = null;
+        }
     }
 
     @Override
     protected void postProcessCamelContext(CamelContext camelContext) throws Exception {
         super.postProcessCamelContext(camelContext);
 
-        // post process classes with camel's post processor so classes have supot
+        // post process classes with camel's post processor so classes have support
         // for camel's simple di
         CamelBeanPostProcessor postProcessor = camelContext.adapt(ExtendedCamelContext.class).getBeanPostProcessor();
         for (RoutesBuilder builder : getRoutesBuilders()) {
diff --git a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelMainRecorder.java b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelMainRecorder.java
index ec0d238..dacdf4f 100644
--- a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelMainRecorder.java
+++ b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelMainRecorder.java
@@ -36,10 +36,12 @@ public class CamelMainRecorder {
     }
 
     public RuntimeValue<CamelMain> createCamelMain(
+            CamelConfig camelConfig,
             RuntimeValue<CamelContext> runtime,
             RuntimeValue<RoutesCollector> routesCollector,
             BeanContainer container) {
         CamelMain main = new CamelMain();
+        main.getMainConfigurationProperties().setLightweight(camelConfig.main.lightweight);
         main.setRoutesCollector(routesCollector.getValue());
         main.setCamelContext(runtime.getValue());
         main.addMainListener(new CamelMainEventDispatcher());
@@ -76,11 +78,7 @@ public class CamelMainRecorder {
         main.getValue().addMainListener(listener.getValue());
     }
 
-    public void setReactiveExecutor(RuntimeValue<CamelMain> main, RuntimeValue<ReactiveExecutor> executor) {
-        main.getValue().getCamelContext().adapt(ExtendedCamelContext.class).setReactiveExecutor(executor.getValue());
-    }
-
-    public void start(ShutdownContext shutdown, RuntimeValue<CamelMain> main) {
+    public void init(ShutdownContext shutdown, RuntimeValue<CamelMain> main, RuntimeValue<ReactiveExecutor> executor) {
         shutdown.addShutdownTask(new Runnable() {
             @Override
             public void run() {
@@ -91,9 +89,12 @@ public class CamelMainRecorder {
                 }
             }
         });
+        main.getValue().getCamelContext().adapt(ExtendedCamelContext.class).setReactiveExecutor(executor.getValue());
+        main.getValue().init();
+    }
 
+    public void start(RuntimeValue<CamelMain> main) {
         try {
-            main.getValue().init();
             main.getValue().start();
         } catch (Exception e) {
             throw new RuntimeException(e);
diff --git a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelRecorder.java b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelRecorder.java
index 35e5688..c146d33 100644
--- a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelRecorder.java
+++ b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelRecorder.java
@@ -20,7 +20,7 @@ import io.quarkus.arc.runtime.BeanContainer;
 import io.quarkus.runtime.RuntimeValue;
 import io.quarkus.runtime.annotations.Recorder;
 import org.apache.camel.CamelContext;
-import org.apache.camel.catalog.RuntimeCamelCatalog;
+import org.apache.camel.impl.lw.LightweightCamelContext;
 import org.apache.camel.model.ValidateDefinition;
 import org.apache.camel.model.validator.PredicateValidatorDefinition;
 import org.apache.camel.quarkus.core.FastFactoryFinderResolver.Builder;
@@ -69,23 +69,43 @@ public class CamelRecorder {
             String version,
             CamelConfig config) {
 
-        FastCamelContext context = new FastCamelContext(
-                factoryFinderResolver.getValue(),
-                version,
-                xmlLoader.getValue(),
-                xmlModelDumper.getValue());
-
-        context.setDefaultExtension(RuntimeCamelCatalog.class, () -> new CamelRuntimeCatalog(config.runtimeCatalog));
-        context.setRegistry(registry.getValue());
-        context.setTypeConverterRegistry(typeConverterRegistry.getValue());
-        context.setLoadTypeConverters(false);
-        context.setModelJAXBContextFactory(contextFactory.getValue());
-        context.init();
-
-        // register to the container
-        beanContainer.instance(CamelProducers.class).setContext(context);
+        if (config.main.lightweight) {
+            FastLightweightCamelContext context = new FastLightweightCamelContext(
+                    factoryFinderResolver.getValue(),
+                    version,
+                    xmlLoader.getValue(),
+                    xmlModelDumper.getValue());
+            context.setRuntimeCamelCatalog(new CamelRuntimeCatalog(config.runtimeCatalog));
+            context.setRegistry(registry.getValue());
+            context.setTypeConverterRegistry(typeConverterRegistry.getValue());
+            context.setLoadTypeConverters(false);
+            context.setModelJAXBContextFactory(contextFactory.getValue());
+            context.build();
+
+            // register to the container
+            beanContainer.instance(CamelProducers.class).setContext(context);
+
+            return new RuntimeValue<>(context);
+        } else {
+            FastCamelContext context = new FastCamelContext(
+                    null,
+                    factoryFinderResolver.getValue(),
+                    version,
+                    xmlLoader.getValue(),
+                    xmlModelDumper.getValue());
+            context.setRuntimeCamelCatalog(new CamelRuntimeCatalog(config.runtimeCatalog));
+            context.setRegistry(registry.getValue());
+            context.setTypeConverterRegistry(typeConverterRegistry.getValue());
+            context.setLoadTypeConverters(false);
+            context.setModelJAXBContextFactory(contextFactory.getValue());
+            context.build();
+
+            // register to the container
+            beanContainer.instance(CamelProducers.class).setContext(context);
+
+            return new RuntimeValue<>(context);
+        }
 
-        return new RuntimeValue<>(context);
     }
 
     public void bind(
@@ -150,4 +170,33 @@ public class CamelRecorder {
     public RuntimeValue<FactoryFinderResolver> factoryFinderResolver(RuntimeValue<Builder> builder) {
         return new RuntimeValue<>(builder.getValue().build());
     }
+
+    public static class FastLightweightCamelContext extends LightweightCamelContext {
+        public FastLightweightCamelContext(FactoryFinderResolver factoryFinderResolver, String version,
+                XMLRoutesDefinitionLoader xmlLoader, ModelToXMLDumper modelDumper) {
+            super((CamelContext) null);
+            delegate = new FastCamelContextWithRef(FastLightweightCamelContext.this,
+                    factoryFinderResolver, version,
+                    xmlLoader, modelDumper);
+        }
+
+        public void init() {
+            //            new Exception().printStackTrace();
+            super.init();
+        }
+
+        static class FastCamelContextWithRef extends FastCamelContext {
+            public FastCamelContextWithRef(CamelContext reference, FactoryFinderResolver factoryFinderResolver, String version,
+                    XMLRoutesDefinitionLoader xmlLoader, ModelToXMLDumper modelDumper) {
+                super(reference, factoryFinderResolver, version, xmlLoader, modelDumper);
+                disableJMX();
+            }
+
+            public void init() {
+                //                new Exception().printStackTrace();
+                super.init();
+            }
+
+        }
+    }
 }
diff --git a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelRoutesCollector.java b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelRoutesCollector.java
index 0c63b2a..e4329cb 100644
--- a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelRoutesCollector.java
+++ b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelRoutesCollector.java
@@ -18,6 +18,7 @@ package org.apache.camel.quarkus.core;
 
 import java.io.FileNotFoundException;
 import java.io.InputStream;
+import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -69,12 +70,16 @@ public class CamelRoutesCollector implements RoutesCollector {
         for (String part : directory.split(",")) {
             LOGGER.info("Loading additional Camel XML routes from: {}", part);
             try {
+                LOGGER.info("Resolving from current dir: {}", Paths.get(".").toAbsolutePath().toString());
+                int res = 0;
                 for (InputStream is : resolver.findResources(part)) {
+                    res++;
                     Object definition = xmlRoutesLoader.loadRoutesDefinition(camelContext, is);
                     if (definition instanceof RoutesDefinition) {
                         answer.add((RoutesDefinition) definition);
                     }
                 }
+                LOGGER.info("Found {} resources", res);
             } catch (FileNotFoundException e) {
                 LOGGER.debug("No XML routes found in {}. Skipping XML routes detection.", part);
             } catch (Exception e) {
diff --git a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/DisabledValidateReifier.java b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/DisabledValidateReifier.java
index 911bfe7..a9b8144 100644
--- a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/DisabledValidateReifier.java
+++ b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/DisabledValidateReifier.java
@@ -17,15 +17,15 @@
 package org.apache.camel.quarkus.core;
 
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.ValidateDefinition;
 import org.apache.camel.reifier.ProcessorReifier;
-import org.apache.camel.spi.RouteContext;
 
 public class DisabledValidateReifier extends ProcessorReifier<ValidateDefinition> {
 
-    public DisabledValidateReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, (ValidateDefinition) definition);
+    public DisabledValidateReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, (ValidateDefinition) definition);
     }
 
     @Override
diff --git a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastCamelContext.java b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastCamelContext.java
index f0d0493..2cb59d4 100644
--- a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastCamelContext.java
+++ b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastCamelContext.java
@@ -19,34 +19,32 @@ package org.apache.camel.quarkus.core;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.Collection;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ExecutorService;
 import java.util.function.Function;
 
-import org.apache.camel.AsyncProcessor;
-import org.apache.camel.CatalogCamelContext;
-import org.apache.camel.Component;
-import org.apache.camel.Endpoint;
-import org.apache.camel.Processor;
-import org.apache.camel.TypeConverter;
+import org.apache.camel.*;
+import org.apache.camel.builder.AdviceWithRouteBuilder;
 import org.apache.camel.catalog.RuntimeCamelCatalog;
 import org.apache.camel.catalog.impl.DefaultRuntimeCamelCatalog;
 import org.apache.camel.component.microprofile.config.CamelMicroProfilePropertiesSource;
 import org.apache.camel.health.HealthCheckRegistry;
 import org.apache.camel.impl.DefaultExecutorServiceManager;
 import org.apache.camel.impl.engine.AbstractCamelContext;
-import org.apache.camel.impl.engine.BeanProcessorFactoryResolver;
-import org.apache.camel.impl.engine.BeanProxyFactoryResolver;
+import org.apache.camel.impl.engine.BaseServiceResolver;
 import org.apache.camel.impl.engine.DefaultAsyncProcessorAwaitManager;
 import org.apache.camel.impl.engine.DefaultBeanIntrospection;
 import org.apache.camel.impl.engine.DefaultCamelBeanPostProcessor;
 import org.apache.camel.impl.engine.DefaultCamelContextNameStrategy;
 import org.apache.camel.impl.engine.DefaultClassResolver;
+import org.apache.camel.impl.engine.DefaultComponentNameResolver;
 import org.apache.camel.impl.engine.DefaultComponentResolver;
 import org.apache.camel.impl.engine.DefaultConfigurerResolver;
 import org.apache.camel.impl.engine.DefaultDataFormatResolver;
 import org.apache.camel.impl.engine.DefaultEndpointRegistry;
+import org.apache.camel.impl.engine.DefaultHeadersMapFactory;
 import org.apache.camel.impl.engine.DefaultInflightRepository;
 import org.apache.camel.impl.engine.DefaultInjector;
 import org.apache.camel.impl.engine.DefaultLanguageResolver;
@@ -55,7 +53,6 @@ import org.apache.camel.impl.engine.DefaultNodeIdFactory;
 import org.apache.camel.impl.engine.DefaultPackageScanClassResolver;
 import org.apache.camel.impl.engine.DefaultPackageScanResourceResolver;
 import org.apache.camel.impl.engine.DefaultProcessorFactory;
-import org.apache.camel.impl.engine.DefaultReactiveExecutor;
 import org.apache.camel.impl.engine.DefaultRouteController;
 import org.apache.camel.impl.engine.DefaultStreamCachingStrategy;
 import org.apache.camel.impl.engine.DefaultTracer;
@@ -63,8 +60,7 @@ import org.apache.camel.impl.engine.DefaultTransformerRegistry;
 import org.apache.camel.impl.engine.DefaultUnitOfWorkFactory;
 import org.apache.camel.impl.engine.DefaultValidatorRegistry;
 import org.apache.camel.impl.engine.EndpointKey;
-import org.apache.camel.impl.engine.HeadersMapFactoryResolver;
-import org.apache.camel.impl.engine.RestRegistryFactoryResolver;
+import org.apache.camel.impl.engine.RouteService;
 import org.apache.camel.impl.health.DefaultHealthCheckRegistry;
 import org.apache.camel.impl.transformer.TransformerKey;
 import org.apache.camel.impl.validator.ValidatorKey;
@@ -75,69 +71,46 @@ import org.apache.camel.model.ModelCamelContext;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.Resilience4jConfigurationDefinition;
 import org.apache.camel.model.RouteDefinition;
+import org.apache.camel.model.RouteDefinitionHelper;
 import org.apache.camel.model.cloud.ServiceCallConfigurationDefinition;
+import org.apache.camel.model.language.ExpressionDefinition;
 import org.apache.camel.model.rest.RestDefinition;
 import org.apache.camel.model.transformer.TransformerDefinition;
 import org.apache.camel.model.validator.ValidatorDefinition;
 import org.apache.camel.processor.MulticastProcessor;
-import org.apache.camel.spi.AsyncProcessorAwaitManager;
-import org.apache.camel.spi.BeanIntrospection;
-import org.apache.camel.spi.BeanProcessorFactory;
-import org.apache.camel.spi.BeanProxyFactory;
-import org.apache.camel.spi.CamelBeanPostProcessor;
-import org.apache.camel.spi.CamelContextNameStrategy;
-import org.apache.camel.spi.ClassResolver;
-import org.apache.camel.spi.ComponentResolver;
-import org.apache.camel.spi.ConfigurerResolver;
-import org.apache.camel.spi.DataFormat;
-import org.apache.camel.spi.DataFormatResolver;
-import org.apache.camel.spi.EndpointRegistry;
-import org.apache.camel.spi.ExecutorServiceManager;
-import org.apache.camel.spi.FactoryFinderResolver;
-import org.apache.camel.spi.HeadersMapFactory;
-import org.apache.camel.spi.InflightRepository;
-import org.apache.camel.spi.Injector;
-import org.apache.camel.spi.Language;
-import org.apache.camel.spi.LanguageResolver;
-import org.apache.camel.spi.ManagementNameStrategy;
-import org.apache.camel.spi.MessageHistoryFactory;
-import org.apache.camel.spi.ModelJAXBContextFactory;
-import org.apache.camel.spi.ModelToXMLDumper;
-import org.apache.camel.spi.NodeIdFactory;
-import org.apache.camel.spi.PackageScanClassResolver;
-import org.apache.camel.spi.PackageScanResourceResolver;
-import org.apache.camel.spi.ProcessorFactory;
-import org.apache.camel.spi.PropertiesComponent;
-import org.apache.camel.spi.ReactiveExecutor;
-import org.apache.camel.spi.Registry;
-import org.apache.camel.spi.RestRegistryFactory;
-import org.apache.camel.spi.RouteController;
-import org.apache.camel.spi.ShutdownStrategy;
-import org.apache.camel.spi.StreamCachingStrategy;
-import org.apache.camel.spi.Tracer;
-import org.apache.camel.spi.TransformerRegistry;
-import org.apache.camel.spi.TypeConverterRegistry;
-import org.apache.camel.spi.UnitOfWorkFactory;
-import org.apache.camel.spi.UuidGenerator;
-import org.apache.camel.spi.ValidatorRegistry;
-import org.apache.camel.spi.XMLRoutesDefinitionLoader;
+import org.apache.camel.reifier.RouteReifier;
+import org.apache.camel.reifier.errorhandler.ErrorHandlerReifier;
+import org.apache.camel.reifier.language.ExpressionReifier;
+import org.apache.camel.reifier.transformer.TransformerReifier;
+import org.apache.camel.reifier.validator.ValidatorReifier;
+import org.apache.camel.spi.*;
 import org.apache.camel.support.CamelContextHelper;
 import org.apache.camel.util.IOHelper;
+import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
-public class FastCamelContext extends AbstractCamelContext implements CatalogCamelContext, ModelCamelContext {
-    private final Model model;
+public class FastCamelContext extends AbstractCamelContext implements ModelCamelContext {
+
+    private static final Logger LOG = LoggerFactory.getLogger(FastCamelContext.class);
+
+    private final CamelContext reference;
     private final String version;
-    private final XMLRoutesDefinitionLoader xmlLoader;
-    private final ModelToXMLDumper modelDumper;
+    private XMLRoutesDefinitionLoader xmlLoader;
+    private ModelToXMLDumper modelDumper;
+    private Model model;
+    private Date startDate;
 
-    public FastCamelContext(FactoryFinderResolver factoryFinderResolver, String version, XMLRoutesDefinitionLoader xmlLoader,
+    public FastCamelContext(CamelContext reference, FactoryFinderResolver factoryFinderResolver, String version,
+            XMLRoutesDefinitionLoader xmlLoader,
             ModelToXMLDumper modelDumper) {
         super(false);
-
+        this.reference = reference != null ? reference : this;
         this.version = version;
         this.xmlLoader = xmlLoader;
         this.modelDumper = modelDumper;
-        this.model = new FastModel(this);
+
+        this.model = new FastModel(getCamelContextReference());
 
         setFactoryFinderResolver(factoryFinderResolver);
         setTracing(Boolean.FALSE);
@@ -145,6 +118,57 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam
         setMessageHistory(Boolean.FALSE);
         setDefaultExtension(HealthCheckRegistry.class, DefaultHealthCheckRegistry::new);
 
+        LOG.info("Creating Apache Camel {} (CamelContext: {})", getVersion(), getName());
+    }
+
+    @Override
+    public CamelContext getCamelContextReference() {
+        return reference;
+    }
+
+    @Override
+    public long getUptimeMillis() {
+        if (startDate == null) {
+            return 0;
+        }
+        return new Date().getTime() - startDate.getTime();
+    }
+
+    @Override
+    public Date getStartDate() {
+        return startDate;
+    }
+
+    @Override
+    public void startRouteDefinitions() throws Exception {
+        List<RouteDefinition> routeDefinitions = model.getRouteDefinitions();
+        if (routeDefinitions != null) {
+            startRouteDefinitions(routeDefinitions);
+        }
+    }
+
+    public void startRouteDefinitions(List<RouteDefinition> routeDefinitions) throws Exception {
+        RouteDefinitionHelper.forceAssignIds(getCamelContextReference(), routeDefinitions);
+        for (RouteDefinition routeDefinition : routeDefinitions) {
+            // assign ids to the routes and validate that the id's is all unique
+            String duplicate = RouteDefinitionHelper.validateUniqueIds(routeDefinition, routeDefinitions);
+            if (duplicate != null) {
+                throw new FailedToStartRouteException(routeDefinition.getId(),
+                        "duplicate id detected: " + duplicate + ". Please correct ids to be unique among all your routes.");
+            }
+
+            // must ensure route is prepared, before we can start it
+            if (!routeDefinition.isPrepared()) {
+                RouteDefinitionHelper.prepareRoute(getCamelContextReference(), routeDefinition);
+                routeDefinition.markPrepared();
+            }
+
+            // indicate we are staring the route using this thread so
+            // we are able to query this if needed
+            Route route = new RouteReifier(getCamelContextReference(), routeDefinition).createRoute();
+            RouteService routeService = new RouteService(route);
+            routeService.warmUp();
+        }
     }
 
     @Override
@@ -209,13 +233,18 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam
     }
 
     @Override
+    protected HealthCheckRegistry createHealthCheckRegistry() {
+        return new DefaultHealthCheckRegistry(getCamelContextReference());
+    }
+
+    @Override
     protected Injector createInjector() {
-        return new DefaultInjector(this);
+        return new DefaultInjector(getCamelContextReference());
     }
 
     @Override
     protected CamelBeanPostProcessor createBeanPostProcessor() {
-        return new DefaultCamelBeanPostProcessor(this);
+        return new DefaultCamelBeanPostProcessor(getCamelContextReference());
     }
 
     @Override
@@ -236,7 +265,7 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam
 
     @Override
     protected ClassResolver createClassResolver() {
-        return new DefaultClassResolver(this);
+        return new DefaultClassResolver(getCamelContextReference());
     }
 
     @Override
@@ -261,7 +290,7 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam
 
     @Override
     protected RouteController createRouteController() {
-        return new DefaultRouteController(this);
+        return new DefaultRouteController(getCamelContextReference());
     }
 
     @Override
@@ -271,7 +300,7 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam
 
     @Override
     protected ExecutorServiceManager createExecutorServiceManager() {
-        return new DefaultExecutorServiceManager(this);
+        return new DefaultExecutorServiceManager(getCamelContextReference());
     }
 
     @Override
@@ -285,17 +314,25 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam
 
     @Override
     protected HeadersMapFactory createHeadersMapFactory() {
-        return new HeadersMapFactoryResolver().resolve(this);
+        return new BaseServiceResolver<>(HeadersMapFactory.FACTORY, HeadersMapFactory.class)
+                .resolve(getCamelContextReference())
+                .orElseGet(DefaultHeadersMapFactory::new);
     }
 
     @Override
     protected BeanProxyFactory createBeanProxyFactory() {
-        return new BeanProxyFactoryResolver().resolve(this);
+        return new BaseServiceResolver<>(BeanProxyFactory.FACTORY, BeanProxyFactory.class)
+                .resolve(getCamelContextReference())
+                .orElseThrow(() -> new IllegalArgumentException("Cannot find BeanProxyFactory on classpath. "
+                        + "Add camel-bean to classpath."));
     }
 
     @Override
     protected BeanProcessorFactory createBeanProcessorFactory() {
-        return new BeanProcessorFactoryResolver().resolve(this);
+        return new BaseServiceResolver<>(BeanProcessorFactory.FACTORY, BeanProcessorFactory.class)
+                .resolve(getCamelContextReference())
+                .orElseThrow(() -> new IllegalArgumentException("Cannot find BeanProcessorFactory on classpath. "
+                        + "Add camel-bean to classpath."));
     }
 
     @Override
@@ -308,9 +345,7 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam
         org.apache.camel.component.properties.PropertiesComponent pc = new org.apache.camel.component.properties.PropertiesComponent();
         pc.setAutoDiscoverPropertiesSources(false);
         pc.addPropertiesSource(new CamelMicroProfilePropertiesSource());
-
         return pc;
-
     }
 
     @Override
@@ -337,7 +372,7 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam
     protected Tracer createTracer() {
         Tracer tracer = null;
         if (getRegistry() != null) {
-            Map<String, Tracer> map = this.getRegistry().findByTypeWithName(Tracer.class);
+            Map<String, Tracer> map = getRegistry().findByTypeWithName(Tracer.class);
             if (map.size() == 1) {
                 tracer = map.values().iterator().next();
             }
@@ -357,12 +392,15 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam
 
     @Override
     protected RestRegistryFactory createRestRegistryFactory() {
-        return new RestRegistryFactoryResolver().resolve(this);
+        return new BaseServiceResolver<>(RestRegistryFactory.FACTORY, RestRegistryFactory.class)
+                .resolve(getCamelContextReference())
+                .orElseThrow(() -> new IllegalArgumentException("Cannot find RestRegistryFactory on classpath. "
+                        + "Add camel-rest to classpath."));
     }
 
     @Override
     protected EndpointRegistry<EndpointKey> createEndpointRegistry(Map<EndpointKey, Endpoint> endpoints) {
-        return new DefaultEndpointRegistry(this, endpoints);
+        return new DefaultEndpointRegistry(getCamelContextReference(), endpoints);
     }
 
     @Override
@@ -372,23 +410,24 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam
 
     @Override
     protected TransformerRegistry<TransformerKey> createTransformerRegistry() {
-        return new DefaultTransformerRegistry(this);
+        return new DefaultTransformerRegistry(getCamelContextReference());
     }
 
     @Override
     protected ValidatorRegistry<ValidatorKey> createValidatorRegistry() {
-        return new DefaultValidatorRegistry(this);
+        return new DefaultValidatorRegistry(getCamelContextReference());
     }
 
     @Override
     protected ReactiveExecutor createReactiveExecutor() {
-        return new DefaultReactiveExecutor();
+        throw new UnsupportedOperationException();
     }
 
     @Override
     public AsyncProcessor createMulticast(Collection<Processor> processors, ExecutorService executor,
             boolean shutdownExecutorService) {
-        return new MulticastProcessor(this, processors, null, true, executor, shutdownExecutorService,
+        return new MulticastProcessor(getCamelContextReference(), null, processors, null, true, executor,
+                shutdownExecutorService,
                 false, false, 0L, null, false, false);
     }
 
@@ -398,14 +437,33 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam
     }
 
     @Override
+    protected ComponentNameResolver createComponentNameResolver() {
+        return new DefaultComponentNameResolver();
+    }
+
+    @Override
+    public Processor createErrorHandler(Route route, Processor processor) throws Exception {
+        return ErrorHandlerReifier.reifier(route, route.getErrorHandlerFactory())
+                .createErrorHandler(processor);
+    }
+
+    @Override
+    protected RestBindingJaxbDataFormatFactory createRestBindingJaxbDataFormatFactory() {
+        return new BaseServiceResolver<>(RestBindingJaxbDataFormatFactory.FACTORY, RestBindingJaxbDataFormatFactory.class)
+                .resolve(getCamelContextReference())
+                .orElseThrow(() -> new IllegalArgumentException("Cannot find RestBindingJaxbDataFormatFactory on classpath. "
+                        + "Add camel-jaxb to classpath."));
+    }
+
+    @Override
     public void setTypeConverterRegistry(TypeConverterRegistry typeConverterRegistry) {
         super.setTypeConverterRegistry(typeConverterRegistry);
-
-        typeConverterRegistry.setCamelContext(this);
+        typeConverterRegistry.setCamelContext(getCamelContextReference());
     }
 
     @Override
     public void doInit() throws Exception {
+        LOG.info("Apache Camel {} (CamelContext: {}) is initializing", getVersion(), getName());
         super.doInit();
 
         forceLazyInitialization();
@@ -446,7 +504,8 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam
         if (instance != null) {
             clazz = instance.getClass();
         } else {
-            clazz = getFactoryFinder(DefaultDataFormatResolver.DATAFORMAT_RESOURCE_PATH).findClass(dataFormatName).orElse(null);
+            clazz = getFactoryFinder(DefaultDataFormatResolver.DATAFORMAT_RESOURCE_PATH).findClass(dataFormatName)
+                    .orElse(null);
             if (clazz == null) {
                 return null;
             }
@@ -511,11 +570,6 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam
     //
 
     @Override
-    public void startRouteDefinitions() throws Exception {
-        model.startRouteDefinitions();
-    }
-
-    @Override
     public List<RouteDefinition> getRouteDefinitions() {
         return model.getRouteDefinitions();
     }
@@ -576,7 +630,7 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam
     }
 
     @Override
-    public <T extends ProcessorDefinition> T getProcessorDefinition(String id, Class<T> type) {
+    public <T extends ProcessorDefinition<T>> T getProcessorDefinition(String id, Class<T> type) {
         return model.getProcessorDefinition(id, type);
     }
 
@@ -674,4 +728,43 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam
     public Function<RouteDefinition, Boolean> getRouteFilter() {
         return model.getRouteFilter();
     }
+
+    @Override
+    public Expression createExpression(ExpressionDefinition definition) {
+        return ExpressionReifier.reifier(this, definition).createExpression();
+    }
+
+    @Override
+    public Predicate createPredicate(ExpressionDefinition definition) {
+        return ExpressionReifier.reifier(this, definition).createPredicate();
+    }
+
+    @Override
+    public RouteDefinition adviceWith(RouteDefinition definition, AdviceWithRouteBuilder builder) throws Exception {
+        return RouteReifier.adviceWith(definition, this, builder);
+    }
+
+    @Override
+    public void registerValidator(ValidatorDefinition def) {
+        model.getValidators().add(def);
+        Validator validator = ValidatorReifier.reifier(this, def).createValidator();
+        getValidatorRegistry().put(createValidatorKey(def), validator);
+    }
+
+    private static ValueHolder<String> createValidatorKey(ValidatorDefinition def) {
+        return new ValidatorKey(new DataType(def.getType()));
+    }
+
+    @Override
+    public void registerTransformer(TransformerDefinition def) {
+        model.getTransformers().add(def);
+        Transformer transformer = TransformerReifier.reifier(this, def).createTransformer();
+        getTransformerRegistry().put(createTransformerKey(def), transformer);
+    }
+
+    private static ValueHolder<String> createTransformerKey(TransformerDefinition def) {
+        return ObjectHelper.isNotEmpty(def.getScheme()) ? new TransformerKey(def.getScheme())
+                : new TransformerKey(new DataType(def.getFromType()), new DataType(def.getToType()));
+    }
+
 }
diff --git a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastModel.java b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastModel.java
index 9be64bd..0718c43 100644
--- a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastModel.java
+++ b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastModel.java
@@ -17,209 +17,310 @@
 package org.apache.camel.quarkus.core;
 
 import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.function.Function;
 
 import org.apache.camel.CamelContext;
-import org.apache.camel.ErrorHandlerFactory;
 import org.apache.camel.ExtendedCamelContext;
-import org.apache.camel.NamedNode;
-import org.apache.camel.Navigate;
-import org.apache.camel.Processor;
-import org.apache.camel.Route;
-import org.apache.camel.Service;
-import org.apache.camel.impl.engine.AbstractCamelContext;
-import org.apache.camel.impl.engine.BaseRouteService;
-import org.apache.camel.impl.engine.DefaultRouteContext;
-import org.apache.camel.model.OnCompletionDefinition;
-import org.apache.camel.model.OnExceptionDefinition;
+import org.apache.camel.model.DataFormatDefinition;
+import org.apache.camel.model.HystrixConfigurationDefinition;
+import org.apache.camel.model.Model;
+import org.apache.camel.model.ModelCamelContext;
 import org.apache.camel.model.ProcessorDefinition;
+import org.apache.camel.model.ProcessorDefinitionHelper;
+import org.apache.camel.model.Resilience4jConfigurationDefinition;
 import org.apache.camel.model.RouteDefinition;
-import org.apache.camel.model.RouteDefinitionHelper;
-import org.apache.camel.processor.channel.DefaultChannel;
-import org.apache.camel.reifier.RouteReifier;
-import org.apache.camel.support.CamelContextHelper;
+import org.apache.camel.model.RouteFilters;
+import org.apache.camel.model.cloud.ServiceCallConfigurationDefinition;
+import org.apache.camel.model.rest.RestDefinition;
+import org.apache.camel.model.transformer.TransformerDefinition;
+import org.apache.camel.model.validator.ValidatorDefinition;
+
+public class FastModel implements Model {
+
+    private final CamelContext camelContext;
+
+    private final List<RouteDefinition> routeDefinitions = new ArrayList<>();
+    private final List<RestDefinition> restDefinitions = new ArrayList<>();
+    private Map<String, DataFormatDefinition> dataFormats = new HashMap<>();
+    private List<TransformerDefinition> transformers = new ArrayList<>();
+    private List<ValidatorDefinition> validators = new ArrayList<>();
+    private Map<String, ServiceCallConfigurationDefinition> serviceCallConfigurations = new ConcurrentHashMap<>();
+    private Map<String, HystrixConfigurationDefinition> hystrixConfigurations = new ConcurrentHashMap<>();
+    private Map<String, Resilience4jConfigurationDefinition> resilience4jConfigurations = new ConcurrentHashMap<>();
+    private Function<RouteDefinition, Boolean> routeFilter;
 
-public class FastModel extends BaseModel {
     public FastModel(CamelContext camelContext) {
-        super(camelContext);
+        this.camelContext = camelContext;
+    }
+
+    public CamelContext getCamelContext() {
+        return camelContext;
     }
 
     @Override
-    protected void start(RouteDefinition routeDefinition) throws Exception {
-        // indicate we are staring the route using this thread so
-        // we are able to query this if needed
-        CamelContext camelContext = getCamelContext();
-        AbstractCamelContext mcc = camelContext.adapt(AbstractCamelContext.class);
-        mcc.setStartingRoutes(true);
-        try {
-            String id = routeDefinition.idOrCreate(camelContext.adapt(ExtendedCamelContext.class).getNodeIdFactory());
-            FastRouteContext routeContext = new FastRouteContext(camelContext, routeDefinition, id);
-            Route route = new RouteReifier(routeContext, routeDefinition).createRoute();
-            FastRouteService routeService = createRouteService(route);
-            mcc.startRouteService(routeService, true);
-        } finally {
-            // we are done staring routes
-            mcc.setStartingRoutes(false);
-        }
-    }
-
-    private FastRouteService createRouteService(Route route) {
-        Integer startupOrder;
-        String description;
-        boolean autoStartup;
-        boolean contextScopedErrorHandler;
-        List<Service> routeScopedServices;
-
-        RouteDefinition definition = (RouteDefinition) route.getRouteContext().getRoute();
-        startupOrder = definition.getStartupOrder();
-        description = RouteDefinitionHelper.getRouteMessage(definition.toString());
-
-        if (!route.getCamelContext().isAutoStartup()) {
-            autoStartup = false;
-        } else if (definition.getAutoStartup() == null) {
-            // should auto startup by default
-            autoStartup = true;
-        } else {
-            Boolean isAutoStartup = CamelContextHelper.parseBoolean(route.getCamelContext(), definition.getAutoStartup());
-            autoStartup = isAutoStartup != null && isAutoStartup;
-        }
-
-        if (!definition.isContextScopedErrorHandler()) {
-            contextScopedErrorHandler = false;
-        } else if (definition.getErrorHandlerRef() != null) {
-            // if error handler ref is configured it may refer to a context scoped, so we need to check this first
-            // the XML DSL will configure error handlers using refs, so we need this additional test
-            ErrorHandlerFactory routeScoped = route.getRouteContext().getErrorHandlerFactory();
-            ErrorHandlerFactory contextScoped = route.getCamelContext().adapt(ExtendedCamelContext.class)
-                    .getErrorHandlerFactory();
-            contextScopedErrorHandler = contextScoped != null && routeScoped == contextScoped;
-        } else {
-            contextScopedErrorHandler = true;
-        }
-
-        List<Service> services = new ArrayList<>();
-        for (ProcessorDefinition<?> output : definition.getOutputs()) {
-            if (output instanceof OnExceptionDefinition) {
-                OnExceptionDefinition onExceptionDefinition = (OnExceptionDefinition) output;
-                if (onExceptionDefinition.isRouteScoped()) {
-                    Processor errorHandler = route.getRouteContext().getOnException(onExceptionDefinition.getId());
-                    if (errorHandler instanceof Service) {
-                        services.add((Service) errorHandler);
-                    }
-                }
-            } else if (output instanceof OnCompletionDefinition) {
-                OnCompletionDefinition onCompletionDefinition = (OnCompletionDefinition) output;
-                if (onCompletionDefinition.isRouteScoped()) {
-                    Processor onCompletionProcessor = route.getRouteContext().getOnCompletion(onCompletionDefinition.getId());
-                    if (onCompletionProcessor instanceof Service) {
-                        services.add((Service) onCompletionProcessor);
-                    }
-                }
-            }
+    public synchronized void addRouteDefinitions(Collection<RouteDefinition> routeDefinitions) throws Exception {
+        if (routeDefinitions == null || routeDefinitions.isEmpty()) {
+            return;
         }
-        routeScopedServices = services;
+        List<RouteDefinition> list = new ArrayList<>();
+        routeDefinitions.forEach(r -> {
+            if (routeFilter == null || routeFilter.apply(r)) {
+                list.add(r);
+            }
+        });
 
-        FastRouteService routeService = new FastRouteService(route);
-        routeService.setStartupOrder(startupOrder);
-        routeService.setDescription(description);
-        routeService.setAutoStartup(autoStartup);
-        routeService.setContextScopedErrorHandler(contextScopedErrorHandler);
-        routeService.setRouteScopedServices(routeScopedServices);
-        return routeService;
+        removeRouteDefinitions(list);
+        this.routeDefinitions.addAll(list);
+        if (shouldStartRoutes()) {
+            getCamelContext().adapt(ModelCamelContext.class).startRouteDefinitions(list);
+        }
     }
 
-    static class FastRouteContext extends DefaultRouteContext {
-
-        private NamedNode route;
+    @Override
+    public void addRouteDefinition(RouteDefinition routeDefinition) throws Exception {
+        addRouteDefinitions(Collections.singletonList(routeDefinition));
+    }
 
-        public FastRouteContext(CamelContext camelContext, NamedNode route, String routeId) {
-            super(camelContext, null, routeId);
-            this.route = route;
+    @Override
+    public synchronized void removeRouteDefinitions(Collection<RouteDefinition> routeDefinitions) throws Exception {
+        for (RouteDefinition routeDefinition : routeDefinitions) {
+            removeRouteDefinition(routeDefinition);
         }
+    }
 
-        @Override
-        public NamedNode getRoute() {
-            return route;
+    @Override
+    public synchronized void removeRouteDefinition(RouteDefinition routeDefinition) throws Exception {
+        RouteDefinition toBeRemoved = routeDefinition;
+        String id = routeDefinition.getId();
+        if (id != null) {
+            // remove existing route
+            camelContext.getRouteController().stopRoute(id);
+            camelContext.removeRoute(id);
+            toBeRemoved = getRouteDefinition(id);
         }
+        this.routeDefinitions.remove(toBeRemoved);
+    }
 
-        public void clearModel() {
-            clearModel(getRuntimeRoute().getProcessor());
-            route = null;
-        }
+    @Override
+    public synchronized List<RouteDefinition> getRouteDefinitions() {
+        return routeDefinitions;
+    }
 
-        @SuppressWarnings("unchecked")
-        private void clearModel(Processor nav) {
-            if (nav instanceof DefaultChannel) {
-                DefaultChannel channel = (DefaultChannel) nav;
-                channel.setDefinition(null);
-            }
-            if (nav instanceof Navigate) {
-                List<Processor> children = ((Navigate<Processor>) nav).next();
-                if (children != null) {
-                    for (Processor p : children) {
-                        clearModel(p);
-                    }
-                }
+    @Override
+    public synchronized RouteDefinition getRouteDefinition(String id) {
+        for (RouteDefinition route : routeDefinitions) {
+            if (route.idOrCreate(camelContext.adapt(ExtendedCamelContext.class).getNodeIdFactory()).equals(id)) {
+                return route;
             }
         }
-
+        return null;
     }
 
-    static class FastRouteService extends BaseRouteService {
+    @Override
+    public synchronized List<RestDefinition> getRestDefinitions() {
+        return restDefinitions;
+    }
 
-        private Integer startupOrder;
-        private String description;
-        private boolean autoStartup;
-        private boolean contextScopedErrorHandler;
-        private List<Service> routeScopedServices;
+    @Override
+    public synchronized void addRestDefinitions(Collection<RestDefinition> restDefinitions, boolean addToRoutes)
+            throws Exception {
+        if (restDefinitions == null || restDefinitions.isEmpty()) {
+            return;
+        }
 
-        public FastRouteService(Route route) {
-            super(route);
+        this.restDefinitions.addAll(restDefinitions);
+        if (addToRoutes) {
+            // rests are also routes so need to add them there too
+            for (final RestDefinition restDefinition : restDefinitions) {
+                List<RouteDefinition> routeDefinitions = restDefinition.asRouteDefinition(camelContext);
+                addRouteDefinitions(routeDefinitions);
+            }
         }
+    }
 
-        public void setStartupOrder(Integer startupOrder) {
-            this.startupOrder = startupOrder;
+    @Override
+    public ServiceCallConfigurationDefinition getServiceCallConfiguration(String serviceName) {
+        if (serviceName == null) {
+            serviceName = "";
         }
 
-        public void setDescription(String description) {
-            this.description = description;
+        return serviceCallConfigurations.get(serviceName);
+    }
+
+    @Override
+    public void setServiceCallConfiguration(ServiceCallConfigurationDefinition configuration) {
+        serviceCallConfigurations.put("", configuration);
+    }
+
+    @Override
+    public void setServiceCallConfigurations(List<ServiceCallConfigurationDefinition> configurations) {
+        if (configurations != null) {
+            for (ServiceCallConfigurationDefinition configuration : configurations) {
+                serviceCallConfigurations.put(configuration.getId(), configuration);
+            }
         }
+    }
 
-        public void setAutoStartup(boolean autoStartup) {
-            this.autoStartup = autoStartup;
+    @Override
+    public void addServiceCallConfiguration(String serviceName, ServiceCallConfigurationDefinition configuration) {
+        serviceCallConfigurations.put(serviceName, configuration);
+    }
+
+    @Override
+    public HystrixConfigurationDefinition getHystrixConfiguration(String id) {
+        if (id == null) {
+            id = "";
         }
 
-        public void setContextScopedErrorHandler(boolean contextScopedErrorHandler) {
-            this.contextScopedErrorHandler = contextScopedErrorHandler;
+        return hystrixConfigurations.get(id);
+    }
+
+    @Override
+    public void setHystrixConfiguration(HystrixConfigurationDefinition configuration) {
+        hystrixConfigurations.put("", configuration);
+    }
+
+    @Override
+    public void setHystrixConfigurations(List<HystrixConfigurationDefinition> configurations) {
+        if (configurations != null) {
+            for (HystrixConfigurationDefinition configuration : configurations) {
+                hystrixConfigurations.put(configuration.getId(), configuration);
+            }
         }
+    }
 
-        public void setRouteScopedServices(List<Service> routeScopedServices) {
-            this.routeScopedServices = routeScopedServices;
+    @Override
+    public void addHystrixConfiguration(String id, HystrixConfigurationDefinition configuration) {
+        hystrixConfigurations.put(id, configuration);
+    }
+
+    @Override
+    public Resilience4jConfigurationDefinition getResilience4jConfiguration(String id) {
+        if (id == null) {
+            id = "";
         }
 
-        @Override
-        public Integer getStartupOrder() {
-            return startupOrder;
+        return resilience4jConfigurations.get(id);
+    }
+
+    @Override
+    public void setResilience4jConfiguration(Resilience4jConfigurationDefinition configuration) {
+        resilience4jConfigurations.put("", configuration);
+    }
+
+    @Override
+    public void setResilience4jConfigurations(List<Resilience4jConfigurationDefinition> configurations) {
+        if (configurations != null) {
+            for (Resilience4jConfigurationDefinition configuration : configurations) {
+                resilience4jConfigurations.put(configuration.getId(), configuration);
+            }
         }
+    }
+
+    @Override
+    public void addResilience4jConfiguration(String id, Resilience4jConfigurationDefinition configuration) {
+        resilience4jConfigurations.put(id, configuration);
+    }
 
-        @Override
-        protected String getRouteDescription() {
-            return description;
+    @Override
+    public DataFormatDefinition resolveDataFormatDefinition(String name) {
+        // lookup type and create the data format from it
+        DataFormatDefinition type = lookup(camelContext, name, DataFormatDefinition.class);
+        if (type == null && getDataFormats() != null) {
+            type = getDataFormats().get(name);
         }
+        return type;
+    }
 
-        @Override
-        public boolean isAutoStartup() {
-            return autoStartup;
+    @Override
+    public ProcessorDefinition<?> getProcessorDefinition(String id) {
+        for (RouteDefinition route : getRouteDefinitions()) {
+            Iterator<ProcessorDefinition> it = ProcessorDefinitionHelper.filterTypeInOutputs(route.getOutputs(),
+                    ProcessorDefinition.class);
+            while (it.hasNext()) {
+                ProcessorDefinition<?> proc = it.next();
+                if (id.equals(proc.getId())) {
+                    return proc;
+                }
+            }
         }
+        return null;
+    }
 
-        @Override
-        public boolean isContextScopedErrorHandler() {
-            return contextScopedErrorHandler;
+    @Override
+    public <T extends ProcessorDefinition<T>> T getProcessorDefinition(String id, Class<T> type) {
+        ProcessorDefinition<?> answer = getProcessorDefinition(id);
+        if (answer != null) {
+            return type.cast(answer);
         }
+        return null;
+    }
+
+    @Override
+    public void setDataFormats(Map<String, DataFormatDefinition> dataFormats) {
+        this.dataFormats = dataFormats;
+    }
+
+    @Override
+    public Map<String, DataFormatDefinition> getDataFormats() {
+        return dataFormats;
+    }
+
+    @Override
+    public void setTransformers(List<TransformerDefinition> transformers) {
+        this.transformers = transformers;
+    }
+
+    @Override
+    public List<TransformerDefinition> getTransformers() {
+        return transformers;
+    }
+
+    @Override
+    public void setValidators(List<ValidatorDefinition> validators) {
+        this.validators = validators;
+    }
+
+    @Override
+    public List<ValidatorDefinition> getValidators() {
+        return validators;
+    }
+
+    @Override
+    public void setRouteFilterPattern(String include, String exclude) {
+        setRouteFilter(RouteFilters.filterByPattern(include, exclude));
+    }
+
+    @Override
+    public Function<RouteDefinition, Boolean> getRouteFilter() {
+        return routeFilter;
+    }
 
-        @Override
-        protected void doGetRouteScopedServices(List<Service> services) {
-            services.addAll(routeScopedServices);
+    @Override
+    public void setRouteFilter(Function<RouteDefinition, Boolean> routeFilter) {
+        this.routeFilter = routeFilter;
+    }
+
+    /**
+     * Should we start newly added routes?
+     */
+    protected boolean shouldStartRoutes() {
+        return camelContext.isStarted() && !camelContext.isStarting();
+    }
+
+    protected static <T> T lookup(CamelContext context, String ref, Class<T> type) {
+        try {
+            return context.getRegistry().lookupByNameAndType(ref, type);
+        } catch (Exception e) {
+            // need to ignore not same type and return it as null
+            return null;
         }
     }
 
diff --git a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastTypeConverter.java b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastTypeConverter.java
index 178250f..641e13d 100644
--- a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastTypeConverter.java
+++ b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastTypeConverter.java
@@ -38,6 +38,5 @@ public class FastTypeConverter extends DefaultTypeConverter {
 
     @Override
     public void loadCoreAndFastTypeConverters() throws Exception {
-        throw new UnsupportedOperationException();
     }
 }
diff --git a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/Flags.java b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/Flags.java
index a62c51d..d6c3c32 100644
--- a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/Flags.java
+++ b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/Flags.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.quarkus.core;
 
+import java.util.Optional;
 import java.util.function.BooleanSupplier;
 
 import org.eclipse.microprofile.config.ConfigProvider;
@@ -25,7 +26,9 @@ public final class Flags {
     }
 
     private static boolean asBoolean(String key, boolean defaultValue) {
-        return ConfigProvider.getConfig().getOptionalValue(key, Boolean.class).orElse(defaultValue);
+        Optional<Boolean> b = ConfigProvider.getConfig().getOptionalValue(key, Boolean.class);
+        System.out.println(key + ": " + b + " (default: " + defaultValue + ")");
+        return b.orElse(defaultValue);
     }
 
     public static final class MainEnabled implements BooleanSupplier {
@@ -35,6 +38,13 @@ public final class Flags {
         }
     }
 
+    public static final class LightweightEnabled implements BooleanSupplier {
+        @Override
+        public boolean getAsBoolean() {
+            return asBoolean("quarkus.camel.main.lightweight", true);
+        }
+    }
+
     public static final class RoutesDiscoveryEnabled implements BooleanSupplier {
         @Override
         public boolean getAsBoolean() {
diff --git a/extensions-core/reactive-executor/deployment/src/main/java/org/apache/camel/quarkus/reactive/executor/deployment/BuildProcessor.java b/extensions-core/reactive-executor/deployment/src/main/java/org/apache/camel/quarkus/reactive/executor/deployment/BuildProcessor.java
index 77020e9..8a3a949 100644
--- a/extensions-core/reactive-executor/deployment/src/main/java/org/apache/camel/quarkus/reactive/executor/deployment/BuildProcessor.java
+++ b/extensions-core/reactive-executor/deployment/src/main/java/org/apache/camel/quarkus/reactive/executor/deployment/BuildProcessor.java
@@ -25,7 +25,7 @@ import org.apache.camel.quarkus.core.deployment.CamelReactiveExecutorBuildItem;
 import org.apache.camel.quarkus.reactive.executor.ReactiveExecutorRecorder;
 
 public class BuildProcessor {
-    @Record(value = ExecutionTime.RUNTIME_INIT, optional = true)
+    @Record(value = ExecutionTime.STATIC_INIT, optional = true)
     @BuildStep(onlyIf = Flags.MainEnabled.class)
     CamelReactiveExecutorBuildItem reactiveExecutor(ReactiveExecutorRecorder recorder, VertxBuildItem vertx) {
         return new CamelReactiveExecutorBuildItem(recorder.createReactiveExecutor(vertx.getVertx()));
diff --git a/extensions-core/xml-jaxb/runtime/src/main/java/org/apache/camel/quarkus/component/xml/jaxb/XmlJaxbRecorder.java b/extensions-core/xml-jaxb/runtime/src/main/java/org/apache/camel/quarkus/component/xml/jaxb/XmlJaxbRecorder.java
index 3cb9e69..260da00 100644
--- a/extensions-core/xml-jaxb/runtime/src/main/java/org/apache/camel/quarkus/component/xml/jaxb/XmlJaxbRecorder.java
+++ b/extensions-core/xml-jaxb/runtime/src/main/java/org/apache/camel/quarkus/component/xml/jaxb/XmlJaxbRecorder.java
@@ -21,10 +21,10 @@ import javax.xml.bind.JAXBException;
 import io.quarkus.runtime.RuntimeValue;
 import io.quarkus.runtime.annotations.Recorder;
 import org.apache.camel.RuntimeCamelException;
-import org.apache.camel.impl.DefaultModelJAXBContextFactory;
 import org.apache.camel.spi.ModelJAXBContextFactory;
 import org.apache.camel.spi.ModelToXMLDumper;
 import org.apache.camel.spi.XMLRoutesDefinitionLoader;
+import org.apache.camel.xml.jaxb.DefaultModelJAXBContextFactory;
 import org.apache.camel.xml.jaxb.JaxbModelToXMLDumper;
 import org.apache.camel.xml.jaxb.JaxbXMLRoutesDefinitionLoader;
 import org.graalvm.nativeimage.ImageInfo;
diff --git a/extensions/kotlin/runtime/src/main/kotlin/org/apache/camel/quarkus/kotlin/RoutesDSL.kt b/extensions/kotlin/runtime/src/main/kotlin/org/apache/camel/quarkus/kotlin/RoutesDSL.kt
index 1412771..a4bae25 100644
--- a/extensions/kotlin/runtime/src/main/kotlin/org/apache/camel/quarkus/kotlin/RoutesDSL.kt
+++ b/extensions/kotlin/runtime/src/main/kotlin/org/apache/camel/quarkus/kotlin/RoutesDSL.kt
@@ -26,7 +26,7 @@ import org.apache.camel.builder.RouteBuilder
  *
  * ```
  * fun myRoutes() = routes {
- *     from("timer:foo?period=1s")
+ *     from("timer:foo?period=1000")
  *         .log("\${body}")
  * }
  * ```
diff --git a/extensions/microprofile-health/deployment/src/main/java/org/apache/camel/quarkus/component/microprofile/health/deployment/MicroProfileHealthProcessor.java b/extensions/microprofile-health/deployment/src/main/java/org/apache/camel/quarkus/component/microprofile/health/deployment/MicroProfileHealthProcessor.java
index 8b04405..c7f7d84 100644
--- a/extensions/microprofile-health/deployment/src/main/java/org/apache/camel/quarkus/component/microprofile/health/deployment/MicroProfileHealthProcessor.java
+++ b/extensions/microprofile-health/deployment/src/main/java/org/apache/camel/quarkus/component/microprofile/health/deployment/MicroProfileHealthProcessor.java
@@ -25,6 +25,8 @@ import javax.enterprise.inject.Vetoed;
 import io.quarkus.arc.deployment.AnnotationsTransformerBuildItem;
 import io.quarkus.deployment.annotations.BuildProducer;
 import io.quarkus.deployment.annotations.BuildStep;
+import io.quarkus.deployment.annotations.ExecutionTime;
+import io.quarkus.deployment.annotations.Record;
 import io.quarkus.deployment.builditem.CombinedIndexBuildItem;
 import io.quarkus.deployment.builditem.FeatureBuildItem;
 import org.apache.camel.health.HealthCheck;
@@ -58,6 +60,7 @@ class MicroProfileHealthProcessor {
         return new FeatureBuildItem(FEATURE);
     }
 
+    @Record(ExecutionTime.STATIC_INIT)
     @BuildStep
     List<CamelBeanBuildItem> camelHealthDiscovery(
             CombinedIndexBuildItem combinedIndex,
diff --git a/extensions/qute/component/src/generated/java/org/apache/camel/component/qute/QuteComponentConfigurer.java b/extensions/qute/component/src/generated/java/org/apache/camel/component/qute/QuteComponentConfigurer.java
index 37d5e07..0e903b1 100644
--- a/extensions/qute/component/src/generated/java/org/apache/camel/component/qute/QuteComponentConfigurer.java
+++ b/extensions/qute/component/src/generated/java/org/apache/camel/component/qute/QuteComponentConfigurer.java
@@ -1,29 +1,55 @@
 /* Generated by camel build tools - do NOT edit this file! */
 package org.apache.camel.component.qute;
 
+import java.util.Map;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.spi.GeneratedPropertyConfigurer;
+import org.apache.camel.spi.PropertyConfigurerGetter;
+import org.apache.camel.util.CaseInsensitiveMap;
 import org.apache.camel.support.component.PropertyConfigurerSupport;
 
 /**
  * Generated by camel build tools - do NOT edit this file!
  */
 @SuppressWarnings("unchecked")
-public class QuteComponentConfigurer extends PropertyConfigurerSupport implements GeneratedPropertyConfigurer {
+public class QuteComponentConfigurer extends PropertyConfigurerSupport implements GeneratedPropertyConfigurer, PropertyConfigurerGetter {
 
     @Override
     public boolean configure(CamelContext camelContext, Object obj, String name, Object value, boolean ignoreCase) {
         QuteComponent target = (QuteComponent) obj;
         switch (ignoreCase ? name.toLowerCase() : name) {
-        case "lazystartproducer":
-        case "lazyStartProducer": target.setLazyStartProducer(property(camelContext, boolean.class, value)); return true;
         case "basicpropertybinding":
         case "basicPropertyBinding": target.setBasicPropertyBinding(property(camelContext, boolean.class, value)); return true;
+        case "lazystartproducer":
+        case "lazyStartProducer": target.setLazyStartProducer(property(camelContext, boolean.class, value)); return true;
         case "quteengine":
         case "quteEngine": target.setQuteEngine(property(camelContext, io.quarkus.qute.Engine.class, value)); return true;
         default: return false;
         }
     }
 
+    @Override
+    public Map<String, Object> getAllOptions(Object target) {
+        Map<String, Object> answer = new CaseInsensitiveMap();
+        answer.put("basicPropertyBinding", boolean.class);
+        answer.put("lazyStartProducer", boolean.class);
+        answer.put("quteEngine", io.quarkus.qute.Engine.class);
+        return answer;
+    }
+
+    @Override
+    public Object getOptionValue(Object obj, String name, boolean ignoreCase) {
+        QuteComponent target = (QuteComponent) obj;
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "basicpropertybinding":
+        case "basicPropertyBinding": return target.isBasicPropertyBinding();
+        case "lazystartproducer":
+        case "lazyStartProducer": return target.isLazyStartProducer();
+        case "quteengine":
+        case "quteEngine": return target.getQuteEngine();
+        default: return null;
+        }
+    }
 }
 
diff --git a/extensions/qute/component/src/generated/java/org/apache/camel/component/qute/QuteEndpointConfigurer.java b/extensions/qute/component/src/generated/java/org/apache/camel/component/qute/QuteEndpointConfigurer.java
index 86093a9..059e63e 100644
--- a/extensions/qute/component/src/generated/java/org/apache/camel/component/qute/QuteEndpointConfigurer.java
+++ b/extensions/qute/component/src/generated/java/org/apache/camel/component/qute/QuteEndpointConfigurer.java
@@ -1,31 +1,61 @@
 /* Generated by camel build tools - do NOT edit this file! */
 package org.apache.camel.component.qute;
 
+import java.util.Map;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.spi.GeneratedPropertyConfigurer;
+import org.apache.camel.spi.PropertyConfigurerGetter;
+import org.apache.camel.util.CaseInsensitiveMap;
 import org.apache.camel.support.component.PropertyConfigurerSupport;
 
 /**
  * Generated by camel build tools - do NOT edit this file!
  */
 @SuppressWarnings("unchecked")
-public class QuteEndpointConfigurer extends PropertyConfigurerSupport implements GeneratedPropertyConfigurer {
+public class QuteEndpointConfigurer extends PropertyConfigurerSupport implements GeneratedPropertyConfigurer, PropertyConfigurerGetter {
 
     @Override
     public boolean configure(CamelContext camelContext, Object obj, String name, Object value, boolean ignoreCase) {
         QuteEndpoint target = (QuteEndpoint) obj;
         switch (ignoreCase ? name.toLowerCase() : name) {
+        case "basicpropertybinding":
+        case "basicPropertyBinding": target.setBasicPropertyBinding(property(camelContext, boolean.class, value)); return true;
         case "contentcache":
         case "contentCache": target.setContentCache(property(camelContext, boolean.class, value)); return true;
         case "encoding": target.setEncoding(property(camelContext, java.lang.String.class, value)); return true;
         case "lazystartproducer":
         case "lazyStartProducer": target.setLazyStartProducer(property(camelContext, boolean.class, value)); return true;
-        case "basicpropertybinding":
-        case "basicPropertyBinding": target.setBasicPropertyBinding(property(camelContext, boolean.class, value)); return true;
         case "synchronous": target.setSynchronous(property(camelContext, boolean.class, value)); return true;
         default: return false;
         }
     }
 
+    @Override
+    public Map<String, Object> getAllOptions(Object target) {
+        Map<String, Object> answer = new CaseInsensitiveMap();
+        answer.put("basicPropertyBinding", boolean.class);
+        answer.put("contentCache", boolean.class);
+        answer.put("encoding", java.lang.String.class);
+        answer.put("lazyStartProducer", boolean.class);
+        answer.put("synchronous", boolean.class);
+        return answer;
+    }
+
+    @Override
+    public Object getOptionValue(Object obj, String name, boolean ignoreCase) {
+        QuteEndpoint target = (QuteEndpoint) obj;
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "basicpropertybinding":
+        case "basicPropertyBinding": return target.isBasicPropertyBinding();
+        case "contentcache":
+        case "contentCache": return target.isContentCache();
+        case "encoding": return target.getEncoding();
+        case "lazystartproducer":
+        case "lazyStartProducer": return target.isLazyStartProducer();
+        case "synchronous": return target.isSynchronous();
+        default: return null;
+        }
+    }
 }
 
diff --git a/pom.xml b/pom.xml
index a03c24f..21cb303 100644
--- a/pom.xml
+++ b/pom.xml
@@ -44,7 +44,7 @@
         <ahc.version>2.10.4</ahc.version>
         <awssdk1.version>1.11.714</awssdk1.version>
         <awssdk1-swf-libs.version>1.11.22</awssdk1-swf-libs.version>
-        <awssdk2.version>2.10.67</awssdk2.version>
+        <awssdk2.version>2.11.4</awssdk2.version>
         <camel.version>3.2.0-SNAPSHOT</camel.version>
         <freemarker.version>2.3.30</freemarker.version>
         <google-http-client.version>1.22.0</google-http-client.version>
diff --git a/poms/bom/pom.xml b/poms/bom/pom.xml
index 91a64b7..10436ab 100644
--- a/poms/bom/pom.xml
+++ b/poms/bom/pom.xml
@@ -1886,6 +1886,21 @@
                 <version>${jackson.version}</version>
             </dependency>
             <dependency>
+                <groupId>com.google.api.grpc</groupId>
+                <artifactId>proto-google-common-protos</artifactId>
+                <version>1.17.0</version>
+            </dependency>
+            <dependency>
+                <groupId>com.google.auth</groupId>
+                <artifactId>google-auth-library-credentials</artifactId>
+                <version>0.19.0</version>
+            </dependency>
+            <dependency>
+                <groupId>com.google.auth</groupId>
+                <artifactId>google-auth-library-oauth2-http</artifactId>
+                <version>0.19.0</version>
+            </dependency>
+            <dependency>
                 <groupId>com.google.code.gson</groupId>
                 <artifactId>gson</artifactId>
                 <version>${gson.version}</version>
@@ -1907,6 +1922,11 @@
                 </exclusions>
             </dependency>
             <dependency>
+                <groupId>com.google.protobuf</groupId>
+                <artifactId>protobuf-java</artifactId>
+                <version>3.11.0</version>
+            </dependency>
+            <dependency>
                 <groupId>com.orbitz.consul</groupId>
                 <artifactId>consul-client</artifactId>
                 <version>${consul-client.version}</version>
@@ -1959,6 +1979,11 @@
                 <version>${ahc.version}</version>
             </dependency>
             <dependency>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>animal-sniffer-annotations</artifactId>
+                <version>1.18</version>
+            </dependency>
+            <dependency>
                 <groupId>org.codehaus.woodstox</groupId>
                 <artifactId>stax2-api</artifactId>
                 <version>${stax2.version}</version>
@@ -2015,6 +2040,16 @@
                 <version>${snakeyaml.version}</version>
             </dependency>
             <dependency>
+                <groupId>org.threeten</groupId>
+                <artifactId>threetenbp</artifactId>
+                <version>1.4.0</version>
+            </dependency>
+            <dependency>
+                <groupId>software.amazon.awssdk</groupId>
+                <artifactId>annotations</artifactId>
+                <version>${awssdk2.version}</version><!-- override the version set in the quarkus BOM -->
+            </dependency>
+            <dependency>
                 <groupId>software.amazon.awssdk</groupId>
                 <artifactId>apache-client</artifactId>
                 <version>${awssdk2.version}</version><!-- override the version set in the quarkus BOM -->
@@ -2026,6 +2061,11 @@
             </dependency>
             <dependency>
                 <groupId>software.amazon.awssdk</groupId>
+                <artifactId>http-client-spi</artifactId>
+                <version>${awssdk2.version}</version><!-- override the version set in the quarkus BOM -->
+            </dependency>
+            <dependency>
+                <groupId>software.amazon.awssdk</groupId>
                 <artifactId>netty-nio-client</artifactId>
                 <version>${awssdk2.version}</version><!-- override the version set in the quarkus BOM -->
             </dependency>
@@ -2035,6 +2075,11 @@
                 <version>${awssdk2.version}</version><!-- override the version set in the quarkus BOM -->
             </dependency>
             <dependency>
+                <groupId>software.amazon.awssdk</groupId>
+                <artifactId>utils</artifactId>
+                <version>${awssdk2.version}</version><!-- override the version set in the quarkus BOM -->
+            </dependency>
+            <dependency>
                 <groupId>xalan</groupId>
                 <artifactId>xalan</artifactId>
                 <version>${xalan.version}</version>


[camel-quarkus] 01/02: Upgrade to Camel 3.2.0 - WIP

Posted by gn...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit ac490ece659bbfa698698cb99add2e5e513a473b
Author: James Netherton <ja...@gmail.com>
AuthorDate: Thu Feb 27 11:29:36 2020 +0000

    Upgrade to Camel 3.2.0 - WIP
---
 .../camel/quarkus/component/braintree/graal/BraintreeRecorder.java   | 5 ++++-
 .../quarkus/component/reactive/streams/ReactiveStreamsRecorder.java  | 2 +-
 .../braintree/src/main/resources/application.properties              | 1 -
 pom.xml                                                              | 2 +-
 4 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/extensions/braintree/runtime/src/main/java/org/apache/camel/quarkus/component/braintree/graal/BraintreeRecorder.java b/extensions/braintree/runtime/src/main/java/org/apache/camel/quarkus/component/braintree/graal/BraintreeRecorder.java
index cb87a09..3647646 100644
--- a/extensions/braintree/runtime/src/main/java/org/apache/camel/quarkus/component/braintree/graal/BraintreeRecorder.java
+++ b/extensions/braintree/runtime/src/main/java/org/apache/camel/quarkus/component/braintree/graal/BraintreeRecorder.java
@@ -19,6 +19,7 @@ package org.apache.camel.quarkus.component.braintree.graal;
 import io.quarkus.runtime.RuntimeValue;
 import io.quarkus.runtime.annotations.Recorder;
 import org.apache.camel.component.braintree.BraintreeComponent;
+import org.apache.camel.component.braintree.BraintreeConfiguration;
 
 @Recorder
 public class BraintreeRecorder {
@@ -30,7 +31,9 @@ public class BraintreeRecorder {
      */
     public RuntimeValue<BraintreeComponent> configureBraintreeComponent() {
         BraintreeComponent component = new BraintreeComponent();
-        component.setLogHandlerEnabled(false);
+        BraintreeConfiguration configuration = new BraintreeConfiguration();
+        configuration.setLogHandlerEnabled(false);
+        component.setConfiguration(configuration);
         return new RuntimeValue<>(component);
     }
 }
diff --git a/extensions/reactive-streams/runtime/src/main/java/org/apache/camel/quarkus/component/reactive/streams/ReactiveStreamsRecorder.java b/extensions/reactive-streams/runtime/src/main/java/org/apache/camel/quarkus/component/reactive/streams/ReactiveStreamsRecorder.java
index 2e731d3..677c798 100644
--- a/extensions/reactive-streams/runtime/src/main/java/org/apache/camel/quarkus/component/reactive/streams/ReactiveStreamsRecorder.java
+++ b/extensions/reactive-streams/runtime/src/main/java/org/apache/camel/quarkus/component/reactive/streams/ReactiveStreamsRecorder.java
@@ -66,7 +66,7 @@ public class ReactiveStreamsRecorder {
                 if (reactiveStreamService == null) {
                     this.reactiveStreamService = reactiveStreamServiceFactory.newInstance(
                             getCamelContext(),
-                            getInternalEngineConfiguration());
+                            getReactiveStreamsEngineConfiguration());
 
                     try {
                         // Start the service and add it to the Camel context to expose managed attributes
diff --git a/integration-tests/braintree/src/main/resources/application.properties b/integration-tests/braintree/src/main/resources/application.properties
index 41539a4..0f2c1c2 100644
--- a/integration-tests/braintree/src/main/resources/application.properties
+++ b/integration-tests/braintree/src/main/resources/application.properties
@@ -15,7 +15,6 @@
 ## limitations under the License.
 ## ---------------------------------------------------------------------------
 
-camel.component.braintree.configuration = #class:org.apache.camel.component.braintree.BraintreeConfiguration
 camel.component.braintree.configuration.environment=SANDBOX
 camel.component.braintree.configuration.merchantId={{env:BRAINTREE_MERCHANT_ID}}
 camel.component.braintree.configuration.publicKey={{env:BRAINTREE_PUBLIC_KEY}}
diff --git a/pom.xml b/pom.xml
index 216bf4c..a03c24f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -45,7 +45,7 @@
         <awssdk1.version>1.11.714</awssdk1.version>
         <awssdk1-swf-libs.version>1.11.22</awssdk1-swf-libs.version>
         <awssdk2.version>2.10.67</awssdk2.version>
-        <camel.version>3.1.0</camel.version>
+        <camel.version>3.2.0-SNAPSHOT</camel.version>
         <freemarker.version>2.3.30</freemarker.version>
         <google-http-client.version>1.22.0</google-http-client.version>
         <guava.version>26.0-jre</guava.version>