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/10/19 11:08:19 UTC

[camel-quarkus] branch master updated: master failing #288

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 f1a6aae  master failing #288
f1a6aae is described below

commit f1a6aae060632a65f1e89056a92a6bf394429dc3
Author: lburgazzoli <lb...@gmail.com>
AuthorDate: Sat Oct 19 11:39:53 2019 +0200

    master failing #288
---
 .../quarkus/core/deployment/BuildProcessor.java    | 37 +++++++++++----------
 ...sor.java => CamelRoutesCollectorBuildItem.java} | 28 ++++++++--------
 .../core/deployment/HotDeploymentProcessor.java    |  9 ++---
 .../org/apache/camel/quarkus/core/CamelConfig.java | 13 --------
 .../camel/quarkus/core/CamelMainRecorder.java      | 38 ++++++++--------------
 .../apache/camel/quarkus/core/CamelRecorder.java   |  1 +
 .../quarkus/core/DisabledXmlRoutesCollector.java}  | 29 +++++++++--------
 .../component/xml/deployment/XmlProcessor.java     |  7 ++++
 .../camel/quarkus/component/xml/XmlRecorder.java   |  6 ++++
 .../test/src/main/resources/application.properties |  3 +-
 10 files changed, 80 insertions(+), 91 deletions(-)

diff --git a/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/BuildProcessor.java b/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/BuildProcessor.java
index 9e4b6bb..17ee324 100644
--- a/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/BuildProcessor.java
+++ b/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/BuildProcessor.java
@@ -40,8 +40,6 @@ import org.apache.camel.quarkus.core.CamelMainProducers;
 import org.apache.camel.quarkus.core.CamelMainRecorder;
 import org.apache.camel.quarkus.core.CamelProducers;
 import org.apache.camel.quarkus.core.CamelRecorder;
-import org.apache.camel.quarkus.core.DisabledModelJAXBContextFactory;
-import org.apache.camel.quarkus.core.DisabledXmlLoader;
 import org.apache.camel.quarkus.core.Flags;
 import org.apache.camel.spi.Registry;
 import org.slf4j.Logger;
@@ -141,9 +139,13 @@ class BuildProcessor {
             BeanContainerBuildItem beanContainer,
             CamelConfig.BuildTime buildTimeConfig) {
 
-            RuntimeValue<CamelContext> context = recorder.createContext(registry.getRegistry(),
-                    contextFactory.getContextFactory(), xmlLoader.getXmlLoader(),
-                    beanContainer.getValue(), buildTimeConfig);
+            RuntimeValue<CamelContext> context = recorder.createContext(
+                registry.getRegistry(),
+                contextFactory.getContextFactory(),
+                xmlLoader.getXmlLoader(),
+                beanContainer.getValue(),
+                buildTimeConfig);
+
             return new CamelContextBuildItem(context);
         }
 
