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/04/01 06:47:08 UTC
[camel] 03/03: CAMEL-15105: make the ModelineFactory a plugin of the context
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 078b00ae3fa0a48134cdc72887dc0a30c0b365de
Author: Otavio Rodolfo Piske <an...@gmail.com>
AuthorDate: Fri Mar 31 17:41:26 2023 +0200
CAMEL-15105: make the ModelineFactory a plugin of the context
---
.../java/org/apache/camel/ExtendedCamelContext.java | 12 +-----------
.../main/java/org/apache/camel/spi/PluginManager.java | 2 ++
.../camel/impl/engine/AbstractCamelContext.java | 3 ++-
.../impl/engine/DefaultCamelContextExtension.java | 19 +------------------
.../impl/engine/DefaultContextPluginManager.java | 7 +++++++
.../apache/camel/impl/engine/DefaultRoutesLoader.java | 3 ++-
.../apache/camel/impl/engine/SimpleCamelContext.java | 1 -
.../camel/impl/ExtendedCamelContextConfigurer.java | 6 ------
.../impl/lw/LightweightCamelContextExtension.java | 12 +-----------
.../java/org/apache/camel/main/RoutesConfigurer.java | 4 +---
.../java/org/apache/camel/support/PluginHelper.java | 16 ++++++++++++++++
.../apache/camel/dsl/modeline/ModelineParserTest.java | 3 ++-
12 files changed, 35 insertions(+), 53 deletions(-)
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 291a324b3bc..466d114b60b 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
@@ -19,6 +19,7 @@ package org.apache.camel;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.function.Supplier;
import org.apache.camel.catalog.RuntimeCamelCatalog;
import org.apache.camel.console.DevConsoleResolver;
@@ -44,7 +45,6 @@ import org.apache.camel.spi.LifecycleStrategy;
import org.apache.camel.spi.LogListener;
import org.apache.camel.spi.ManagementMBeanAssembler;
import org.apache.camel.spi.ModelToXMLDumper;
-import org.apache.camel.spi.ModelineFactory;
import org.apache.camel.spi.NormalizedEndpointUri;
import org.apache.camel.spi.PeriodTaskResolver;
import org.apache.camel.spi.PeriodTaskScheduler;
@@ -692,16 +692,6 @@ public interface ExtendedCamelContext {
*/
void setBasePackageScan(String basePackageScan);
- /**
- * Gets the {@link ModelineFactory}.
- */
- ModelineFactory getModelineFactory();
-
- /**
- * Sets a custom {@link ModelineFactory}.
- */
- void setModelineFactory(ModelineFactory modelineFactory);
-
/**
* The {@link CamelContext} have additional phases that are not defined in {@link ServiceStatus} and this method
* provides the phase ordinal value.
diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/PluginManager.java b/core/camel-api/src/main/java/org/apache/camel/spi/PluginManager.java
index 11043f7092b..c2601d0c6b3 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/PluginManager.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/PluginManager.java
@@ -17,6 +17,8 @@
package org.apache.camel.spi;
+import java.util.function.Supplier;
+
/**
* A manager for internal plugins. This is part of the internal Camel API and not meant for public usage.
*/
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 cf55bfc9aec..986b9c3a233 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 ModelineFactory modelineFactory;
volatile ProcessorFactory processorFactory;
volatile PeriodTaskResolver periodTaskResolver;
volatile PeriodTaskScheduler periodTaskScheduler;
@@ -379,6 +378,8 @@ public abstract class AbstractCamelContext extends BaseService
camelContextExtension.addContextPlugin(FactoryFinderResolver.class, createFactoryFinderResolver());
camelContextExtension.addContextPlugin(PackageScanClassResolver.class, createPackageScanClassResolver());
camelContextExtension.addContextPlugin(PackageScanResourceResolver.class, createPackageScanResourceResolver());
+ camelContextExtension.lazyAddContextPlugin(ModelineFactory.class, this::createModelineFactory);
+ camelContextExtension.lazyAddContextPlugin(ModelJAXBContextFactory.class, this::createModelJAXBContextFactory);
if (build) {
try {
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 54715bbb700..d7df27f3cc2 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
@@ -23,6 +23,7 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.function.Supplier;
import org.apache.camel.CamelContextAware;
import org.apache.camel.Endpoint;
@@ -63,7 +64,6 @@ import org.apache.camel.spi.ManagementMBeanAssembler;
import org.apache.camel.spi.ManagementStrategy;
import org.apache.camel.spi.ManagementStrategyFactory;
import org.apache.camel.spi.ModelToXMLDumper;
-import org.apache.camel.spi.ModelineFactory;
import org.apache.camel.spi.NormalizedEndpointUri;
import org.apache.camel.spi.PeriodTaskResolver;
import org.apache.camel.spi.PeriodTaskScheduler;
@@ -367,23 +367,6 @@ class DefaultCamelContextExtension implements ExtendedCamelContext {
return factories.computeIfAbsent(path, camelContext::createFactoryFinder);
}
- @Override
- public ModelineFactory getModelineFactory() {
- if (camelContext.modelineFactory == null) {
- synchronized (camelContext.lock) {
- if (camelContext.modelineFactory == null) {
- setModelineFactory(camelContext.createModelineFactory());
- }
- }
- }
- return camelContext.modelineFactory;
- }
-
- @Override
- public void setModelineFactory(ModelineFactory modelineFactory) {
- camelContext.modelineFactory = camelContext.getInternalServiceManager().addService(modelineFactory);
- }
-
@Override
public PeriodTaskResolver getPeriodTaskResolver() {
if (camelContext.periodTaskResolver == null) {
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultContextPluginManager.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultContextPluginManager.java
index 090078ba97d..79b9e06ca5a 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultContextPluginManager.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultContextPluginManager.java
@@ -60,4 +60,11 @@ public class DefaultContextPluginManager implements PluginManager {
}
}
}
+
+ @Override
+ public <T> void lazyAddContextPlugin(Class<T> type, Supplier<T> module) {
+ if (module != null) {
+ extensions.put(type, module);
+ }
+ }
}
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 0d766a8a5d2..b6bee7885a4 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
@@ -36,6 +36,7 @@ import org.apache.camel.spi.ModelineFactory;
import org.apache.camel.spi.Resource;
import org.apache.camel.spi.RoutesBuilderLoader;
import org.apache.camel.spi.RoutesLoader;
+import org.apache.camel.support.PluginHelper;
import org.apache.camel.support.ResolverHelper;
import org.apache.camel.support.service.ServiceHelper;
import org.apache.camel.support.service.ServiceSupport;
@@ -90,7 +91,7 @@ public class DefaultRoutesLoader extends ServiceSupport implements RoutesLoader,
// first we need to parse for modeline to gather all the configurations
if (camelContext.isModeline()) {
- ModelineFactory factory = camelContext.getCamelContextExtension().getModelineFactory();
+ ModelineFactory factory = PluginHelper.getModelineFactory(camelContext);
for (Resource resource : resources) {
RoutesBuilderLoader loader = resolveRoutesBuilderLoader(resource);
// gather resources for modeline
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 c9e400502da..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
@@ -135,7 +135,6 @@ public class SimpleCamelContext extends AbstractCamelContext {
getCamelContextExtension().addContextPlugin(CliConnectorFactory.class, createCliConnectorFactory());
getCamelContextExtension().addContextPlugin(ScheduledExecutorService.class, createErrorHandlerExecutorService());
- getCamelContextExtension().addContextPlugin(ModelJAXBContextFactory.class, createModelJAXBContextFactory());
}
@Override
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 82291031222..43a98f6e428 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
@@ -59,8 +59,6 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com
case "Lightweight": target.setLightweight(property(camelContext, boolean.class, value)); return true;
case "modeltoxmldumper":
case "ModelToXMLDumper": target.setModelToXMLDumper(property(camelContext, org.apache.camel.spi.ModelToXMLDumper.class, value)); return true;
- case "modelinefactory":
- 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 "periodtaskresolver":
@@ -134,8 +132,6 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com
case "Lightweight": return boolean.class;
case "modeltoxmldumper":
case "ModelToXMLDumper": return org.apache.camel.spi.ModelToXMLDumper.class;
- case "modelinefactory":
- case "ModelineFactory": return org.apache.camel.spi.ModelineFactory.class;
case "name":
case "Name": return java.lang.String.class;
case "periodtaskresolver":
@@ -210,8 +206,6 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com
case "Lightweight": return target.isLightweight();
case "modeltoxmldumper":
case "ModelToXMLDumper": return target.getModelToXMLDumper();
- case "modelinefactory":
- case "ModelineFactory": return target.getModelineFactory();
case "name":
case "Name": return target.getName();
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 4975be42564..715acbd1100 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
@@ -22,6 +22,7 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
+import java.util.function.Supplier;
import org.apache.camel.CamelContext;
import org.apache.camel.Endpoint;
@@ -58,7 +59,6 @@ import org.apache.camel.spi.InternalProcessorFactory;
import org.apache.camel.spi.LogListener;
import org.apache.camel.spi.ManagementMBeanAssembler;
import org.apache.camel.spi.ModelToXMLDumper;
-import org.apache.camel.spi.ModelineFactory;
import org.apache.camel.spi.NormalizedEndpointUri;
import org.apache.camel.spi.PeriodTaskResolver;
import org.apache.camel.spi.PeriodTaskScheduler;
@@ -288,16 +288,6 @@ class LightweightCamelContextExtension implements ExtendedCamelContext {
throw new UnsupportedOperationException();
}
- @Override
- public ModelineFactory getModelineFactory() {
- return camelContext.getCamelContextExtension().getModelineFactory();
- }
-
- @Override
- public void setModelineFactory(ModelineFactory modelineFactory) {
- throw new UnsupportedOperationException();
- }
-
@Override
public InternalProcessorFactory getInternalProcessorFactory() {
return camelContext.getCamelContextExtension().getInternalProcessorFactory();
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 1434ac72c47..450b1f1c747 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
@@ -22,7 +22,6 @@ import java.util.List;
import java.util.Set;
import org.apache.camel.CamelContext;
-import org.apache.camel.ExtendedCamelContext;
import org.apache.camel.RouteConfigurationsBuilder;
import org.apache.camel.RoutesBuilder;
import org.apache.camel.RuntimeCamelException;
@@ -262,8 +261,7 @@ public class RoutesConfigurer {
throw RuntimeCamelException.wrapRuntimeException(e);
}
- ExtendedCamelContext ecc = camelContext.getCamelContextExtension();
- ModelineFactory factory = ecc.getModelineFactory();
+ ModelineFactory factory = PluginHelper.getModelineFactory(camelContext);
for (Resource resource : resources) {
LOG.debug("Parsing modeline: {}", resource);
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 b41d67f8e49..ba022f4546e 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
@@ -29,6 +29,7 @@ import org.apache.camel.spi.ConfigurerResolver;
import org.apache.camel.spi.FactoryFinderResolver;
import org.apache.camel.spi.LanguageResolver;
import org.apache.camel.spi.ModelJAXBContextFactory;
+import org.apache.camel.spi.ModelineFactory;
import org.apache.camel.spi.PackageScanClassResolver;
import org.apache.camel.spi.PackageScanResourceResolver;
import org.apache.camel.spi.UriFactoryResolver;
@@ -243,4 +244,19 @@ public final class PluginHelper {
public static ModelJAXBContextFactory getModelJAXBContextFactory(ExtendedCamelContext extendedCamelContext) {
return extendedCamelContext.getContextPlugin(ModelJAXBContextFactory.class);
}
+
+ /**
+ * Gets the {@link ModelineFactory}.
+ */
+ public static ModelineFactory getModelineFactory(CamelContext camelContext) {
+ return getModelineFactory(camelContext.getCamelContextExtension());
+ }
+
+ /**
+ * Gets the {@link ModelineFactory}.
+ */
+ public static ModelineFactory getModelineFactory(ExtendedCamelContext extendedCamelContext) {
+ return extendedCamelContext.getContextPlugin(ModelineFactory.class);
+ }
+
}
diff --git a/dsl/camel-dsl-modeline/src/test/java/org/apache/camel/dsl/modeline/ModelineParserTest.java b/dsl/camel-dsl-modeline/src/test/java/org/apache/camel/dsl/modeline/ModelineParserTest.java
index 17ff56d428c..fcc8fc3eece 100644
--- a/dsl/camel-dsl-modeline/src/test/java/org/apache/camel/dsl/modeline/ModelineParserTest.java
+++ b/dsl/camel-dsl-modeline/src/test/java/org/apache/camel/dsl/modeline/ModelineParserTest.java
@@ -22,6 +22,7 @@ import java.util.List;
import org.apache.camel.CamelContext;
import org.apache.camel.spi.DependencyStrategy;
import org.apache.camel.spi.ModelineFactory;
+import org.apache.camel.support.PluginHelper;
import org.apache.camel.support.ResourceHelper;
import org.apache.camel.test.junit5.CamelTestSupport;
import org.junit.jupiter.api.Assertions;
@@ -32,7 +33,7 @@ public class ModelineParserTest extends CamelTestSupport {
private final List<String> deps = new ArrayList<>();
private ModelineFactory resolveModelineFactory(CamelContext camelContext) {
- return camelContext.getCamelContextExtension().getModelineFactory();
+ return PluginHelper.getModelineFactory(camelContext);
}
@Override