You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by lb...@apache.org on 2019/08/21 11:54:41 UTC

[camel-quarkus] branch master updated: Modularize recorder and processors

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

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


The following commit(s) were added to refs/heads/master by this push:
     new ba39065  Modularize recorder and processors
ba39065 is described below

commit ba3906558d0d0a1e8dee9299862bce8106162dfe
Author: lburgazzoli <lb...@gmail.com>
AuthorDate: Wed Aug 21 09:12:06 2019 +0200

    Modularize recorder and processors
---
 ...CamelInitProcessor.java => BuildProcessor.java} | 66 +++++++++----------
 .../quarkus/core/deployment/CamelSupport.java      | 10 ++-
 .../camel/quarkus/core/deployment/Feature.java}    | 16 ++---
 .../core/deployment/HotDeploymentProcessor.java}   | 22 +++++--
 ...CamelProcessor.java => SubstrateProcessor.java} | 76 +---------------------
 .../quarkus/core/deployment/XmlProcessor.java      | 48 ++++++++++++++
 .../camel/quarkus/core/runtime/CamelConfig.java    |  1 -
 .../camel/quarkus/core/runtime/CamelRecorder.java  | 75 +++++++++++----------
 .../{graal => }/InitAtBuildTimeSelector.java       |  2 +-
 .../core/runtime/{graal => }/JaxbDisabled.java     |  2 +-
 ..._org_apache_camel_reifier_ProcessorReifier.java |  1 +
 ...camel_reifier_dataformat_DataFormatReifier.java |  1 +
 ...l_reifier_loadbalancer_LoadBalancerReifier.java |  1 +
 ...mel_reifier_transformer_TransformerReifier.java |  1 +
 ...e_camel_reifier_validator_ValidatorReifier.java |  1 +
 15 files changed, 155 insertions(+), 168 deletions(-)

diff --git a/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelInitProcessor.java b/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/BuildProcessor.java
similarity index 82%
rename from extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelInitProcessor.java
rename to extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/BuildProcessor.java
index ab6aaf3..4fbf9cb 100644
--- a/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelInitProcessor.java
+++ b/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/BuildProcessor.java
@@ -27,7 +27,6 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.Properties;
 import java.util.Set;
-import java.util.stream.Collectors;
 import java.util.stream.Stream;
 import javax.inject.Inject;
 
@@ -42,7 +41,6 @@ import io.quarkus.deployment.annotations.Record;
 import io.quarkus.deployment.builditem.ApplicationArchivesBuildItem;
 import io.quarkus.deployment.builditem.CombinedIndexBuildItem;
 import io.quarkus.deployment.builditem.ShutdownContextBuildItem;