@@ -175,6 +177,12 @@ class BuildProcessor {
      * disabled by setting quarkus.camel.disable-main = true
      */
     public static class Main {
+        @Overridable
+        @BuildStep
+        @Record(value = ExecutionTime.STATIC_INIT, optional = true)
+        public CamelRoutesCollectorBuildItem createRoutesCollector(CamelMainRecorder recorder) {
+            return new CamelRoutesCollectorBuildItem(recorder.newDisabledXmlRoutesCollector());
+        }
 
         @BuildStep(onlyIfNot = Flags.MainDisabled.class)
         void beans(BuildProducer<AdditionalBeanBuildItem> beanProducer) {
@@ -203,11 +211,17 @@ class BuildProcessor {
             CamelMainRecorder recorder,
             RecorderContext recorderContext,
             CamelContextBuildItem context,
+            CamelRoutesCollectorBuildItem routesCollector,
             List<CamelMainListenerBuildItem> listeners,
             List<CamelRoutesBuilderBuildItem> routesBuilders,
             BeanContainerBuildItem beanContainer) {
 
-            RuntimeValue<CamelMain> main = recorder.createCamelMain(context.getCamelContext(), beanContainer.getValue());
+            RuntimeValue<CamelMain> main = recorder.createCamelMain(
+                context.getCamelContext(),
+                routesCollector.getValue(),
+                beanContainer.getValue()
+            );
+
             for (CamelMainListenerBuildItem listener : listeners) {
                 recorder.addListener(main, listener.getListener());
             }
@@ -229,7 +243,6 @@ class BuildProcessor {
          * @param main      a reference to a {@link CamelMain}.
          * @param registry  a reference to a {@link Registry}; note that this parameter is here as placeholder to
          *                  ensure the {@link Registry} is fully configured before starting camel-main.
-         * @param config    runtime configuration.
          * @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.
@@ -244,20 +257,10 @@ class BuildProcessor {
             CamelMainRecorder recorder,
             CamelMainBuildItem main,
             CamelRuntimeRegistryBuildItem registry,
-            CamelConfig.Runtime config,
             CamelReactiveExecutorBuildItem executor,
             ShutdownContextBuildItem shutdown,
             List<ServiceStartBuildItem> startList) {
 
-            //
-            // Note that this functionality may be incorporated by camel-main, see:
-            //
-            //     https://issues.apache.org/jira/browse/CAMEL-14050
-            //
-            config.routesUris.forEach(location -> {
-                recorder.addRoutesFromLocation(main.getInstance(), location);
-            });
-
             recorder.setReactiveExecutor(main.getInstance(), executor.getInstance());
             recorder.start(shutdown, main.getInstance());
         }
diff --git a/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/HotDeploymentProcessor.java b/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelRoutesCollectorBuildItem.java
similarity index 57%
copy from extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/HotDeploymentProcessor.java
copy to extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelRoutesCollectorBuildItem.java
index dab20a3..df39049 100644
--- a/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/HotDeploymentProcessor.java
+++ b/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelRoutesCollectorBuildItem.java
@@ -16,21 +16,21 @@
  */
 package org.apache.camel.quarkus.core.deployment;
 
-import java.util.List;
-import java.util.stream.Collectors;
+import io.quarkus.builder.item.SimpleBuildItem;
+import io.quarkus.runtime.RuntimeValue;
+import org.apache.camel.main.RoutesCollector;
 
-import io.quarkus.deployment.annotations.BuildStep;
-import io.quarkus.deployment.builditem.HotDeploymentWatchedFileBuildItem;
-import org.apache.camel.quarkus.core.CamelConfig;
+/**
+ * Holds the {@link RoutesCollector} {@link RuntimeValue}. *
+ */
+public final class CamelRoutesCollectorBuildItem extends SimpleBuildItem {
+    private final RuntimeValue<RoutesCollector> value;
+
+    public CamelRoutesCollectorBuildItem(RuntimeValue<RoutesCollector> value) {
+        this.value = value;
+    }
 
-class HotDeploymentProcessor {
-    @BuildStep
-    List<HotDeploymentWatchedFileBuildItem> configFile(CamelConfig.Runtime config) {
-        return config.routesUris.stream()
-            .map(String::trim)
-            .filter(s -> s.startsWith("file:"))
-            .map(s -> s.substring("file:".length()))
-            .map(HotDeploymentWatchedFileBuildItem::new)
-            .collect(Collectors.toList());
+    public RuntimeValue<RoutesCollector> getValue() {
+        return value;
     }
 }
diff --git a/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/HotDeploymentProcessor.java b/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/HotDeploymentProcessor.java
index dab20a3..60f5b6a 100644
--- a/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/HotDeploymentProcessor.java
+++ b/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/HotDeploymentProcessor.java
@@ -16,8 +16,8 @@
  */
 package org.apache.camel.quarkus.core.deployment;
 
+import java.util.Collections;
 import java.util.List;
-import java.util.stream.Collectors;
 
 import io.quarkus.deployment.annotations.BuildStep;
 import io.quarkus.deployment.builditem.HotDeploymentWatchedFileBuildItem;
@@ -26,11 +26,6 @@ import org.apache.camel.quarkus.core.CamelConfig;
 class HotDeploymentProcessor {
     @BuildStep
     List<HotDeploymentWatchedFileBuildItem> configFile(CamelConfig.Runtime config) {
-        return config.routesUris.stream()
-            .map(String::trim)
-            .filter(s -> s.startsWith("file:"))
-            .map(s -> s.substring("file:".length()))
-            .map(HotDeploymentWatchedFileBuildItem::new)
-            .collect(Collectors.toList());
+        return Collections.emptyList();
     }
 }
diff --git a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelConfig.java b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelConfig.java
index d4e796b..a853a1b 100644
--- a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelConfig.java
+++ b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelConfig.java
@@ -16,14 +16,11 @@
  */
 package org.apache.camel.quarkus.core;
 
-import java.util.List;
-
 import io.quarkus.runtime.annotations.ConfigItem;
 import io.quarkus.runtime.annotations.ConfigPhase;
 import io.quarkus.runtime.annotations.ConfigRoot;
 
 public class CamelConfig {
-
     @ConfigRoot(name = "camel", phase = ConfigPhase.BUILD_AND_RUN_TIME_FIXED)
     public static class BuildTime {
         /**
@@ -44,15 +41,5 @@ public class CamelConfig {
          */
         @ConfigItem(defaultValue = "false")
         public boolean dumpRoutes;
-
-        /**
-         * A list of URIs containing the camel routes in the XML format to be
-         * loaded at runtime. Files can be loaded from either classpath or file
-         * system by prefixing the URI with {@code classpath:} or {@code file:}
-         * respectively.
-         */
-        @ConfigItem
-        public List<String> routesUris;
     }
-
 }
diff --git a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelMainRecorder.java b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelMainRecorder.java
index 3b79c45..001a0c7 100644
--- a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelMainRecorder.java
+++ b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelMainRecorder.java
@@ -16,8 +16,6 @@
  */
 package org.apache.camel.quarkus.core;
 
-import java.io.InputStream;
-
 import io.quarkus.arc.runtime.BeanContainer;
 import io.quarkus.runtime.RuntimeValue;
 import io.quarkus.runtime.ShutdownContext;
@@ -26,12 +24,8 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.impl.engine.DefaultReactiveExecutor;
 import org.apache.camel.main.MainListener;
-import org.apache.camel.model.Model;
-import org.apache.camel.model.ModelHelper;
-import org.apache.camel.model.RoutesDefinition;
+import org.apache.camel.main.RoutesCollector;
 import org.apache.camel.spi.ReactiveExecutor;
-import org.apache.camel.support.ResourceHelper;
-import org.apache.camel.util.ObjectHelper;
 
 @Recorder
 public class CamelMainRecorder {
@@ -41,12 +35,20 @@ public class CamelMainRecorder {
 
     public RuntimeValue<CamelMain> createCamelMain(
             RuntimeValue<CamelContext> runtime,
+            RuntimeValue<RoutesCollector> routesCollector,
             BeanContainer container) {
 
         CamelMain main = new CamelMain();
+        main.setRoutesCollector(routesCollector.getValue());
         main.setCamelContext(runtime.getValue());
         main.addMainListener(new CamelMainEventDispatcher());
 
+        // xml rest/routes should be explicitly configured as an
+        // additional dependency is required thus, disable auto
+        // discovery
+        main.configure().setXmlRoutes("false");
+        main.configure().setXmlRests("false");
+
         // register to the container
         container.instance(CamelMainProducers.class).setMain(main);
 
@@ -76,23 +78,6 @@ public class CamelMainRecorder {
         }
     }
 
-    public void addRoutesFromLocation(
-            RuntimeValue<CamelMain> main,
-            String location) {
-
-        if (ObjectHelper.isNotEmpty(location)) {
-            // TODO: if pointing to a directory, we should load all xmls in it
-            //       (maybe with glob support in it to be complete)
-            CamelContext camelContext = main.getValue().getCamelContext();
-            try (InputStream is = ResourceHelper.resolveMandatoryResourceAsInputStream(camelContext, location)) {
-                RoutesDefinition routes = ModelHelper.loadRoutesDefinition(camelContext, is);
-                camelContext.getExtension(Model.class).addRouteDefinitions(routes.getRoutes());
-            } catch (Exception e) {
-                throw new RuntimeException(e);
-            }
-        }
-    }
-
     public void addListener(RuntimeValue<CamelMain> main, MainListener listener) {
         main.getValue().addMainListener(listener);
     }
@@ -100,6 +85,7 @@ public class CamelMainRecorder {
     public void setReactiveExecutor(RuntimeValue<CamelMain> main, RuntimeValue<ReactiveExecutor> executor) {
         main.getValue().getCamelContext().setReactiveExecutor(executor.getValue());
     }
+
     public void start(ShutdownContext shutdown, RuntimeValue<CamelMain> main) {
         shutdown.addShutdownTask(new Runnable() {
             @Override
@@ -119,4 +105,8 @@ public class CamelMainRecorder {
             throw new RuntimeException(e);
         }
     }
+
+    public RuntimeValue<RoutesCollector> newDisabledXmlRoutesCollector() {
+        return new RuntimeValue<>(new DisabledXmlRoutesCollector());
+    }
 }
diff --git a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelRecorder.java b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelRecorder.java
index 1000682..c3a4fb2 100644
--- a/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelRecorder.java
+++ b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelRecorder.java
@@ -20,6 +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.main.RoutesCollector;
 import org.apache.camel.model.ValidateDefinition;
 import org.apache.camel.model.validator.PredicateValidatorDefinition;
 import org.apache.camel.reifier.ProcessorReifier;
diff --git a/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/HotDeploymentProcessor.java b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/DisabledXmlRoutesCollector.java
similarity index 52%
copy from extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/HotDeploymentProcessor.java
copy to extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/DisabledXmlRoutesCollector.java
index dab20a3..408aeee 100644
--- a/extensions/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/HotDeploymentProcessor.java
+++ b/extensions/core/runtime/src/main/java/org/apache/camel/quarkus/core/DisabledXmlRoutesCollector.java
@@ -14,23 +14,24 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.quarkus.core.deployment;
+package org.apache.camel.quarkus.core;
 
 import java.util.List;
-import java.util.stream.Collectors;
 
-import io.quarkus.deployment.annotations.BuildStep;
-import io.quarkus.deployment.builditem.HotDeploymentWatchedFileBuildItem;
-import org.apache.camel.quarkus.core.CamelConfig;
+import org.apache.camel.CamelContext;
+import org.apache.camel.main.DefaultRoutesCollector;
+import org.apache.camel.model.RoutesDefinition;
+import org.apache.camel.model.rest.RestsDefinition;
 
-class HotDeploymentProcessor {
-    @BuildStep
-    List<HotDeploymentWatchedFileBuildItem> configFile(CamelConfig.Runtime config) {
-        return config.routesUris.stream()
-            .map(String::trim)
-            .filter(s -> s.startsWith("file:"))
-            .map(s -> s.substring("file:".length()))
-            .map(HotDeploymentWatchedFileBuildItem::new)
-            .collect(Collectors.toList());
+public class DisabledXmlRoutesCollector extends DefaultRoutesCollector {
+
+    @Override
+    public List<RoutesDefinition> collectXmlRoutesFromDirectory(CamelContext camelContext, String directory) {
+        throw new UnsupportedOperationException("Please add a dependency to camel-quarkus-xml-common");
+    }
+
+    @Override
+    public List<RestsDefinition> collectXmlRestsFromDirectory(CamelContext camelContext, String directory) {
+        throw new UnsupportedOperationException("Please add a dependency to camel-quarkus-xml-common");
     }
 }
diff --git a/extensions/xml-common/deployment/src/main/java/org/apache/camel/quarkus/component/xml/deployment/XmlProcessor.java b/extensions/xml-common/deployment/src/main/java/org/apache/camel/quarkus/component/xml/deployment/XmlProcessor.java
index 849a642..c412bbf 100644
--- a/extensions/xml-common/deployment/src/main/java/org/apache/camel/quarkus/component/xml/deployment/XmlProcessor.java
+++ b/extensions/xml-common/deployment/src/main/java/org/apache/camel/quarkus/component/xml/deployment/XmlProcessor.java
@@ -26,6 +26,7 @@ import io.quarkus.jaxb.deployment.JaxbFileRootBuildItem;
 import org.apache.camel.converter.jaxp.XmlConverter;
 import org.apache.camel.quarkus.component.xml.XmlRecorder;
 import org.apache.camel.quarkus.core.deployment.CamelModelJAXBContextFactoryBuildItem;
+import org.apache.camel.quarkus.core.deployment.CamelRoutesCollectorBuildItem;
 import org.apache.camel.quarkus.core.deployment.CamelSupport;
 import org.apache.camel.quarkus.core.deployment.CamelXmlLoaderBuildItem;
 
@@ -56,6 +57,12 @@ class XmlProcessor {
     }
 
     @BuildStep
+    @Record(value = ExecutionTime.STATIC_INIT, optional = true)
+    public CamelRoutesCollectorBuildItem routesCollector(XmlRecorder recorder) {
+        return new CamelRoutesCollectorBuildItem(recorder.newDefaultRoutesCollector());
+    }
+
+    @BuildStep
     @Record(value = ExecutionTime.STATIC_INIT)
     void initXmlReifiers(XmlRecorder recorder) {
         recorder.initXmlReifiers();
diff --git a/extensions/xml-common/runtime/src/main/java/org/apache/camel/quarkus/component/xml/XmlRecorder.java b/extensions/xml-common/runtime/src/main/java/org/apache/camel/quarkus/component/xml/XmlRecorder.java
index bbe0631..dd5acc0 100644
--- a/extensions/xml-common/runtime/src/main/java/org/apache/camel/quarkus/component/xml/XmlRecorder.java
+++ b/extensions/xml-common/runtime/src/main/java/org/apache/camel/quarkus/component/xml/XmlRecorder.java
@@ -22,6 +22,8 @@ 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.main.DefaultRoutesCollector;
+import org.apache.camel.main.RoutesCollector;
 import org.apache.camel.model.ValidateDefinition;
 import org.apache.camel.model.validator.PredicateValidatorDefinition;
 import org.apache.camel.quarkus.core.XmlLoader;
@@ -51,6 +53,10 @@ public class XmlRecorder {
         return new RuntimeValue<>(new DefaultXmlLoader());
     }
 
+    public RuntimeValue<RoutesCollector> newDefaultRoutesCollector() {
+        return new RuntimeValue<>(new DefaultRoutesCollector());
+    }
+
     public void initXmlReifiers() {
         ProcessorReifier.registerReifier(ValidateDefinition.class, ValidateReifier::new);
         ValidatorReifier.registerReifier(PredicateValidatorDefinition.class, PredicateValidatorReifier::new);
diff --git a/integration-tests/core-main/test/src/main/resources/application.properties b/integration-tests/core-main/test/src/main/resources/application.properties
index e20e0d1..ee0a486 100644
--- a/integration-tests/core-main/test/src/main/resources/application.properties
+++ b/integration-tests/core-main/test/src/main/resources/application.properties
@@ -23,12 +23,11 @@ quarkus.log.file.enable = false
 # Quarkus :: Camel
 #
 quarkus.camel.dump-routes=true
-quarkus.camel.routes-uris = file:src/test/resources/my-routes.xml
 #
 # Camel
 #
 camel.context.name=quarkus-camel-example
-
+camel.main.xml-routes = file:src/test/resources/my-routes.xml
 #
 # Timer
 #