You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2021/02/08 08:29:40 UTC

[camel] branch master updated (7a92d98 -> 5f336a3)

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

davsclaus pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git.


    from 7a92d98  CAMEL-12808: Salesforce: support PK chunking (#5038)
     new 27d7044  Add jfr step for compiling java route
     new 2d04149  CAMEL-16163: RoutesBuilderLoader to be static service to be reused.
     new 5f336a3  CAMEL-16161: Route template does not support autoStartup

The 3 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.


Summary of changes:
 .../language/joor/JoorRoutesBuilderLoader.java     | 38 ++++++++++++----------
 .../org/apache/camel/spi/RoutesBuilderLoader.java  |  5 ++-
 .../java/org/apache/camel/spi/RoutesLoader.java    |  1 +
 .../camel/impl/engine/DefaultRoutesLoader.java     | 29 ++++++++++++-----
 .../camel/model/RouteTemplateDefinition.java       |  9 +++--
 .../camel/support/RoutesBuilderLoaderSupport.java  | 22 +++++++------
 .../camel/xml/in/XmlRoutesBuilderLoader.java       | 22 ++++---------
 .../camel/xml/jaxb/JaxbXmlRoutesBuilderLoader.java | 26 +++++----------
 8 files changed, 80 insertions(+), 72 deletions(-)
 copy components/camel-cdi/src/test/java/org/apache/camel/cdi/bean/CamelContextAwareBean.java => core/camel-support/src/main/java/org/apache/camel/support/RoutesBuilderLoaderSupport.java (77%)


[camel] 01/03: Add jfr step for compiling java route

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

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

commit 27d70444b26fdd881f3512c87dff9fa749f543f2
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sun Feb 7 16:48:33 2021 +0100

    Add jfr step for compiling java route
---
 .../camel/language/joor/JoorRoutesBuilderLoader.java    | 17 ++++++++++++-----
 1 file changed, 12 insertions(+), 5 deletions(-)

diff --git a/components/camel-joor/src/main/java/org/apache/camel/language/joor/JoorRoutesBuilderLoader.java b/components/camel-joor/src/main/java/org/apache/camel/language/joor/JoorRoutesBuilderLoader.java
index 3b824c0..8e397b8 100644
--- a/components/camel-joor/src/main/java/org/apache/camel/language/joor/JoorRoutesBuilderLoader.java
+++ b/components/camel-joor/src/main/java/org/apache/camel/language/joor/JoorRoutesBuilderLoader.java
@@ -16,16 +16,18 @@
  */
 package org.apache.camel.language.joor;
 
-import java.io.IOException;
 import java.io.InputStream;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
+import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.RoutesBuilder;
+import org.apache.camel.StartupStep;
 import org.apache.camel.spi.Resource;
 import org.apache.camel.spi.RoutesBuilderLoader;
+import org.apache.camel.spi.StartupStepRecorder;
 import org.apache.camel.spi.annotations.JdkService;
 import org.apache.camel.support.ResourceHelper;
 import org.apache.camel.util.FileUtil;
@@ -57,14 +59,19 @@ public class JoorRoutesBuilderLoader implements RoutesBuilderLoader, CamelContex
 
     @Override
     public RoutesBuilder loadRoutesBuilder(Resource resource) throws Exception {
+        StartupStepRecorder recorder = camelContext.adapt(ExtendedCamelContext.class).getStartupStepRecorder();
+
         try (InputStream is = resource.getInputStream()) {
             final String content = IOHelper.loadText(is);
             final String name = determineName(resource, content);
-            final Reflect compiled = Reflect.compile(name, content);
 
-            return compiled.create().get();
-        } catch (IOException e) {
-            throw new RuntimeException(e);
+            StartupStep step = recorder.beginStep(JoorRoutesBuilderLoader.class, name, "Compiling RouteBuilder");
+            try {
+                final Reflect compiled = Reflect.compile(name, content);
+                return compiled.create().get();
+            } finally {
+                recorder.endStep(step);
+            }
         }
     }
 


[camel] 02/03: CAMEL-16163: RoutesBuilderLoader to be static service to be reused.

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

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

commit 2d041497d550feb6c477749136d8bee93231f39c
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Mon Feb 8 07:52:42 2021 +0100

    CAMEL-16163: RoutesBuilderLoader to be static service to be reused.
---
 .../language/joor/JoorRoutesBuilderLoader.java     | 25 ++++++--------
 .../org/apache/camel/spi/RoutesBuilderLoader.java  |  5 ++-
 .../java/org/apache/camel/spi/RoutesLoader.java    |  1 +
 .../camel/impl/engine/DefaultRoutesLoader.java     | 29 +++++++++++-----
 .../camel/support/RoutesBuilderLoaderSupport.java  | 40 ++++++++++++++++++++++
 .../camel/xml/in/XmlRoutesBuilderLoader.java       | 22 ++++--------
 .../camel/xml/jaxb/JaxbXmlRoutesBuilderLoader.java | 26 +++++---------
 7 files changed, 92 insertions(+), 56 deletions(-)

diff --git a/components/camel-joor/src/main/java/org/apache/camel/language/joor/JoorRoutesBuilderLoader.java b/components/camel-joor/src/main/java/org/apache/camel/language/joor/JoorRoutesBuilderLoader.java
index 8e397b8..6cdcef5 100644
--- a/components/camel-joor/src/main/java/org/apache/camel/language/joor/JoorRoutesBuilderLoader.java
+++ b/components/camel-joor/src/main/java/org/apache/camel/language/joor/JoorRoutesBuilderLoader.java
@@ -20,38 +20,37 @@ import java.io.InputStream;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import org.apache.camel.CamelContext;
-import org.apache.camel.CamelContextAware;
 import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.StartupStep;
+import org.apache.camel.api.management.ManagedAttribute;
+import org.apache.camel.api.management.ManagedResource;
 import org.apache.camel.spi.Resource;
 import org.apache.camel.spi.RoutesBuilderLoader;
 import org.apache.camel.spi.StartupStepRecorder;
 import org.apache.camel.spi.annotations.JdkService;
 import org.apache.camel.support.ResourceHelper;
+import org.apache.camel.support.RoutesBuilderLoaderSupport;
 import org.apache.camel.util.FileUtil;
 import org.apache.camel.util.IOHelper;
 import org.joor.Reflect;
 
+@ManagedResource(description = "Managed JavaRoutesBuilderLoader")
 @JdkService(RoutesBuilderLoader.FACTORY_GROUP + "/" + JoorRoutesBuilderLoader.EXTENSION)
-public class JoorRoutesBuilderLoader implements RoutesBuilderLoader, CamelContextAware {
+public class JoorRoutesBuilderLoader extends RoutesBuilderLoaderSupport {
     public static final String EXTENSION = "java";
     public static final Pattern PACKAGE_PATTERN = Pattern.compile(
             "^\\s*package\\s+([a-zA-Z][\\.\\w]*)\\s*;.*$", Pattern.MULTILINE);
 
-    private CamelContext camelContext;
+    private StartupStepRecorder recorder;
 
     @Override
-    public CamelContext getCamelContext() {
-        return camelContext;
-    }
-
-    @Override
-    public void setCamelContext(CamelContext camelContext) {
-        this.camelContext = camelContext;
+    protected void doBuild() throws Exception {
+        super.doBuild();
+        recorder = getCamelContext().adapt(ExtendedCamelContext.class).getStartupStepRecorder();
     }
 
+    @ManagedAttribute(description = "Supported file extension")
     @Override
     public String getSupportedExtension() {
         return EXTENSION;
@@ -59,8 +58,6 @@ public class JoorRoutesBuilderLoader implements RoutesBuilderLoader, CamelContex
 
     @Override
     public RoutesBuilder loadRoutesBuilder(Resource resource) throws Exception {
-        StartupStepRecorder recorder = camelContext.adapt(ExtendedCamelContext.class).getStartupStepRecorder();
-
         try (InputStream is = resource.getInputStream()) {
             final String content = IOHelper.loadText(is);
             final String name = determineName(resource, content);
@@ -75,7 +72,7 @@ public class JoorRoutesBuilderLoader implements RoutesBuilderLoader, CamelContex
         }
     }
 
-    private String determineName(Resource resource, String content) {
+    private static String determineName(Resource resource, String content) {
         String loc = resource.getLocation();
         // strip scheme to compute the name
         String scheme = ResourceHelper.getScheme(loc);
diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/RoutesBuilderLoader.java b/core/camel-api/src/main/java/org/apache/camel/spi/RoutesBuilderLoader.java
index c43c74f..f55da10 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/RoutesBuilderLoader.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/RoutesBuilderLoader.java
@@ -16,12 +16,15 @@
  */
 package org.apache.camel.spi;
 
+import org.apache.camel.CamelContextAware;
 import org.apache.camel.RoutesBuilder;
+import org.apache.camel.StaticService;
 
 /**
  * SPI for loading {@link RoutesBuilder} from a {@link Resource}.
  */
-public interface RoutesBuilderLoader {
+public interface RoutesBuilderLoader extends StaticService, CamelContextAware {
+
     /**
      * Service factory base path for language specific loaders.
      */
diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/RoutesLoader.java b/core/camel-api/src/main/java/org/apache/camel/spi/RoutesLoader.java
index 3c564c0..1c64dff 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/RoutesLoader.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/RoutesLoader.java
@@ -26,6 +26,7 @@ import org.apache.camel.RoutesBuilder;
  * SPI for loading {@link RoutesBuilder} from a list of {@link Resource}.
  */
 public interface RoutesLoader extends CamelContextAware {
+
     /**
      * Service factory key.
      */
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultRoutesLoader.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultRoutesLoader.java
index 7f7f1b0..b7edaae 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultRoutesLoader.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultRoutesLoader.java
@@ -21,7 +21,6 @@ import java.util.Collection;
 import java.util.List;
 
 import org.apache.camel.CamelContext;
-import org.apache.camel.CamelContextAware;
 import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.spi.FactoryFinder;
@@ -32,7 +31,16 @@ import org.apache.camel.support.ResolverHelper;
 import org.apache.camel.util.FileUtil;
 import org.apache.camel.util.ObjectHelper;
 
+/**
+ * Default {@link RoutesLoader}.
+ */
 public class DefaultRoutesLoader implements RoutesLoader {
+
+    /**
+     * Prefix to use for looking up existing {@link RoutesLoader} from the {@link org.apache.camel.spi.Registry}.
+     */
+    public static final String ROUTES_LOADER_KEY_PREFIX = "routes-builder-loader-";
+
     private CamelContext camelContext;
 
     public DefaultRoutesLoader() {
@@ -78,20 +86,25 @@ public class DefaultRoutesLoader implements RoutesLoader {
      * @return                          a {@link RoutesBuilderLoader}
      * @throws IllegalArgumentException if no {@link RoutesBuilderLoader} can be found for the given file extension
      */
-    private RoutesBuilderLoader getRoutesLoader(String extension) {
-        RoutesBuilderLoader answer = getCamelContext().getRegistry().lookupByNameAndType(extension, RoutesBuilderLoader.class);
+    private RoutesBuilderLoader getRoutesLoader(String extension) throws Exception {
+        RoutesBuilderLoader answer = getCamelContext().getRegistry().lookupByNameAndType(ROUTES_LOADER_KEY_PREFIX + extension,
+                RoutesBuilderLoader.class);
 
         if (answer == null) {
             final ExtendedCamelContext ecc = getCamelContext().adapt(ExtendedCamelContext.class);
             final FactoryFinder finder = ecc.getBootstrapFactoryFinder(RoutesBuilderLoader.FACTORY_PATH);
 
             answer = ResolverHelper.resolveService(ecc, finder, extension, RoutesBuilderLoader.class).orElse(null);
-        }
-        if (answer == null) {
-            throw new IllegalArgumentException(
-                    "Unable to fina a RoutesBuilderLoader for resource with file extension: " + extension);
+            if (answer == null) {
+                throw new IllegalArgumentException(
+                        "Cannot find RoutesBuilderLoader in classpath supporting file extension: " + extension);
+            }
+            // add as service so its lifecycle is managed
+            getCamelContext().addService(answer);
+            // store loader so we can reuse it
+            getCamelContext().getRegistry().bind(ROUTES_LOADER_KEY_PREFIX + extension, answer);
         }
 
-        return CamelContextAware.trySetCamelContext(answer, getCamelContext());
+        return answer;
     }
 }
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/RoutesBuilderLoaderSupport.java b/core/camel-support/src/main/java/org/apache/camel/support/RoutesBuilderLoaderSupport.java
new file mode 100644
index 0000000..3a854d7
--- /dev/null
+++ b/core/camel-support/src/main/java/org/apache/camel/support/RoutesBuilderLoaderSupport.java
@@ -0,0 +1,40 @@
+/*
+ * 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.support;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.spi.RoutesBuilderLoader;
+import org.apache.camel.support.service.ServiceSupport;
+
+/**
+ * Base class for {@link RoutesBuilderLoader} implementations.
+ */
+public abstract class RoutesBuilderLoaderSupport extends ServiceSupport implements RoutesBuilderLoader {
+
+    private CamelContext camelContext;
+
+    @Override
+    public CamelContext getCamelContext() {
+        return camelContext;
+    }
+
+    @Override
+    public void setCamelContext(CamelContext camelContext) {
+        this.camelContext = camelContext;
+    }
+
+}
diff --git a/core/camel-xml-io/src/main/java/org/apache/camel/xml/in/XmlRoutesBuilderLoader.java b/core/camel-xml-io/src/main/java/org/apache/camel/xml/in/XmlRoutesBuilderLoader.java
index c9fe030..3547736 100644
--- a/core/camel-xml-io/src/main/java/org/apache/camel/xml/in/XmlRoutesBuilderLoader.java
+++ b/core/camel-xml-io/src/main/java/org/apache/camel/xml/in/XmlRoutesBuilderLoader.java
@@ -18,31 +18,23 @@ package org.apache.camel.xml.in;
 
 import java.io.InputStream;
 
-import org.apache.camel.CamelContext;
-import org.apache.camel.CamelContextAware;
 import org.apache.camel.RoutesBuilder;
+import org.apache.camel.api.management.ManagedAttribute;
+import org.apache.camel.api.management.ManagedResource;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.spi.Resource;
 import org.apache.camel.spi.RoutesBuilderLoader;
 import org.apache.camel.spi.annotations.JdkService;
+import org.apache.camel.support.RoutesBuilderLoaderSupport;
 
+@ManagedResource(description = "Managed XML RoutesBuilderLoader")
 @JdkService(RoutesBuilderLoader.FACTORY_GROUP + "/" + XmlRoutesBuilderLoader.EXTENSION)
-public class XmlRoutesBuilderLoader implements RoutesBuilderLoader, CamelContextAware {
+public class XmlRoutesBuilderLoader extends RoutesBuilderLoaderSupport {
+
     public static final String EXTENSION = "xml";
     public static final String NAMESPACE = "http://camel.apache.org/schema/spring";
 
-    private CamelContext camelContext;
-
-    @Override
-    public CamelContext getCamelContext() {
-        return camelContext;
-    }
-
-    @Override
-    public void setCamelContext(CamelContext camelContext) {
-        this.camelContext = camelContext;
-    }
-
+    @ManagedAttribute(description = "Supported file extension")
     @Override
     public String getSupportedExtension() {
         return EXTENSION;
diff --git a/core/camel-xml-jaxb/src/main/java/org/apache/camel/xml/jaxb/JaxbXmlRoutesBuilderLoader.java b/core/camel-xml-jaxb/src/main/java/org/apache/camel/xml/jaxb/JaxbXmlRoutesBuilderLoader.java
index e17037b..bf4f3a8 100644
--- a/core/camel-xml-jaxb/src/main/java/org/apache/camel/xml/jaxb/JaxbXmlRoutesBuilderLoader.java
+++ b/core/camel-xml-jaxb/src/main/java/org/apache/camel/xml/jaxb/JaxbXmlRoutesBuilderLoader.java
@@ -18,9 +18,9 @@ package org.apache.camel.xml.jaxb;
 
 import java.io.InputStream;
 
-import org.apache.camel.CamelContext;
-import org.apache.camel.CamelContextAware;
 import org.apache.camel.RoutesBuilder;
+import org.apache.camel.api.management.ManagedAttribute;
+import org.apache.camel.api.management.ManagedResource;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.model.RouteTemplatesDefinition;
 import org.apache.camel.model.RoutesDefinition;
@@ -28,27 +28,17 @@ import org.apache.camel.model.rest.RestsDefinition;
 import org.apache.camel.spi.Resource;
 import org.apache.camel.spi.RoutesBuilderLoader;
 import org.apache.camel.spi.annotations.JdkService;
+import org.apache.camel.support.RoutesBuilderLoaderSupport;
 
-import static org.apache.camel.xml.jaxb.JaxbHelper.loadRestsDefinition;
-import static org.apache.camel.xml.jaxb.JaxbHelper.loadRouteTemplatesDefinition;
-import static org.apache.camel.xml.jaxb.JaxbHelper.loadRoutesDefinition;
+import static org.apache.camel.xml.jaxb.JaxbHelper.*;
 
+@ManagedResource(description = "Managed JAXB XML RoutesBuilderLoader")
 @JdkService(RoutesBuilderLoader.FACTORY_GROUP + "/" + JaxbXmlRoutesBuilderLoader.EXTENSION)
-public class JaxbXmlRoutesBuilderLoader implements RoutesBuilderLoader, CamelContextAware {
-    public static final String EXTENSION = "xml";
-
-    private CamelContext camelContext;
-
-    @Override
-    public CamelContext getCamelContext() {
-        return camelContext;
-    }
+public class JaxbXmlRoutesBuilderLoader extends RoutesBuilderLoaderSupport {
 
-    @Override
-    public void setCamelContext(CamelContext camelContext) {
-        this.camelContext = camelContext;
-    }
+    public static final String EXTENSION = "xml";
 
+    @ManagedAttribute(description = "Supported file extension")
     @Override
     public String getSupportedExtension() {
         return EXTENSION;


[camel] 03/03: CAMEL-16161: Route template does not support autoStartup

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

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

commit 5f336a327dadeb89eba8ae7ca4574ab3e6fab0b2
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Mon Feb 8 09:11:24 2021 +0100

    CAMEL-16161: Route template does not support autoStartup
---
 .../java/org/apache/camel/model/RouteTemplateDefinition.java     | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/RouteTemplateDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/RouteTemplateDefinition.java
index e799ed9..71094e6 100644
--- a/core/camel-core-model/src/main/java/org/apache/camel/model/RouteTemplateDefinition.java
+++ b/core/camel-core-model/src/main/java/org/apache/camel/model/RouteTemplateDefinition.java
@@ -185,11 +185,14 @@ public class RouteTemplateDefinition extends OptionalIdentifiedDefinition {
     public RouteDefinition asRouteDefinition() {
         RouteDefinition copy = new RouteDefinition();
 
-        // do not copy id as it is used for route template id
+        // must set these first in this order
+        copy.setErrorHandlerRef(route.getErrorHandlerRef());
+        copy.setErrorHandlerFactory(route.getErrorHandlerFactory());
+
+        // and then copy over the rest
+        // (do not copy id as it is used for route template id)
         copy.setAutoStartup(route.getAutoStartup());
         copy.setDelayer(route.getDelayer());
-        copy.setErrorHandlerFactory(route.getErrorHandlerFactory());
-        copy.setErrorHandlerRef(route.getErrorHandlerRef());
         copy.setGroup(route.getGroup());
         copy.setInheritErrorHandler(route.isInheritErrorHandler());
         copy.setInput(route.getInput());