You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by or...@apache.org on 2023/03/31 14:08:43 UTC

[camel] branch main updated (5bf144ba7ab -> d004d1b69da)

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

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


    from 5bf144ba7ab Update Jenkinsfile.s390x
     new b1cd3423bbf CAMEL-15105: cleanup BootstrapFactories handling
     new d004d1b69da CAMEL-15105: make the PackageScanClassResolver a plugin of the context

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.


Summary of changes:
 .../mapstruct/DefaultMapStructFinder.java          |  3 +-
 .../component/salesforce/SalesforceComponent.java  |  5 +--
 .../camel/spring/xml/CamelContextFactoryBean.java  |  7 ++--
 .../DefaultPackageResolverConfigureTest.java       |  3 +-
 .../org/apache/camel/ExtendedCamelContext.java     | 15 ---------
 .../camel/impl/engine/AbstractCamelContext.java    | 14 ++------
 .../impl/engine/DefaultCamelContextExtension.java  | 37 +++++++---------------
 .../camel/impl/engine/SimpleCamelContext.java      |  2 +-
 .../impl/converter/BaseTypeConverterRegistry.java  |  3 +-
 .../camel/impl/ExtendedCamelContextConfigurer.java |  6 ----
 .../impl/lw/LightweightCamelContextExtension.java  | 11 -------
 .../core/xml/AbstractCamelContextFactoryBean.java  |  2 +-
 .../org/apache/camel/main/BaseMainSupport.java     |  2 +-
 .../org/apache/camel/main/RoutesConfigurer.java    |  4 +--
 .../management/mbean/ManagedCamelContext.java      |  3 +-
 .../org/apache/camel/support/PluginHelper.java     | 19 +++++++++++
 .../java/org/apache/camel/main/KameletMain.java    |  3 +-
 .../download/BasePackageScanDownloadListener.java  |  2 +-
 18 files changed, 57 insertions(+), 84 deletions(-)


[camel] 02/02: CAMEL-15105: make the PackageScanClassResolver a plugin of the context

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

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

commit d004d1b69da8fc69f5b88cf63ff5d337200f6f8c
Author: Otavio Rodolfo Piske <an...@gmail.com>
AuthorDate: Fri Mar 31 14:42:59 2023 +0200

    CAMEL-15105: make the PackageScanClassResolver a plugin of the context
---
 .../component/mapstruct/DefaultMapStructFinder.java   |  3 ++-
 .../component/salesforce/SalesforceComponent.java     |  5 +++--
 .../camel/spring/xml/CamelContextFactoryBean.java     |  7 ++++---
 .../config/DefaultPackageResolverConfigureTest.java   |  3 ++-
 .../java/org/apache/camel/ExtendedCamelContext.java   | 15 ---------------
 .../camel/impl/engine/AbstractCamelContext.java       |  8 ++------
 .../impl/engine/DefaultCamelContextExtension.java     | 18 ------------------
 .../apache/camel/impl/engine/SimpleCamelContext.java  |  2 +-
 .../impl/converter/BaseTypeConverterRegistry.java     |  3 ++-
 .../camel/impl/ExtendedCamelContextConfigurer.java    |  6 ------
 .../impl/lw/LightweightCamelContextExtension.java     | 11 -----------
 .../core/xml/AbstractCamelContextFactoryBean.java     |  2 +-
 .../java/org/apache/camel/main/BaseMainSupport.java   |  2 +-
 .../java/org/apache/camel/main/RoutesConfigurer.java  |  4 ++--
 .../camel/management/mbean/ManagedCamelContext.java   |  3 ++-
 .../java/org/apache/camel/support/PluginHelper.java   | 19 +++++++++++++++++++
 .../main/java/org/apache/camel/main/KameletMain.java  |  3 ++-
 .../download/BasePackageScanDownloadListener.java     |  2 +-
 18 files changed, 44 insertions(+), 72 deletions(-)