-import io.quarkus.deployment.recording.RecorderContext;
 import io.quarkus.runtime.RuntimeValue;
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.AdviceWithRouteBuilder;
@@ -60,8 +58,8 @@ import org.jboss.jandex.DotName;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-class CamelInitProcessor {
-    private static final Logger LOGGER = LoggerFactory.getLogger(CamelInitProcessor.class);
+class BuildProcessor {
+    private static final Logger LOGGER = LoggerFactory.getLogger(BuildProcessor.class);
 
     @Inject
     ApplicationArchivesBuildItem applicationArchivesBuildItem;
@@ -71,9 +69,8 @@ class CamelInitProcessor {
     BuildTime buildTimeConfig;
 
     @Record(ExecutionTime.STATIC_INIT)
-    @BuildStep(applicationArchiveMarkers = { CamelSupport.CAMEL_SERVICE_BASE_PATH, CamelSupport.CAMEL_ROOT_PACKAGE_DIRECTORY })
-    CamelRuntimeBuildItem createInitTask(
-            RecorderContext recorderContext,
+    @BuildStep
+    CamelRuntimeBuildItem create(
             CamelRecorder recorder,
             List<CamelRegistryBuildItem> registryItems,
             BuildProducer<RuntimeBeanBuildItem> runtimeBeans) {
@@ -89,14 +86,12 @@ class CamelInitProcessor {
             }
         }
 
+
         RuntimeRegistry registry = new RuntimeRegistry();
-        final List<RuntimeValue<?>> builders;
+        RuntimeValue<CamelRuntime> camelRuntime = recorder.create(registry, properties);
+
         if (buildTimeConfig.deferInitPhase) {
-            builders = getBuildTimeRouteBuilderClasses()
-                .map(recorderContext::newInstance)
-                .collect(Collectors.toList());
-        } else {
-            builders = new ArrayList<>();
+            getBuildTimeRouteBuilderClasses().forEach(b -> recorder.addBuilder(camelRuntime, b));
         }
 
         services().filter(
@@ -107,30 +102,33 @@ class CamelInitProcessor {
             si -> {
                 LOGGER.debug("Binding camel service {} with type {}", si.name, si.type);
 
-                registry.bind(
+                recorder.bind(
+                    camelRuntime,
                     si.name,
-                    si.type,
-                    recorderContext.newInstance(si.type.getName())
+                    si.type
                 );
             }
         );
 
-        RuntimeValue<CamelRuntime> camelRuntime = recorder.create(registry, properties, builders, buildTimeConfig);
-
-        runtimeBeans.produce(RuntimeBeanBuildItem.builder(CamelRuntime.class).setRuntimeValue(camelRuntime).build());
-
         for (CamelRegistryBuildItem item: registryItems) {
             LOGGER.debug("Binding item with name: {}, type {}", item.getName(), item.getType());
-            recorder.bind(camelRuntime, item.getName(), item.getType(), item.getValue());
+
+            recorder.bind(
+                camelRuntime,
+                item.getName(),
+                item.getType(),
+                item.getValue()
+            );
         }
 
+        runtimeBeans.produce(RuntimeBeanBuildItem.builder(CamelRuntime.class).setRuntimeValue(camelRuntime).build());
+
         return new CamelRuntimeBuildItem(camelRuntime);
     }
 
     @Record(ExecutionTime.STATIC_INIT)
-    @BuildStep(applicationArchiveMarkers = { CamelSupport.CAMEL_SERVICE_BASE_PATH, CamelSupport.CAMEL_ROOT_PACKAGE_DIRECTORY })
-    AdditionalBeanBuildItem createCamelProducers(
-            RecorderContext recorderContext,
+    @BuildStep
+    AdditionalBeanBuildItem createProducers(
             CamelRuntimeBuildItem runtime,
             CamelRecorder recorder,
             BuildProducer<BeanContainerListenerBuildItem> listeners) {
@@ -141,24 +139,22 @@ class CamelInitProcessor {
     }
 
     @Record(ExecutionTime.STATIC_INIT)
-    @BuildStep(applicationArchiveMarkers = { CamelSupport.CAMEL_SERVICE_BASE_PATH, CamelSupport.CAMEL_ROOT_PACKAGE_DIRECTORY })
-    void initTask(
+    @BuildStep
+    void init(
             BeanContainerBuildItem beanContainerBuildItem,
             CamelRuntimeBuildItem runtime,
-            CamelRecorder recorder) throws Exception {
+            CamelRecorder recorder) {
 
-        final List<String> builders;
         if (!buildTimeConfig.deferInitPhase) {
-            builders = getBuildTimeRouteBuilderClasses().collect(Collectors.toList());
-        } else {
-            builders = new ArrayList<>();
+            getBuildTimeRouteBuilderClasses().forEach(b -> recorder.addBuilder(runtime.getRuntime(), b));
         }
-        recorder.init(beanContainerBuildItem.getValue(), runtime.getRuntime(), builders, buildTimeConfig);
+
+        recorder.init(beanContainerBuildItem.getValue(), runtime.getRuntime(), buildTimeConfig);
     }
 
     @Record(ExecutionTime.RUNTIME_INIT)
-    @BuildStep(applicationArchiveMarkers = { CamelSupport.CAMEL_SERVICE_BASE_PATH, CamelSupport.CAMEL_ROOT_PACKAGE_DIRECTORY })
-    void createRuntimeInitTask(
+    @BuildStep
+    void start(
             CamelRecorder recorder,
             CamelRuntimeBuildItem runtime,
             ShutdownContextBuildItem shutdown,
@@ -230,6 +226,4 @@ class CamelInitProcessor {
                 '}';
         }
     }
-
-
 }
diff --git a/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelSupport.java b/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelSupport.java
index 7846977..0f19d9e 100644
--- a/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelSupport.java
+++ b/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelSupport.java
@@ -27,9 +27,7 @@ import io.quarkus.deployment.builditem.ApplicationArchivesBuildItem;
 import org.jboss.jandex.ClassInfo;
 
 public final class CamelSupport {
-
     public static final String CAMEL_SERVICE_BASE_PATH = "META-INF/services/org/apache/camel";
-
     public static final String CAMEL_ROOT_PACKAGE_DIRECTORY = "org/apache/camel";
 
     private CamelSupport() {
@@ -53,9 +51,9 @@ public final class CamelSupport {
 
     public static Stream<Path> resources(ApplicationArchivesBuildItem archives, String path) {
         return archives.getAllApplicationArchives().stream()
-                .map(arch -> arch.getArchiveRoot().resolve(path))
-                .filter(Files::isDirectory)
-                .flatMap(CamelSupport::safeWalk)
-                .filter(Files::isRegularFile);
+            .map(arch -> arch.getArchiveRoot().resolve(path))
+            .filter(Files::isDirectory)
+            .flatMap(CamelSupport::safeWalk)
+            .filter(Files::isRegularFile);
     }
 }
diff --git a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/graal/JaxbDisabled.java b/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/Feature.java
similarity index 67%
copy from extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/graal/JaxbDisabled.java
copy to extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/Feature.java
index d870441..9f0bf2f 100644
--- a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/graal/JaxbDisabled.java
+++ b/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/Feature.java
@@ -14,16 +14,16 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.quarkus.core.runtime.graal;
+package org.apache.camel.quarkus.core.deployment;
 
-import java.util.function.BooleanSupplier;
+import io.quarkus.deployment.annotations.BuildStep;
+import io.quarkus.deployment.builditem.FeatureBuildItem;
 
-import org.eclipse.microprofile.config.ConfigProvider;
+class Feature {
+    private static final String FEATURE = "camel-core";
 
-public final class JaxbDisabled implements BooleanSupplier {
-    @Override
-    public boolean getAsBoolean() {
-        return ConfigProvider.getConfig().getOptionalValue("quarkus.camel.disable-jaxb", Boolean.class).orElse(Boolean.FALSE);
+    @BuildStep
+    FeatureBuildItem feature() {
+        return new FeatureBuildItem(FEATURE);
     }
 }
-
diff --git a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/graal/InitAtBuildTimeSelector.java b/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/HotDeploymentProcessor.java
similarity index 53%
copy from extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/graal/InitAtBuildTimeSelector.java
copy to extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/HotDeploymentProcessor.java
index b0b4eae..5dfd176 100644
--- a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/graal/InitAtBuildTimeSelector.java
+++ b/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/HotDeploymentProcessor.java
@@ -14,15 +14,23 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.quarkus.core.runtime.graal;
+package org.apache.camel.quarkus.core.deployment;
 
-import java.util.function.BooleanSupplier;
+import java.util.List;
+import java.util.stream.Collectors;
 
-import org.eclipse.microprofile.config.ConfigProvider;
+import io.quarkus.deployment.annotations.BuildStep;
+import io.quarkus.deployment.builditem.HotDeploymentWatchedFileBuildItem;
+import org.apache.camel.quarkus.core.runtime.CamelConfig.BuildTime;
 
-public final class InitAtBuildTimeSelector implements BooleanSupplier {
-    @Override
-    public boolean getAsBoolean() {
-        return !ConfigProvider.getConfig().getOptionalValue("quarkus.camel.defer-init-phase", Boolean.class).orElse(Boolean.TRUE);
+class HotDeploymentProcessor {
+    @BuildStep
+    List<HotDeploymentWatchedFileBuildItem> configFile(BuildTime buildTimeConfig) {
+        return buildTimeConfig.routesUris.stream()
+            .map(String::trim)
+            .filter(s -> s.startsWith("file:"))
+            .map(s -> s.substring("file:".length()))
+            .map(HotDeploymentWatchedFileBuildItem::new)
+            .collect(Collectors.toList());
     }
 }
diff --git a/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelProcessor.java b/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/SubstrateProcessor.java
similarity index 72%
rename from extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelProcessor.java
rename to extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/SubstrateProcessor.java
index 9bb6468..80a4f77 100644
--- a/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelProcessor.java
+++ b/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/SubstrateProcessor.java
@@ -17,7 +17,6 @@
 package org.apache.camel.quarkus.core.deployment;
 
 import java.io.InputStream;
-import java.lang.annotation.Annotation;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.util.Arrays;
@@ -32,26 +31,19 @@ import io.quarkus.deployment.annotations.BuildProducer;
 import io.quarkus.deployment.annotations.BuildStep;
 import io.quarkus.deployment.builditem.ApplicationArchivesBuildItem;
 import io.quarkus.deployment.builditem.CombinedIndexBuildItem;
-import io.quarkus.deployment.builditem.FeatureBuildItem;
-import io.quarkus.deployment.builditem.HotDeploymentWatchedFileBuildItem;
 import io.quarkus.deployment.builditem.substrate.ReflectiveClassBuildItem;
 import io.quarkus.deployment.builditem.substrate.ReflectiveMethodBuildItem;
 import io.quarkus.deployment.builditem.substrate.SubstrateConfigBuildItem;
 import io.quarkus.deployment.builditem.substrate.SubstrateResourceBuildItem;
 import io.quarkus.deployment.builditem.substrate.SubstrateResourceBundleBuildItem;
-import io.quarkus.jaxb.deployment.JaxbEnabledBuildItem;
-import io.quarkus.jaxb.deployment.JaxbFileRootBuildItem;
-
 import org.apache.camel.Component;
 import org.apache.camel.Consumer;
 import org.apache.camel.Converter;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Producer;
 import org.apache.camel.TypeConverter;
-import org.apache.camel.quarkus.core.runtime.CamelConfig.BuildTime;
 import org.apache.camel.spi.ExchangeFormatter;
 import org.apache.camel.spi.ScheduledPollConsumerScheduler;
-import org.jboss.jandex.AnnotationTarget;
 import org.jboss.jandex.AnnotationTarget.Kind;
 import org.jboss.jandex.AnnotationValue;
 import org.jboss.jandex.ClassInfo;
@@ -61,8 +53,7 @@ import org.jboss.jandex.MethodInfo;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-class CamelProcessor {
-
+class SubstrateProcessor {
     private static final List<Class<?>> CAMEL_REFLECTIVE_CLASSES = Arrays.asList(
             Endpoint.class,
             Consumer.class,
@@ -72,12 +63,6 @@ class CamelProcessor {
             ScheduledPollConsumerScheduler.class,
             Component.class);
 
-    private static final List<Class<? extends Annotation>> CAMEL_REFLECTIVE_ANNOTATIONS = Arrays.asList();
-
-    private static final String FEATURE = "camel-core";
-
-    private static final Class<? extends Annotation> CAMEL_CONVERTER_ANNOTATION = Converter.class;
-
     @Inject
     BuildProducer<ReflectiveClassBuildItem> reflectiveClass;
     @Inject
@@ -90,38 +75,6 @@ class CamelProcessor {
     ApplicationArchivesBuildItem applicationArchivesBuildItem;
     @Inject
     CombinedIndexBuildItem combinedIndexBuildItem;
-    @Inject
-    BuildTime buildTimeConfig;
-
-    @BuildStep
-    JaxbFileRootBuildItem fileRoot() {
-        return new JaxbFileRootBuildItem(CamelSupport.CAMEL_ROOT_PACKAGE_DIRECTORY);
-    }
-
-    @BuildStep
-    JaxbEnabledBuildItem handleJaxbSupport() {
-        return buildTimeConfig.disableJaxb ? null : new JaxbEnabledBuildItem();
-    }
-
-    @BuildStep
-    List<ReflectiveClassBuildItem> handleXmlSupport() {
-        if (buildTimeConfig.disableXml) {
-            return null;
-        } else {
-            return Arrays.asList(
-                new ReflectiveClassBuildItem(false, false,
-                    "com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl"),
-                new ReflectiveClassBuildItem(false, false,
-                    "com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl"),
-                new ReflectiveClassBuildItem(false, false,
-                    "com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl"));
-        }
-    }
-
-    @BuildStep
-    FeatureBuildItem feature() {
-        return new FeatureBuildItem(FEATURE);
-    }
 
     @BuildStep
     SubstrateConfigBuildItem substrate() {
@@ -132,16 +85,6 @@ class CamelProcessor {
             .build();
     }
 
-    @BuildStep
-    List<HotDeploymentWatchedFileBuildItem> configFile() {
-        return buildTimeConfig.routesUris.stream()
-                .map(String::trim)
-                .filter(s -> s.startsWith("file:"))
-                .map(s -> s.substring("file:".length()))
-                .map(HotDeploymentWatchedFileBuildItem::new)
-                .collect(Collectors.toList());
-    }
-
     @BuildStep(applicationArchiveMarkers = { CamelSupport.CAMEL_SERVICE_BASE_PATH, CamelSupport.CAMEL_ROOT_PACKAGE_DIRECTORY })
     void process() {
         IndexView view = combinedIndexBuildItem.getIndex();
@@ -154,21 +97,7 @@ class CamelProcessor {
                 .filter(CamelSupport::isPublic)
                 .forEach(v -> addReflectiveClass(true, v.name().toString()));
 
-        CAMEL_REFLECTIVE_ANNOTATIONS.stream()
-                .map(Class::getName)
-                .map(DotName::createSimple)
-                .map(view::getAnnotations)
-                .flatMap(Collection::stream)
-                .forEach(v -> {
-                    if (v.target().kind() == AnnotationTarget.Kind.CLASS) {
-                        addReflectiveClass(true, v.target().asClass().name().toString());
-                    }
-                    if (v.target().kind() == AnnotationTarget.Kind.METHOD) {
-                        addReflectiveMethod(v.target().asMethod());
-                    }
-                });
-
-        Logger log = LoggerFactory.getLogger(CamelProcessor.class);
+        Logger log = LoggerFactory.getLogger(SubstrateProcessor.class);
         DotName converter = DotName.createSimple(Converter.class.getName());
         List<ClassInfo> converterClasses = view.getAnnotations(converter)
                 .stream()
@@ -191,6 +120,7 @@ class CamelProcessor {
                 })
                 .map(ai -> ai.target().asClass())
                 .collect(Collectors.toList());
+
         log.debug("Converter classes: " + converterClasses);
         converterClasses.forEach(ci -> addReflectiveClass(false, ci.name().toString()));
 
diff --git a/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/XmlProcessor.java b/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/XmlProcessor.java
new file mode 100644
index 0000000..824b0de
--- /dev/null
+++ b/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/XmlProcessor.java
@@ -0,0 +1,48 @@
+/*
+ * 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.deployment;
+
+import io.quarkus.deployment.annotations.BuildProducer;
+import io.quarkus.deployment.annotations.BuildStep;
+import io.quarkus.deployment.builditem.substrate.ReflectiveClassBuildItem;
+import io.quarkus.jaxb.deployment.JaxbEnabledBuildItem;
+import io.quarkus.jaxb.deployment.JaxbFileRootBuildItem;
+import org.apache.camel.quarkus.core.runtime.JaxbDisabled;
+
+class XmlProcessor {
+    @BuildStep
+    JaxbFileRootBuildItem fileRoot() {
+        return new JaxbFileRootBuildItem(CamelSupport.CAMEL_ROOT_PACKAGE_DIRECTORY);
+    }
+
+    @BuildStep(onlyIfNot = JaxbDisabled.class)
+    JaxbEnabledBuildItem handleJaxbSupport() {
+        return new JaxbEnabledBuildItem();
+    }
+
+    @BuildStep(onlyIfNot = JaxbDisabled.class)
+    void registerReflectiveClasses(BuildProducer<ReflectiveClassBuildItem> reflectiveClass) {
+        reflectiveClass.produce(
+            new ReflectiveClassBuildItem(
+                false,
+                false,
+                "com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl",
+                "com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl",
+                "com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl")
+        );
+    }
+}
diff --git a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/CamelConfig.java b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/CamelConfig.java
index a4c694a..d925a33 100644
--- a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/CamelConfig.java
+++ b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/CamelConfig.java
@@ -21,7 +21,6 @@ import java.util.List;
 import io.quarkus.runtime.annotations.ConfigItem;
 import io.quarkus.runtime.annotations.ConfigPhase;
 import io.quarkus.runtime.annotations.ConfigRoot;
-import org.apache.camel.quarkus.core.runtime.graal.JaxbDisabled;
 import org.apache.camel.quarkus.core.runtime.graal.XmlDisabled;
 
 public class CamelConfig {
diff --git a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/CamelRecorder.java b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/CamelRecorder.java
index 43a2217..2f27aef 100644
--- a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/CamelRecorder.java
+++ b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/CamelRecorder.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.quarkus.core.runtime;
 
-import java.util.List;
 import java.util.Properties;
 
 import io.quarkus.arc.runtime.BeanContainer;
@@ -33,49 +32,22 @@ public class CamelRecorder {
 
     public RuntimeValue<CamelRuntime> create(
             Registry registry,
-            Properties properties,
-            List<RuntimeValue<?>> builders,
-            CamelConfig.BuildTime buildTimeConfig) {
-
-        FastCamelRuntime runtime = new FastCamelRuntime();
+            Properties properties) {
 
-        runtime.setRegistry(registry);
-        runtime.setProperties(properties);
-        builders.stream()
-                .map(RuntimeValue::getValue)
-                .map(RoutesBuilder.class::cast)
-                .forEach(runtime.getBuilders()::add);
+        FastCamelRuntime fcr = new FastCamelRuntime();
+        fcr.setRegistry(registry);
+        fcr.setProperties(properties);
 
-        return new RuntimeValue<>(runtime);
-    }
-
-    public void bind(
-            RuntimeValue<CamelRuntime> runtime,
-            String name,
-            Class<?> type,
-            Object instance) {
-
-        runtime.getValue().getRegistry().bind(name, type, instance);
+        return new RuntimeValue<>(fcr);
     }
 
     public void init(
             BeanContainer beanContainer,
             RuntimeValue<CamelRuntime> runtime,
-            List<String> builders,
-            CamelConfig.BuildTime buildTimeConfig) throws Exception {
+            CamelConfig.BuildTime buildTimeConfig) {
 
         FastCamelRuntime fcr = (FastCamelRuntime) runtime.getValue();
         fcr.setBeanContainer(beanContainer);
-
-        builders.stream()
-                .forEach(name -> {
-                    try {
-                        fcr.getBuilders().add((RoutesBuilder) Class.forName(name).newInstance());
-                    } catch (Throwable t) {
-                        throw new RuntimeException(t);
-                    }
-                });
-
         fcr.init(buildTimeConfig);
     }
 
@@ -99,8 +71,41 @@ public class CamelRecorder {
         });
     }
 
+    public void addBuilder(
+        RuntimeValue<CamelRuntime> runtime,
+        String className) {
+
+        FastCamelRuntime fcr = (FastCamelRuntime) runtime.getValue();
+
+        try {
+            fcr.getBuilders().add((RoutesBuilder) Class.forName(className).newInstance());
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    public void bind(
+        RuntimeValue<CamelRuntime> runtime,
+        String name,
+        Class<?> type,
+        Object instance) {
+
+        runtime.getValue().getRegistry().bind(name, type, instance);
+    }
+
+    public void bind(
+        RuntimeValue<CamelRuntime> runtime,
+        String name,
+        Class<?> type) {
+
+        try {
+            runtime.getValue().getRegistry().bind(name, type, type.newInstance());
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
     public BeanContainerListener initRuntimeInjection(RuntimeValue<CamelRuntime> runtime) {
         return container -> container.instance(CamelProducers.class).setCamelRuntime(runtime.getValue());
     }
-
 }
diff --git a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/graal/InitAtBuildTimeSelector.java b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/InitAtBuildTimeSelector.java
similarity index 95%
rename from extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/graal/InitAtBuildTimeSelector.java
rename to extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/InitAtBuildTimeSelector.java
index b0b4eae..cc64578 100644
--- a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/graal/InitAtBuildTimeSelector.java
+++ b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/InitAtBuildTimeSelector.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.quarkus.core.runtime.graal;
+package org.apache.camel.quarkus.core.runtime;
 
 import java.util.function.BooleanSupplier;
 
diff --git a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/graal/JaxbDisabled.java b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/JaxbDisabled.java
similarity index 95%
rename from extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/graal/JaxbDisabled.java
rename to extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/JaxbDisabled.java
index d870441..f0d6ea3 100644
--- a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/graal/JaxbDisabled.java
+++ b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/JaxbDisabled.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.quarkus.core.runtime.graal;
+package org.apache.camel.quarkus.core.runtime;
 
 import java.util.function.BooleanSupplier;
 
diff --git a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/graal/Target_org_apache_camel_reifier_ProcessorReifier.java b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/graal/Target_org_apache_camel_reifier_ProcessorReifier.java
index 7bd7409..519c4aa 100644
--- a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/graal/Target_org_apache_camel_reifier_ProcessorReifier.java
+++ b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/graal/Target_org_apache_camel_reifier_ProcessorReifier.java
@@ -23,6 +23,7 @@ import com.oracle.svm.core.annotate.Alias;
 import com.oracle.svm.core.annotate.RecomputeFieldValue;
 import com.oracle.svm.core.annotate.TargetClass;
 import org.apache.camel.model.ProcessorDefinition;
+import org.apache.camel.quarkus.core.runtime.InitAtBuildTimeSelector;
 import org.apache.camel.reifier.ProcessorReifier;
 
 @TargetClass(className = "org.apache.camel.reifier.ProcessorReifier", onlyWith = InitAtBuildTimeSelector.class)
diff --git a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/graal/Target_org_apache_camel_reifier_dataformat_DataFormatReifier.java b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/graal/Target_org_apache_camel_reifier_dataformat_DataFormatReifier.java
index c9e49f4..72d5fdd 100644
--- a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/graal/Target_org_apache_camel_reifier_dataformat_DataFormatReifier.java
+++ b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/graal/Target_org_apache_camel_reifier_dataformat_DataFormatReifier.java
@@ -23,6 +23,7 @@ import com.oracle.svm.core.annotate.Alias;
 import com.oracle.svm.core.annotate.RecomputeFieldValue;
 import com.oracle.svm.core.annotate.TargetClass;
 import org.apache.camel.model.DataFormatDefinition;
+import org.apache.camel.quarkus.core.runtime.InitAtBuildTimeSelector;
 import org.apache.camel.reifier.dataformat.DataFormatReifier;
 
 @TargetClass(className = "org.apache.camel.reifier.dataformat.DataFormatReifier", onlyWith = InitAtBuildTimeSelector.class)
diff --git a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/graal/Target_org_apache_camel_reifier_loadbalancer_LoadBalancerReifier.java b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/graal/Target_org_apache_camel_reifier_loadbalancer_LoadBalancerReifier.java
index c7ead3a..f763393 100644
--- a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/graal/Target_org_apache_camel_reifier_loadbalancer_LoadBalancerReifier.java
+++ b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/graal/Target_org_apache_camel_reifier_loadbalancer_LoadBalancerReifier.java
@@ -23,6 +23,7 @@ import com.oracle.svm.core.annotate.Alias;
 import com.oracle.svm.core.annotate.RecomputeFieldValue;
 import com.oracle.svm.core.annotate.TargetClass;
 import org.apache.camel.model.LoadBalancerDefinition;
+import org.apache.camel.quarkus.core.runtime.InitAtBuildTimeSelector;
 import org.apache.camel.reifier.loadbalancer.LoadBalancerReifier;
 
 @TargetClass(className = "org.apache.camel.reifier.loadbalancer.LoadBalancerReifier", onlyWith = InitAtBuildTimeSelector.class)
diff --git a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/graal/Target_org_apache_camel_reifier_transformer_TransformerReifier.java b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/graal/Target_org_apache_camel_reifier_transformer_TransformerReifier.java
index 5825a5b..3e60da6 100644
--- a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/graal/Target_org_apache_camel_reifier_transformer_TransformerReifier.java
+++ b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/graal/Target_org_apache_camel_reifier_transformer_TransformerReifier.java
@@ -23,6 +23,7 @@ import com.oracle.svm.core.annotate.Alias;
 import com.oracle.svm.core.annotate.RecomputeFieldValue;
 import com.oracle.svm.core.annotate.TargetClass;
 import org.apache.camel.model.transformer.TransformerDefinition;
+import org.apache.camel.quarkus.core.runtime.InitAtBuildTimeSelector;
 import org.apache.camel.reifier.transformer.TransformerReifier;
 
 @TargetClass(className = "org.apache.camel.reifier.transformer.TransformerReifier", onlyWith = InitAtBuildTimeSelector.class)
diff --git a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/graal/Target_org_apache_camel_reifier_validator_ValidatorReifier.java b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/graal/Target_org_apache_camel_reifier_validator_ValidatorReifier.java
index 965d880..52e5dd5 100644
--- a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/graal/Target_org_apache_camel_reifier_validator_ValidatorReifier.java
+++ b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/runtime/graal/Target_org_apache_camel_reifier_validator_ValidatorReifier.java
@@ -23,6 +23,7 @@ import com.oracle.svm.core.annotate.Alias;
 import com.oracle.svm.core.annotate.RecomputeFieldValue;
 import com.oracle.svm.core.annotate.TargetClass;
 import org.apache.camel.model.validator.ValidatorDefinition;
+import org.apache.camel.quarkus.core.runtime.InitAtBuildTimeSelector;
 import org.apache.camel.reifier.validator.ValidatorReifier;
 
 @TargetClass(className = "org.apache.camel.reifier.validator.ValidatorReifier", onlyWith = InitAtBuildTimeSelector.class)