This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push: new f79cc775d8b camel-aws - Add dev console for AWS secrets f79cc775d8b is described below commit f79cc775d8bd0c8d92e6c1b2096a2d18ed365c50 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Thu Sep 8 08:28:25 2022 +0200 camel-aws - Add dev console for AWS secrets --- .../component/aws/secretsmanager/SecretsDevConsole.java | 8 +++++--- .../java/org/apache/camel/console/DevConsoleRegistry.java | 8 ++++++++ .../java/org/apache/camel/spi/PropertiesComponent.java | 5 +++++ .../org/apache/camel/impl/engine/AbstractCamelContext.java | 12 +++++++++++- .../apache/camel/impl/engine/BasePackageScanResolver.java | 10 ++++++++++ .../impl/engine/DefaultPackageScanResourceResolver.java | 9 --------- .../camel/component/properties/PropertiesComponent.java | 10 +++++++++- .../camel/impl/console/DefaultDevConsoleRegistry.java | 14 +++++++++++--- 8 files changed, 59 insertions(+), 17 deletions(-) diff --git a/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsDevConsole.java b/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsDevConsole.java index 47f6181122c..9df22cb9476 100644 --- a/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsDevConsole.java +++ b/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsDevConsole.java @@ -47,9 +47,11 @@ public class SecretsDevConsole extends AbstractDevConsole { protected void doStart() throws Exception { super.doStart(); - PropertiesFunction pf = getCamelContext().getPropertiesComponent().getPropertiesFunction("aws"); - if (pf instanceof SecretsManagerPropertiesFunction) { - propertiesFunction = (SecretsManagerPropertiesFunction) pf; + if (getCamelContext().getPropertiesComponent().hasPropertiesFunction("aws")) { + PropertiesFunction pf = getCamelContext().getPropertiesComponent().getPropertiesFunction("aws"); + if (pf instanceof SecretsManagerPropertiesFunction) { + propertiesFunction = (SecretsManagerPropertiesFunction) pf; + } } AwsVaultConfiguration aws = getCamelContext().getVaultConfiguration().getAwsVaultConfiguration(); if (aws != null && aws.isRefreshEnabled()) { diff --git a/core/camel-api/src/main/java/org/apache/camel/console/DevConsoleRegistry.java b/core/camel-api/src/main/java/org/apache/camel/console/DevConsoleRegistry.java index 3f843b2268f..bfc36bca1b6 100644 --- a/core/camel-api/src/main/java/org/apache/camel/console/DevConsoleRegistry.java +++ b/core/camel-api/src/main/java/org/apache/camel/console/DevConsoleRegistry.java @@ -110,4 +110,12 @@ public interface DevConsoleRegistry extends CamelContextAware, StaticService, Id */ void loadDevConsoles(); + /** + * Loads custom dev consoles by scanning classpath. + * + * @param force force re-scanning such as when additional JARs has been added to the classpath that + * can include custom dev consoles + */ + void loadDevConsoles(boolean force); + } diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/PropertiesComponent.java b/core/camel-api/src/main/java/org/apache/camel/spi/PropertiesComponent.java index 093e2f856de..4c284a7618f 100644 --- a/core/camel-api/src/main/java/org/apache/camel/spi/PropertiesComponent.java +++ b/core/camel-api/src/main/java/org/apache/camel/spi/PropertiesComponent.java @@ -194,6 +194,11 @@ public interface PropertiesComponent extends StaticService { */ PropertiesFunction getPropertiesFunction(String name); + /** + * Is there a {@link PropertiesFunction} with the given name? + */ + boolean hasPropertiesFunction(String name); + /** * Whether to silently ignore if a location cannot be located, such as a properties file not found. */ diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java index d89ae2be645..bbbec22a1ed 100644 --- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java +++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java @@ -2871,7 +2871,7 @@ public abstract class AbstractCamelContext extends BaseService } // ensure additional dev consoles is loaded if (devConsole) { - StartupStep step4 = startupStepRecorder.beginStep(CamelContext.class, null, "Scan DevConsoles"); + StartupStep step4 = startupStepRecorder.beginStep(CamelContext.class, null, "Scan DevConsoles (phase 1)"); DevConsoleRegistry dcr = getExtension(DevConsoleRegistry.class); if (dcr != null) { dcr.loadDevConsoles(); @@ -3420,6 +3420,16 @@ public abstract class AbstractCamelContext extends BaseService startupStepRecorder.endStep(subStep); } + // ensure extra dev consoles is loaded in case additional JARs has been dynamically added to the classpath + if (devConsole) { + StartupStep step = startupStepRecorder.beginStep(CamelContext.class, null, "Scan DevConsoles (phase 2)"); + DevConsoleRegistry dcr = getExtension(DevConsoleRegistry.class); + if (dcr != null) { + dcr.loadDevConsoles(true); + } + startupStepRecorder.endStep(step); + } + long cacheCounter = beanIntrospection != null ? beanIntrospection.getCachedClassesCounter() : 0; if (cacheCounter > 0) { LOG.debug("Clearing BeanIntrospection cache with {} objects using during starting Camel", cacheCounter); diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/BasePackageScanResolver.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/BasePackageScanResolver.java index fb69ad07cd6..50d5e34d8a1 100644 --- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/BasePackageScanResolver.java +++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/BasePackageScanResolver.java @@ -61,6 +61,16 @@ public abstract class BasePackageScanResolver extends ServiceSupport implements classLoaders.add(BasePackageScanResolver.class.getClassLoader()); } + @Override + protected void doInit() throws Exception { + super.doInit(); + + // ensure we also use app context class-loader + if (camelContext.getApplicationContextClassLoader() != null) { + addClassLoader(camelContext.getApplicationContextClassLoader()); + } + } + @Override public CamelContext getCamelContext() { return camelContext; diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultPackageScanResourceResolver.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultPackageScanResourceResolver.java index acefea650e3..00516579e52 100644 --- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultPackageScanResourceResolver.java +++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultPackageScanResourceResolver.java @@ -332,13 +332,4 @@ public class DefaultPackageScanResourceResolver extends BasePackageScanResolver } } - @Override - protected void doInit() throws Exception { - ObjectHelper.notNull(getCamelContext(), "CamelContext", this); - } - - @Override - protected void doStop() throws Exception { - // noop - } } diff --git a/core/camel-base/src/main/java/org/apache/camel/component/properties/PropertiesComponent.java b/core/camel-base/src/main/java/org/apache/camel/component/properties/PropertiesComponent.java index 93b51b39089..f349ce26ba9 100644 --- a/core/camel-base/src/main/java/org/apache/camel/component/properties/PropertiesComponent.java +++ b/core/camel-base/src/main/java/org/apache/camel/component/properties/PropertiesComponent.java @@ -574,11 +574,19 @@ public class PropertiesComponent extends ServiceSupport propertiesFunctionResolver.addPropertiesFunction(function); } + @Override + public boolean hasPropertiesFunction(String name) { + return propertiesFunctionResolver.hasFunction(name); + } + /** * Is there a {@link PropertiesFunction} with the given name? + * + * @deprecated use hasPropertiesFunction */ + @Deprecated public boolean hasFunction(String name) { - return propertiesFunctionResolver.hasFunction(name); + return hasPropertiesFunction(name); } @ManagedAttribute(description = "System properties mode") diff --git a/core/camel-console/src/main/java/org/apache/camel/impl/console/DefaultDevConsoleRegistry.java b/core/camel-console/src/main/java/org/apache/camel/impl/console/DefaultDevConsoleRegistry.java index 8577305469e..7b97e6a7f96 100644 --- a/core/camel-console/src/main/java/org/apache/camel/impl/console/DefaultDevConsoleRegistry.java +++ b/core/camel-console/src/main/java/org/apache/camel/impl/console/DefaultDevConsoleRegistry.java @@ -164,21 +164,29 @@ public class DefaultDevConsoleRegistry extends ServiceSupport implements DevCons @Override public void loadDevConsoles() { + loadDevConsoles(false); + } + + @Override + public void loadDevConsoles(boolean force) { StopWatch watch = new StopWatch(); - if (!loadDevConsolesDone) { + if (!loadDevConsolesDone || force) { loadDevConsolesDone = true; DefaultDevConsolesLoader loader = new DefaultDevConsolesLoader(camelContext); Collection<DevConsole> col = loader.loadDevConsoles(); if (col.size() > 0) { + int added = 0; // register the loaded consoles for (DevConsole console : col) { - register(console); + if (register(console)) { + added++; + } } String time = TimeUtils.printDuration(watch.taken(), true); - LOG.debug("Dev consoles (scanned: {}) loaded in {}", col.size(), time); + LOG.debug("Dev consoles (scanned: {} registered:{}) loaded in {}", col.size(), added, time); } } }