diff --git a/components/camel-mapstruct/src/main/java/org/apache/camel/component/mapstruct/DefaultMapStructFinder.java b/components/camel-mapstruct/src/main/java/org/apache/camel/component/mapstruct/DefaultMapStructFinder.java
index 6d2ce09841b..c528b0ef3c9 100644
--- a/components/camel-mapstruct/src/main/java/org/apache/camel/component/mapstruct/DefaultMapStructFinder.java
+++ b/components/camel-mapstruct/src/main/java/org/apache/camel/component/mapstruct/DefaultMapStructFinder.java
@@ -22,6 +22,7 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.support.ObjectHelper;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.support.SimpleTypeConverter;
 import org.apache.camel.support.service.ServiceSupport;
 import org.apache.camel.util.ReflectionHelper;
@@ -97,7 +98,7 @@ public class DefaultMapStructFinder extends ServiceSupport implements MapStructM
         if (mapperPackageName != null) {
             String[] names = mapperPackageName.split(",");
             ExtendedCamelContext ecc = camelContext.getCamelContextExtension();
-            var set = ecc.getPackageScanClassResolver()
+            var set = PluginHelper.getPackageScanClassResolver(ecc)
                     .findByFilter(f -> f.getName().endsWith("Mapper"), names);
             if (!set.isEmpty()) {
                 int converters = 0;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceComponent.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceComponent.java
index 4fe31920237..fd1745fdce8 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceComponent.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceComponent.java
@@ -42,6 +42,7 @@ import org.apache.camel.component.salesforce.internal.streaming.SubscriptionHelp
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.annotations.Component;
 import org.apache.camel.support.DefaultComponent;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.support.PropertyBindingSupport;
 import org.apache.camel.support.jsse.KeyStoreParameters;
 import org.apache.camel.support.jsse.SSLContextParameters;
@@ -351,7 +352,7 @@ public class SalesforceComponent extends DefaultComponent implements SSLContextP
 
     private Map<String, Class<?>> parsePackages() {
         Map<String, Class<?>> result = new HashMap<>();
-        Set<Class<?>> classes = getCamelContext().getCamelContextExtension().getPackageScanClassResolver()
+        Set<Class<?>> classes = PluginHelper.getPackageScanClassResolver(getCamelContext())
                 .findImplementations(AbstractDTOBase.class, getPackagesAsArray());
         for (Class<?> aClass : classes) {
             result.put(aClass.getSimpleName(), aClass);
@@ -362,7 +363,7 @@ public class SalesforceComponent extends DefaultComponent implements SSLContextP
     private Map<String, Class<?>> scanEventClasses() {
         Map<String, Class<?>> result = new HashMap<>();
 
-        Set<Class<?>> classes = getCamelContext().getCamelContextExtension().getPackageScanClassResolver()
+        Set<Class<?>> classes = PluginHelper.getPackageScanClassResolver(getCamelContext())
                 .findImplementations(SpecificRecord.class, SALESFORCE_EVENTBUS_PACKAGE);
         for (Class<?> aClass : classes) {
             result.put(aClass.getName(), aClass);
diff --git a/components/camel-spring-xml/src/main/java/org/apache/camel/spring/xml/CamelContextFactoryBean.java b/components/camel-spring-xml/src/main/java/org/apache/camel/spring/xml/CamelContextFactoryBean.java
index 33d2373355a..44048337c3e 100644
--- a/components/camel-spring-xml/src/main/java/org/apache/camel/spring/xml/CamelContextFactoryBean.java
+++ b/components/camel-spring-xml/src/main/java/org/apache/camel/spring/xml/CamelContextFactoryBean.java
@@ -76,6 +76,7 @@ import org.apache.camel.spi.Registry;
 import org.apache.camel.spring.SpringCamelContext;
 import org.apache.camel.spring.spi.BridgePropertyPlaceholderConfigurer;
 import org.apache.camel.support.CamelContextHelper;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.util.StopWatch;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -318,15 +319,15 @@ public class CamelContextFactoryBean extends AbstractCamelContextFactoryBean<Spr
     protected void findRouteBuildersByPackageScan(String[] packages, PackageScanFilter filter, List<RoutesBuilder> builders)
             throws Exception {
         // add filter to class resolver which then will filter
-        getContext().getCamelContextExtension().getPackageScanClassResolver().addFilter(filter);
+        PluginHelper.getPackageScanClassResolver(getContext()).addFilter(filter);
 
         PackageScanRouteBuilderFinder finder = new PackageScanRouteBuilderFinder(
                 getContext(), packages, getContextClassLoaderOnStart(),
-                getBeanPostProcessor(), getContext().getCamelContextExtension().getPackageScanClassResolver());
+                getBeanPostProcessor(), PluginHelper.getPackageScanClassResolver(getContext()));
         finder.appendBuilders(builders);
 
         // and remove the filter
-        getContext().getCamelContextExtension().getPackageScanClassResolver().removeFilter(filter);
+        PluginHelper.getPackageScanClassResolver(getContext()).removeFilter(filter);
     }
 
     @Override
diff --git a/components/camel-spring-xml/src/test/java/org/apache/camel/spring/config/DefaultPackageResolverConfigureTest.java b/components/camel-spring-xml/src/test/java/org/apache/camel/spring/config/DefaultPackageResolverConfigureTest.java
index f41ff1af340..52e93b35391 100644
--- a/components/camel-spring-xml/src/test/java/org/apache/camel/spring/config/DefaultPackageResolverConfigureTest.java
+++ b/components/camel-spring-xml/src/test/java/org/apache/camel/spring/config/DefaultPackageResolverConfigureTest.java
@@ -18,6 +18,7 @@ package org.apache.camel.spring.config;
 
 import org.apache.camel.impl.engine.DefaultPackageScanClassResolver;
 import org.apache.camel.spring.SpringTestSupport;
+import org.apache.camel.support.PluginHelper;
 import org.junit.jupiter.api.Test;
 import org.springframework.context.support.AbstractXmlApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
@@ -34,7 +35,7 @@ public class DefaultPackageResolverConfigureTest extends SpringTestSupport {
     @Test
     public void testSetAcceptableSchema() throws Exception {
         DefaultPackageScanClassResolver resolver
-                = (DefaultPackageScanClassResolver) context.getCamelContextExtension().getPackageScanClassResolver();
+                = (DefaultPackageScanClassResolver) PluginHelper.getPackageScanClassResolver(context);
         assertNotNull(resolver);
     }
 
diff --git a/core/camel-api/src/main/java/org/apache/camel/ExtendedCamelContext.java b/core/camel-api/src/main/java/org/apache/camel/ExtendedCamelContext.java
index 29c4c022848..2ff49911d8f 100644
--- a/core/camel-api/src/main/java/org/apache/camel/ExtendedCamelContext.java
+++ b/core/camel-api/src/main/java/org/apache/camel/ExtendedCamelContext.java
@@ -47,7 +47,6 @@ import org.apache.camel.spi.ModelJAXBContextFactory;
 import org.apache.camel.spi.ModelToXMLDumper;
 import org.apache.camel.spi.ModelineFactory;
 import org.apache.camel.spi.NormalizedEndpointUri;
-import org.apache.camel.spi.PackageScanClassResolver;
 import org.apache.camel.spi.PackageScanResourceResolver;
 import org.apache.camel.spi.PeriodTaskResolver;
 import org.apache.camel.spi.PeriodTaskScheduler;
@@ -324,20 +323,6 @@ public interface ExtendedCamelContext {
      */
     void setDevConsoleResolver(DevConsoleResolver devConsoleResolver);
 
-    /**
-     * Returns the package scanning class resolver
-     *
-     * @return the resolver
-     */
-    PackageScanClassResolver getPackageScanClassResolver();
-
-    /**
-     * Sets the package scanning class resolver to use
-     *
-     * @param resolver the resolver
-     */
-    void setPackageScanClassResolver(PackageScanClassResolver resolver);
-
     /**
      * Returns the package scanning resource resolver
      *
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 bc523f62dd4..c8b8351f60a 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
@@ -224,7 +224,6 @@ public abstract class AbstractCamelContext extends BaseService
     volatile ModelToXMLDumper modelToXMLDumper;
     volatile RestBindingJaxbDataFormatFactory restBindingJaxbDataFormatFactory;
     volatile RuntimeCamelCatalog runtimeCamelCatalog;
-    volatile PackageScanClassResolver packageScanClassResolver;
     volatile PackageScanResourceResolver packageScanResourceResolver;
     volatile ModelineFactory modelineFactory;
     volatile ProcessorFactory processorFactory;
@@ -380,6 +379,7 @@ public abstract class AbstractCamelContext extends BaseService
         camelContextExtension.addContextPlugin(ConfigurerResolver.class, createConfigurerResolver());
         camelContextExtension.addContextPlugin(UriFactoryResolver.class, createUriFactoryResolver());
         camelContextExtension.addContextPlugin(FactoryFinderResolver.class, createFactoryFinderResolver());
+        camelContextExtension.addContextPlugin(PackageScanClassResolver.class, createPackageScanClassResolver());
 
         if (build) {
             try {
@@ -2657,7 +2657,7 @@ public abstract class AbstractCamelContext extends BaseService
             LOG.debug(
                     "Using ClassResolver={}, PackageScanClassResolver={}, ApplicationContextClassLoader={}, RouteController={}",
                     getClassResolver(),
-                    camelContextExtension.getPackageScanClassResolver(), getApplicationContextClassLoader(),
+                    PluginHelper.getPackageScanClassResolver(camelContextExtension), getApplicationContextClassLoader(),
                     getRouteController());
         }
         if (isStreamCaching()) {
@@ -4165,10 +4165,6 @@ public abstract class AbstractCamelContext extends BaseService
         camelContextExtension.setDataFormatResolver(dataFormatResolver);
     }
 
-    public PackageScanClassResolver getPackageScanClassResolver() {
-        return camelContextExtension.getPackageScanClassResolver();
-    }
-
     public FactoryFinder getBootstrapFactoryFinder() {
         return camelContextExtension.getBootstrapFactoryFinder();
     }
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultCamelContextExtension.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultCamelContextExtension.java
index d4574b68dd2..b75cd99cb41 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultCamelContextExtension.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultCamelContextExtension.java
@@ -66,7 +66,6 @@ import org.apache.camel.spi.ModelJAXBContextFactory;
 import org.apache.camel.spi.ModelToXMLDumper;
 import org.apache.camel.spi.ModelineFactory;
 import org.apache.camel.spi.NormalizedEndpointUri;
-import org.apache.camel.spi.PackageScanClassResolver;
 import org.apache.camel.spi.PackageScanResourceResolver;
 import org.apache.camel.spi.PeriodTaskResolver;
 import org.apache.camel.spi.PeriodTaskScheduler;
@@ -370,23 +369,6 @@ class DefaultCamelContextExtension implements ExtendedCamelContext {
         return factories.computeIfAbsent(path, camelContext::createFactoryFinder);
     }
 
-    @Override
-    public PackageScanClassResolver getPackageScanClassResolver() {
-        if (camelContext.packageScanClassResolver == null) {
-            synchronized (camelContext.lock) {
-                if (camelContext.packageScanClassResolver == null) {
-                    setPackageScanClassResolver(camelContext.createPackageScanClassResolver());
-                }
-            }
-        }
-        return camelContext.packageScanClassResolver;
-    }
-
-    @Override
-    public void setPackageScanClassResolver(PackageScanClassResolver packageScanClassResolver) {
-        camelContext.packageScanClassResolver = camelContext.getInternalServiceManager().addService(packageScanClassResolver);
-    }
-
     @Override
     public PackageScanResourceResolver getPackageScanResourceResolver() {
         if (camelContext.packageScanResourceResolver == null) {
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java
index 0b3c4b493a8..cf3b57f29b6 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java
@@ -162,7 +162,7 @@ public class SimpleCamelContext extends AbstractCamelContext {
     @Override
     protected TypeConverter createTypeConverter() {
         return new DefaultTypeConverter(
-                getCamelContextReference(), getPackageScanClassResolver(), getInjector(),
+                getCamelContextReference(), PluginHelper.getPackageScanClassResolver(this), getInjector(),
                 isLoadTypeConverters());
     }
 
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java b/core/camel-base/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java
index 787d8a9f20c..6b2fec49763 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java
@@ -38,6 +38,7 @@ import org.apache.camel.TypeConverterLoaderException;
 import org.apache.camel.spi.Injector;
 import org.apache.camel.spi.PackageScanClassResolver;
 import org.apache.camel.spi.TypeConverterLoader;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.util.IOHelper;
 import org.apache.camel.util.ObjectHelper;
 import org.slf4j.Logger;
@@ -286,7 +287,7 @@ public abstract class BaseTypeConverterRegistry extends CoreTypeConverterRegistr
             injector = camelContext.getInjector();
         }
         if (resolver == null && camelContext != null) {
-            resolver = camelContext.getCamelContextExtension().getPackageScanClassResolver();
+            resolver = PluginHelper.getPackageScanClassResolver(camelContext);
         }
 
         List<FallbackTypeConverter> fallbacks = new ArrayList<>();
diff --git a/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java b/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java
index 3cda3d5c5ce..3bbdbaa8bd5 100644
--- a/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java
+++ b/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java
@@ -65,8 +65,6 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com
         case "ModelineFactory": target.setModelineFactory(property(camelContext, org.apache.camel.spi.ModelineFactory.class, value)); return true;
         case "name":
         case "Name": target.setName(property(camelContext, java.lang.String.class, value)); return true;
-        case "packagescanclassresolver":
-        case "PackageScanClassResolver": target.setPackageScanClassResolver(property(camelContext, org.apache.camel.spi.PackageScanClassResolver.class, value)); return true;
         case "packagescanresourceresolver":
         case "PackageScanResourceResolver": target.setPackageScanResourceResolver(property(camelContext, org.apache.camel.spi.PackageScanResourceResolver.class, value)); return true;
         case "periodtaskresolver":
@@ -146,8 +144,6 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com
         case "ModelineFactory": return org.apache.camel.spi.ModelineFactory.class;
         case "name":
         case "Name": return java.lang.String.class;
-        case "packagescanclassresolver":
-        case "PackageScanClassResolver": return org.apache.camel.spi.PackageScanClassResolver.class;
         case "packagescanresourceresolver":
         case "PackageScanResourceResolver": return org.apache.camel.spi.PackageScanResourceResolver.class;
         case "periodtaskresolver":
@@ -228,8 +224,6 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com
         case "ModelineFactory": return target.getModelineFactory();
         case "name":
         case "Name": return target.getName();
-        case "packagescanclassresolver":
-        case "PackageScanClassResolver": return target.getPackageScanClassResolver();
         case "packagescanresourceresolver":
         case "PackageScanResourceResolver": return target.getPackageScanResourceResolver();
         case "periodtaskresolver":
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContextExtension.java b/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContextExtension.java
index a76ede90a26..0d159be27f3 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContextExtension.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContextExtension.java
@@ -61,7 +61,6 @@ import org.apache.camel.spi.ModelJAXBContextFactory;
 import org.apache.camel.spi.ModelToXMLDumper;
 import org.apache.camel.spi.ModelineFactory;
 import org.apache.camel.spi.NormalizedEndpointUri;
-import org.apache.camel.spi.PackageScanClassResolver;
 import org.apache.camel.spi.PackageScanResourceResolver;
 import org.apache.camel.spi.PeriodTaskResolver;
 import org.apache.camel.spi.PeriodTaskScheduler;
@@ -266,16 +265,6 @@ class LightweightCamelContextExtension implements ExtendedCamelContext {
         throw new UnsupportedOperationException();
     }
 
-    @Override
-    public PackageScanClassResolver getPackageScanClassResolver() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void setPackageScanClassResolver(PackageScanClassResolver resolver) {
-        throw new UnsupportedOperationException();
-    }
-
     @Override
     public PackageScanResourceResolver getPackageScanResourceResolver() {
         throw new UnsupportedOperationException();
diff --git a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
index 5db99231869..7ada9d2f3c2 100644
--- a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
+++ b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
@@ -202,7 +202,7 @@ public abstract class AbstractCamelContextFactoryBean<T extends ModelCamelContex
         PackageScanClassResolver packageResolver = getBeanForType(PackageScanClassResolver.class);
         if (packageResolver != null) {
             LOG.info("Using custom PackageScanClassResolver: {}", packageResolver);
-            getContext().getCamelContextExtension().setPackageScanClassResolver(packageResolver);
+            getContext().getCamelContextExtension().addContextPlugin(PackageScanClassResolver.class, packageResolver);
         }
 
         // also set type converter registry as early as possible
diff --git a/core/camel-main/src/main/java/org/apache/camel/main/BaseMainSupport.java b/core/camel-main/src/main/java/org/apache/camel/main/BaseMainSupport.java
index 73257a02a59..14a5a091135 100644
--- a/core/camel-main/src/main/java/org/apache/camel/main/BaseMainSupport.java
+++ b/core/camel-main/src/main/java/org/apache/camel/main/BaseMainSupport.java
@@ -268,7 +268,7 @@ public abstract class BaseMainSupport extends BaseService {
         // auto-detect camel configurations via base package scanning
         String basePackage = camelContext.getCamelContextExtension().getBasePackageScan();
         if (basePackage != null) {
-            PackageScanClassResolver pscr = camelContext.getCamelContextExtension().getPackageScanClassResolver();
+            PackageScanClassResolver pscr = PluginHelper.getPackageScanClassResolver(camelContext);
             Set<Class<?>> found1 = pscr.findImplementations(CamelConfiguration.class, basePackage);
             Set<Class<?>> found2 = pscr.findAnnotated(Configuration.class, basePackage);
             Set<Class<?>> found = new LinkedHashSet<>();
diff --git a/core/camel-main/src/main/java/org/apache/camel/main/RoutesConfigurer.java b/core/camel-main/src/main/java/org/apache/camel/main/RoutesConfigurer.java
index 7726e6876e3..1434ac72c47 100644
--- a/core/camel-main/src/main/java/org/apache/camel/main/RoutesConfigurer.java
+++ b/core/camel-main/src/main/java/org/apache/camel/main/RoutesConfigurer.java
@@ -31,6 +31,7 @@ import org.apache.camel.spi.ModelineFactory;
 import org.apache.camel.spi.Resource;
 import org.apache.camel.spi.RoutesLoader;
 import org.apache.camel.support.OrderedComparator;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.util.StopWatch;
 import org.apache.camel.util.TimeUtils;
 import org.slf4j.Logger;
@@ -153,8 +154,7 @@ public class RoutesConfigurer {
 
         if (getBasePackageScan() != null) {
             String[] pkgs = getBasePackageScan().split(",");
-            Set<Class<?>> set = camelContext.getCamelContextExtension()
-                    .getPackageScanClassResolver()
+            Set<Class<?>> set = PluginHelper.getPackageScanClassResolver(camelContext)
                     .findImplementations(RoutesBuilder.class, pkgs);
             for (Class<?> routeClazz : set) {
                 Object builder = camelContext.getInjector().newInstance(routeClazz);
diff --git a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java
index 6452ec986f3..0bf5c293644 100644
--- a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java
+++ b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java
@@ -53,6 +53,7 @@ import org.apache.camel.model.rest.RestDefinition;
 import org.apache.camel.model.rest.RestsDefinition;
 import org.apache.camel.spi.ManagementStrategy;
 import org.apache.camel.spi.UnitOfWork;
+import org.apache.camel.support.PluginHelper;
 
 @ManagedResource(description = "Managed CamelContext")
 public class ManagedCamelContext extends ManagedPerformanceCounter implements TimerListener, ManagedCamelContextMBean {
@@ -181,7 +182,7 @@ public class ManagedCamelContext extends ManagedPerformanceCounter implements Ti
 
     @Override
     public String getPackageScanClassResolver() {
-        return context.getCamelContextExtension().getPackageScanClassResolver().getClass().getName();
+        return PluginHelper.getPackageScanClassResolver(context).getClass().getName();
     }
 
     @Override
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/PluginHelper.java b/core/camel-support/src/main/java/org/apache/camel/support/PluginHelper.java
index 636dd5db4c3..e8291f23521 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/PluginHelper.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/PluginHelper.java
@@ -28,6 +28,7 @@ import org.apache.camel.spi.ComponentResolver;
 import org.apache.camel.spi.ConfigurerResolver;
 import org.apache.camel.spi.FactoryFinderResolver;
 import org.apache.camel.spi.LanguageResolver;
+import org.apache.camel.spi.PackageScanClassResolver;
 import org.apache.camel.spi.UriFactoryResolver;
 
 public final class PluginHelper {
@@ -186,4 +187,22 @@ public final class PluginHelper {
     public static FactoryFinderResolver getFactoryFinderResolver(ExtendedCamelContext extendedCamelContext) {
         return extendedCamelContext.getContextPlugin(FactoryFinderResolver.class);
     }
+
+    /**
+     * Returns the package scanning class resolver
+     *
+     * @return the resolver
+     */
+    public static PackageScanClassResolver getPackageScanClassResolver(CamelContext camelContext) {
+        return getPackageScanClassResolver(camelContext.getCamelContextExtension());
+    }
+
+    /**
+     * Returns the package scanning class resolver
+     *
+     * @return the resolver
+     */
+    public static PackageScanClassResolver getPackageScanClassResolver(ExtendedCamelContext extendedCamelContext) {
+        return extendedCamelContext.getContextPlugin(PackageScanClassResolver.class);
+    }
 }
diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java
index c1e9ae3a555..71cac713ec8 100644
--- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java
+++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java
@@ -61,6 +61,7 @@ import org.apache.camel.spi.LanguageResolver;
 import org.apache.camel.spi.Registry;
 import org.apache.camel.spi.UriFactoryResolver;
 import org.apache.camel.startup.jfr.FlightRecorderStartupStepRecorder;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.support.service.ServiceHelper;
 
 /**
@@ -308,7 +309,7 @@ public class KameletMain extends MainCommandLineSupport {
         if (download) {
             ClassLoader dynamicCL = createApplicationContextClassLoader();
             answer.setApplicationContextClassLoader(dynamicCL);
-            answer.getCamelContextExtension().getPackageScanClassResolver().addClassLoader(dynamicCL);
+            PluginHelper.getPackageScanClassResolver(answer).addClassLoader(dynamicCL);
             answer.getCamelContextExtension().getPackageScanResourceResolver().addClassLoader(dynamicCL);
 
             KnownReposResolver known = new KnownReposResolver(camelContext);
diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/BasePackageScanDownloadListener.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/BasePackageScanDownloadListener.java
index 2f5505e6860..4a8281d3110 100644
--- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/BasePackageScanDownloadListener.java
+++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/BasePackageScanDownloadListener.java
@@ -66,7 +66,7 @@ public class BasePackageScanDownloadListener implements ArtifactDownloadListener
     protected void basePackageScanConfiguration(String basePackage, File file) throws Exception {
         Collection<CamelConfiguration> configs = new ArrayList<>();
         // we only want to scan via isolated classloader
-        PackageScanClassResolver pscr = camelContext.getCamelContextExtension().getPackageScanClassResolver();
+        PackageScanClassResolver pscr = PluginHelper.getPackageScanClassResolver(camelContext);
         Set<Class<?>> found1 = pscr.findImplementations(CamelConfiguration.class, basePackage);
         Set<Class<?>> found2 = pscr.findAnnotated(Configuration.class, basePackage);
         Set<Class<?>> found = new LinkedHashSet<>();


[camel] 01/02: CAMEL-15105: cleanup BootstrapFactories handling

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

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

commit b1cd3423bbf2d705a73ca4f045a5faf7b16007c9
Author: Otavio Rodolfo Piske <an...@gmail.com>
AuthorDate: Fri Mar 31 14:02:10 2023 +0200

    CAMEL-15105: cleanup BootstrapFactories handling
---
 .../camel/impl/engine/AbstractCamelContext.java       |  6 +-----
 .../impl/engine/DefaultCamelContextExtension.java     | 19 ++++++++++++-------
 2 files changed, 13 insertions(+), 12 deletions(-)

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 09d6ea72808..bc523f62dd4 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
@@ -201,8 +201,7 @@ public abstract class AbstractCamelContext extends BaseService
 
     // start auto assigning route ids using numbering 1000 and upwards
     final List<BootstrapCloseable> bootstraps = new CopyOnWriteArrayList<>();
-    final Map<String, FactoryFinder> bootstrapFactories = new ConcurrentHashMap<>();
-    volatile FactoryFinder bootstrapFactoryFinder;
+
     final Object lock = new Object();
     final RouteController internalRouteController = new InternalRouteController(this);
     volatile DeferServiceFactory deferServiceFactory;
@@ -370,9 +369,6 @@ public abstract class AbstractCamelContext extends BaseService
         // add the default bootstrap closer
         this.bootstraps.add(new DefaultServiceBootstrapCloseable(this));
 
-        // add a cleaner for FactoryFinder used only when bootstrapping the context
-        this.bootstraps.add(bootstrapFactories::clear);
-
         this.internalServiceManager = new InternalServiceManager(this, internalRouteStartupManager, startupListeners);
 
         camelContextExtension.addContextPlugin(CamelBeanPostProcessor.class, createBeanPostProcessor());
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultCamelContextExtension.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultCamelContextExtension.java
index eb9aa0c961c..d4574b68dd2 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultCamelContextExtension.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultCamelContextExtension.java
@@ -98,6 +98,7 @@ class DefaultCamelContextExtension implements ExtendedCamelContext {
     private final ThreadLocal<Boolean> isSetupRoutes = new ThreadLocal<>();
     private final List<InterceptStrategy> interceptStrategies = new ArrayList<>();
     private final Map<String, FactoryFinder> factories = new ConcurrentHashMap<>();
+    private final Map<String, FactoryFinder> bootstrapFactories = new ConcurrentHashMap<>();
     private final Set<LogListener> logListeners = new LinkedHashSet<>();
     private final PluginManager pluginManager = new DefaultContextPluginManager();
     private volatile String description;
@@ -106,6 +107,10 @@ class DefaultCamelContextExtension implements ExtendedCamelContext {
     private String basePackageScan;
     private boolean lightweight;
 
+    private final Object lock = new Object();
+
+    private volatile FactoryFinder bootstrapFactoryFinder;
+
     public DefaultCamelContextExtension(AbstractCamelContext camelContext) {
         this.camelContext = camelContext;
     }
@@ -338,26 +343,26 @@ class DefaultCamelContextExtension implements ExtendedCamelContext {
 
     @Override
     public FactoryFinder getBootstrapFactoryFinder() {
-        if (camelContext.bootstrapFactoryFinder == null) {
-            synchronized (camelContext.lock) {
-                if (camelContext.bootstrapFactoryFinder == null) {
-                    camelContext.bootstrapFactoryFinder
+        if (bootstrapFactoryFinder == null) {
+            synchronized (lock) {
+                if (bootstrapFactoryFinder == null) {
+                    bootstrapFactoryFinder
                             = PluginHelper.getFactoryFinderResolver(this)
                                     .resolveBootstrapFactoryFinder(camelContext.getClassResolver());
                 }
             }
         }
-        return camelContext.bootstrapFactoryFinder;
+        return bootstrapFactoryFinder;
     }
 
     @Override
     public void setBootstrapFactoryFinder(FactoryFinder factoryFinder) {
-        camelContext.bootstrapFactoryFinder = factoryFinder;
+        bootstrapFactoryFinder = factoryFinder;
     }
 
     @Override
     public FactoryFinder getBootstrapFactoryFinder(String path) {
-        return camelContext.bootstrapFactories.computeIfAbsent(path, camelContext::createBootstrapFactoryFinder);
+        return bootstrapFactories.computeIfAbsent(path, camelContext::createBootstrapFactoryFinder);
     }
 
     @Override