You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by gn...@apache.org on 2020/03/04 08:58:11 UTC
[camel] 26/32: Move default service creation to camel-base
SimpleCamelContext, move model related methods to DefaultCamelContext
This is an automated email from the ASF dual-hosted git repository.
gnodet pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 73b7290d523c8290d756ca2c9167f53fb8d8a1f0
Author: Guillaume Nodet <gn...@gmail.com>
AuthorDate: Wed Mar 4 07:57:21 2020 +0100
Move default service creation to camel-base SimpleCamelContext, move model related methods to DefaultCamelContext
---
.../camel/impl/engine/AbstractCamelContext.java | 9 +-
.../impl/engine/BaseExecutorServiceManager.java | 2 +-
.../camel/impl/engine/SimpleCamelContext.java} | 106 +++---
.../camel/impl/AbstractModelCamelContext.java | 334 -------------------
.../org/apache/camel/impl/DefaultCamelContext.java | 369 ++++++++-------------
5 files changed, 187 insertions(+), 633 deletions(-)
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
index b9f94cf..3b61952 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
@@ -45,6 +45,7 @@ import java.util.function.Supplier;
import org.apache.camel.CamelContext;
import org.apache.camel.CamelContextAware;
+import org.apache.camel.CatalogCamelContext;
import org.apache.camel.Component;
import org.apache.camel.Consumer;
import org.apache.camel.ConsumerTemplate;
@@ -76,6 +77,7 @@ import org.apache.camel.SuspendableService;
import org.apache.camel.TypeConverter;
import org.apache.camel.VetoCamelContextStartException;
import org.apache.camel.catalog.RuntimeCamelCatalog;
+import org.apache.camel.health.HealthCheckRegistry;
import org.apache.camel.impl.transformer.TransformerKey;
import org.apache.camel.impl.validator.ValidatorKey;
import org.apache.camel.spi.AnnotationBasedProcessorFactory;
@@ -172,7 +174,8 @@ import static org.apache.camel.spi.UnitOfWork.MDC_CAMEL_CONTEXT_ID;
/**
* Represents the context used to configure routes and the policies to use.
*/
-public abstract class AbstractCamelContext extends ServiceSupport implements ExtendedCamelContext, Suspendable {
+public abstract class AbstractCamelContext extends ServiceSupport
+ implements ExtendedCamelContext, CatalogCamelContext, Suspendable {
private static final Logger LOG = LoggerFactory.getLogger(AbstractCamelContext.class);
@@ -332,6 +335,8 @@ public abstract class AbstractCamelContext extends ServiceSupport implements Ext
// add the defer service startup listener
this.startupListeners.add(deferStartupListener);
+ setDefaultExtension(HealthCheckRegistry.class, this::createHealthCheckRegistry);
+
if (init) {
try {
init();
@@ -4450,6 +4455,8 @@ public abstract class AbstractCamelContext extends ServiceSupport implements Ext
}
}
+ protected abstract HealthCheckRegistry createHealthCheckRegistry();
+
protected abstract ReactiveExecutor createReactiveExecutor();
protected abstract StreamCachingStrategy createStreamCachingStrategy();
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/BaseExecutorServiceManager.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/BaseExecutorServiceManager.java
index 299f622..3428d2d 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/BaseExecutorServiceManager.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/BaseExecutorServiceManager.java
@@ -54,7 +54,7 @@ import org.slf4j.LoggerFactory;
/**
* Base {@link org.apache.camel.spi.ExecutorServiceManager} which can be used for implementations
*/
-public abstract class BaseExecutorServiceManager extends ServiceSupport implements ExecutorServiceManager {
+public class BaseExecutorServiceManager extends ServiceSupport implements ExecutorServiceManager {
private static final Logger LOG = LoggerFactory.getLogger(BaseExecutorServiceManager.class);
private final CamelContext camelContext;
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultCamelContext.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java
similarity index 81%
copy from core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
copy to core/camel-base/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java
index 6fc27c8..1b9beac 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java
@@ -14,52 +14,28 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.impl;
+package org.apache.camel.impl.engine;
+import java.util.Collection;
import java.util.Map;
+import java.util.concurrent.ExecutorService;
+import org.apache.camel.AsyncProcessor;
import org.apache.camel.CamelContext;
import org.apache.camel.Endpoint;
+import org.apache.camel.Processor;
import org.apache.camel.TypeConverter;
import org.apache.camel.catalog.RuntimeCamelCatalog;
import org.apache.camel.health.HealthCheckRegistry;
import org.apache.camel.impl.converter.DefaultTypeConverter;
-import org.apache.camel.impl.engine.DefaultAsyncProcessorAwaitManager;
-import org.apache.camel.impl.engine.DefaultBeanIntrospection;
-import org.apache.camel.impl.engine.DefaultCamelBeanPostProcessor;
-import org.apache.camel.impl.engine.DefaultCamelContextNameStrategy;
-import org.apache.camel.impl.engine.DefaultClassResolver;
-import org.apache.camel.impl.engine.DefaultComponentResolver;
-import org.apache.camel.impl.engine.DefaultConfigurerResolver;
-import org.apache.camel.impl.engine.DefaultDataFormatResolver;
-import org.apache.camel.impl.engine.DefaultEndpointRegistry;
-import org.apache.camel.impl.engine.DefaultFactoryFinderResolver;
-import org.apache.camel.impl.engine.DefaultHeadersMapFactory;
-import org.apache.camel.impl.engine.DefaultInflightRepository;
-import org.apache.camel.impl.engine.DefaultInjector;
-import org.apache.camel.impl.engine.DefaultLanguageResolver;
-import org.apache.camel.impl.engine.DefaultManagementNameStrategy;
-import org.apache.camel.impl.engine.DefaultMessageHistoryFactory;
-import org.apache.camel.impl.engine.DefaultNodeIdFactory;
-import org.apache.camel.impl.engine.DefaultPackageScanClassResolver;
-import org.apache.camel.impl.engine.DefaultPackageScanResourceResolver;
-import org.apache.camel.impl.engine.DefaultProcessorFactory;
-import org.apache.camel.impl.engine.DefaultReactiveExecutor;
-import org.apache.camel.impl.engine.DefaultRouteController;
-import org.apache.camel.impl.engine.DefaultShutdownStrategy;
-import org.apache.camel.impl.engine.DefaultStreamCachingStrategy;
-import org.apache.camel.impl.engine.DefaultTracer;
-import org.apache.camel.impl.engine.DefaultUnitOfWorkFactory;
-import org.apache.camel.impl.engine.DefaultUuidGenerator;
-import org.apache.camel.impl.engine.EndpointKey;
-import org.apache.camel.impl.engine.WebSpherePackageScanClassResolver;
-import org.apache.camel.impl.engine.BaseServiceResolver;
import org.apache.camel.impl.health.DefaultHealthCheckRegistry;
+import org.apache.camel.impl.transformer.TransformerKey;
+import org.apache.camel.impl.validator.ValidatorKey;
+import org.apache.camel.processor.MulticastProcessor;
import org.apache.camel.spi.AsyncProcessorAwaitManager;
import org.apache.camel.spi.BeanIntrospection;
import org.apache.camel.spi.BeanProcessorFactory;
import org.apache.camel.spi.BeanProxyFactory;
-import org.apache.camel.spi.BeanRepository;
import org.apache.camel.spi.CamelBeanPostProcessor;
import org.apache.camel.spi.CamelContextNameStrategy;
import org.apache.camel.spi.ClassResolver;
@@ -90,9 +66,11 @@ import org.apache.camel.spi.RouteController;
import org.apache.camel.spi.ShutdownStrategy;
import org.apache.camel.spi.StreamCachingStrategy;
import org.apache.camel.spi.Tracer;
+import org.apache.camel.spi.TransformerRegistry;
import org.apache.camel.spi.TypeConverterRegistry;
import org.apache.camel.spi.UnitOfWorkFactory;
import org.apache.camel.spi.UuidGenerator;
+import org.apache.camel.spi.ValidatorRegistry;
import org.apache.camel.spi.XMLRoutesDefinitionLoader;
import org.apache.camel.support.DefaultRegistry;
import org.slf4j.Logger;
@@ -101,9 +79,9 @@ import org.slf4j.LoggerFactory;
/**
* Represents the context used to configure routes and the policies to use.
*/
-public class DefaultCamelContext extends AbstractModelCamelContext {
+public class SimpleCamelContext extends AbstractCamelContext {
- private static final Logger LOG = LoggerFactory.getLogger(DefaultCamelContext.class);
+ private static final Logger LOG = LoggerFactory.getLogger(SimpleCamelContext.class);
/**
* Creates the {@link CamelContext} using {@link DefaultRegistry} as
@@ -111,28 +89,8 @@ public class DefaultCamelContext extends AbstractModelCamelContext {
* <p/>
* Use one of the other constructors to force use an explicit registry.
*/
- public DefaultCamelContext() {
- }
-
- /**
- * Creates the {@link CamelContext} using the given {@link BeanRepository}
- * as first-choice repository, and the
- * {@link org.apache.camel.support.SimpleRegistry} as fallback, via the
- * {@link DefaultRegistry} implementation.
- *
- * @param repository the bean repository.
- */
- public DefaultCamelContext(BeanRepository repository) {
- super(new DefaultRegistry(repository));
- }
-
- /**
- * Creates the {@link CamelContext} using the given registry
- *
- * @param registry the registry
- */
- public DefaultCamelContext(Registry registry) {
- super(registry);
+ public SimpleCamelContext() {
+ this(true);
}
/**
@@ -145,11 +103,16 @@ public class DefaultCamelContext extends AbstractModelCamelContext {
*
* @param init whether to automatic initialize.
*/
- public DefaultCamelContext(boolean init) {
+ public SimpleCamelContext(boolean init) {
super(init);
}
@Override
+ protected HealthCheckRegistry createHealthCheckRegistry() {
+ return new DefaultHealthCheckRegistry(this);
+ }
+
+ @Override
protected TypeConverter createTypeConverter() {
return new DefaultTypeConverter(this, getPackageScanClassResolver(), getInjector(),
getDefaultFactoryFinder(), isLoadTypeConverters());
@@ -255,11 +218,6 @@ public class DefaultCamelContext extends AbstractModelCamelContext {
}
@Override
- protected HealthCheckRegistry createHealthCheckRegistry() {
- return new DefaultHealthCheckRegistry(this);
- }
-
- @Override
protected ShutdownStrategy createShutdownStrategy() {
return new DefaultShutdownStrategy(this);
}
@@ -283,11 +241,6 @@ public class DefaultCamelContext extends AbstractModelCamelContext {
}
@Override
- protected ExecutorServiceManager createExecutorServiceManager() {
- return new DefaultExecutorServiceManager(this);
- }
-
- @Override
protected UnitOfWorkFactory createUnitOfWorkFactory() {
return new DefaultUnitOfWorkFactory();
}
@@ -409,4 +362,23 @@ public class DefaultCamelContext extends AbstractModelCamelContext {
.orElseGet(DefaultReactiveExecutor::new);
}
+ @Override
+ public AsyncProcessor createMulticast(Collection<Processor> processors, ExecutorService executor, boolean shutdownExecutorService) {
+ return new MulticastProcessor(this, processors, null, true, executor, shutdownExecutorService, false, false, 0, null, false, false);
+ }
+
+ @Override
+ protected ValidatorRegistry<ValidatorKey> createValidatorRegistry() {
+ return new DefaultValidatorRegistry(this);
+ }
+
+ @Override
+ protected TransformerRegistry<TransformerKey> createTransformerRegistry() {
+ return new DefaultTransformerRegistry(this);
+ }
+
+ @Override
+ protected ExecutorServiceManager createExecutorServiceManager() {
+ return new BaseExecutorServiceManager(this);
+ }
}
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/impl/AbstractModelCamelContext.java b/core/camel-core-engine/src/main/java/org/apache/camel/impl/AbstractModelCamelContext.java
deleted file mode 100644
index b2f10f3..0000000
--- a/core/camel-core-engine/src/main/java/org/apache/camel/impl/AbstractModelCamelContext.java
+++ /dev/null
@@ -1,334 +0,0 @@
-/*
- * 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.impl;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ExecutorService;
-import java.util.function.Function;
-
-import org.apache.camel.AsyncProcessor;
-import org.apache.camel.CatalogCamelContext;
-import org.apache.camel.Processor;
-import org.apache.camel.health.HealthCheckRegistry;
-import org.apache.camel.impl.engine.AbstractCamelContext;
-import org.apache.camel.impl.engine.BaseRouteService;
-import org.apache.camel.impl.engine.DefaultTransformerRegistry;
-import org.apache.camel.impl.engine.DefaultValidatorRegistry;
-import org.apache.camel.impl.transformer.TransformerKey;
-import org.apache.camel.impl.validator.ValidatorKey;
-import org.apache.camel.model.DataFormatDefinition;
-import org.apache.camel.model.HystrixConfigurationDefinition;
-import org.apache.camel.model.Model;
-import org.apache.camel.model.ModelCamelContext;
-import org.apache.camel.model.ProcessorDefinition;
-import org.apache.camel.model.Resilience4jConfigurationDefinition;
-import org.apache.camel.model.RouteDefinition;
-import org.apache.camel.model.cloud.ServiceCallConfigurationDefinition;
-import org.apache.camel.model.rest.RestDefinition;
-import org.apache.camel.model.transformer.TransformerDefinition;
-import org.apache.camel.model.validator.ValidatorDefinition;
-import org.apache.camel.processor.MulticastProcessor;
-import org.apache.camel.reifier.dataformat.DataFormatReifier;
-import org.apache.camel.spi.DataFormat;
-import org.apache.camel.spi.Registry;
-import org.apache.camel.spi.TransformerRegistry;
-import org.apache.camel.spi.ValidatorRegistry;
-import org.apache.camel.support.CamelContextHelper;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Represents the context used to configure routes and the policies to use.
- */
-public abstract class AbstractModelCamelContext extends AbstractCamelContext implements ModelCamelContext, CatalogCamelContext {
-
- private static final Logger LOG = LoggerFactory.getLogger(AbstractModelCamelContext.class);
-
- private final Model model = new DefaultModel(this);
-
- /**
- * Creates the {@link ModelCamelContext} using
- * {@link org.apache.camel.support.DefaultRegistry} as registry.
- * <p/>
- * Use one of the other constructors to force use an explicit registry.
- */
- public AbstractModelCamelContext() {
- this(true);
- }
-
- /**
- * Creates the {@link ModelCamelContext} using the given registry
- *
- * @param registry the registry
- */
- public AbstractModelCamelContext(Registry registry) {
- this();
- setRegistry(registry);
- }
-
- public AbstractModelCamelContext(boolean init) {
- super(false);
-
- setDefaultExtension(HealthCheckRegistry.class, this::createHealthCheckRegistry);
-
- if (init) {
- init();
- }
- }
-
- @Override
- public List<RouteDefinition> getRouteDefinitions() {
- return model.getRouteDefinitions();
- }
-
- @Override
- public RouteDefinition getRouteDefinition(String id) {
- return model.getRouteDefinition(id);
- }
-
- @Override
- public void addRouteDefinitions(Collection<RouteDefinition> routeDefinitions) throws Exception {
- if (isStarted() && !isAllowAddingNewRoutes()) {
- throw new IllegalArgumentException("Adding new routes after CamelContext has been started is not allowed");
- }
- model.addRouteDefinitions(routeDefinitions);
- }
-
- @Override
- public void addRouteDefinition(RouteDefinition routeDefinition) throws Exception {
- if (isStarted() && !isAllowAddingNewRoutes()) {
- throw new IllegalArgumentException("Adding new routes after CamelContext has been started is not allowed");
- }
- model.addRouteDefinition(routeDefinition);
- }
-
- @Override
- public void removeRouteDefinitions(Collection<RouteDefinition> routeDefinitions) throws Exception {
- model.removeRouteDefinitions(routeDefinitions);
- }
-
- @Override
- public void removeRouteDefinition(RouteDefinition routeDefinition) throws Exception {
- model.removeRouteDefinition(routeDefinition);
- }
-
- @Override
- public List<RestDefinition> getRestDefinitions() {
- return model.getRestDefinitions();
- }
-
- @Override
- public void addRestDefinitions(Collection<RestDefinition> restDefinitions, boolean addToRoutes) throws Exception {
- if (isStarted() && !isAllowAddingNewRoutes()) {
- throw new IllegalArgumentException("Adding new routes after CamelContext has been started is not allowed");
- }
- model.addRestDefinitions(restDefinitions, addToRoutes);
- }
-
- @Override
- public void setDataFormats(Map<String, DataFormatDefinition> dataFormats) {
- model.setDataFormats(dataFormats);
- }
-
- @Override
- public Map<String, DataFormatDefinition> getDataFormats() {
- return model.getDataFormats();
- }
-
- @Override
- public DataFormatDefinition resolveDataFormatDefinition(String name) {
- return model.resolveDataFormatDefinition(name);
- }
-
- @Override
- public ProcessorDefinition<?> getProcessorDefinition(String id) {
- return model.getProcessorDefinition(id);
- }
-
- @Override
- public <T extends ProcessorDefinition<T>> T getProcessorDefinition(String id, Class<T> type) {
- return model.getProcessorDefinition(id, type);
- }
-
- @Override
- public void setValidators(List<ValidatorDefinition> validators) {
- model.setValidators(validators);
- }
-
- @Override
- public HystrixConfigurationDefinition getHystrixConfiguration(String id) {
- return model.getHystrixConfiguration(id);
- }
-
- @Override
- public void setHystrixConfiguration(HystrixConfigurationDefinition configuration) {
- model.setHystrixConfiguration(configuration);
- }
-
- @Override
- public void setHystrixConfigurations(List<HystrixConfigurationDefinition> configurations) {
- model.setHystrixConfigurations(configurations);
- }
-
- @Override
- public void addHystrixConfiguration(String id, HystrixConfigurationDefinition configuration) {
- model.addHystrixConfiguration(id, configuration);
- }
-
- @Override
- public Resilience4jConfigurationDefinition getResilience4jConfiguration(String id) {
- return model.getResilience4jConfiguration(id);
- }
-
- @Override
- public void setResilience4jConfiguration(Resilience4jConfigurationDefinition configuration) {
- model.setResilience4jConfiguration(configuration);
- }
-
- @Override
- public void setResilience4jConfigurations(List<Resilience4jConfigurationDefinition> configurations) {
- model.setResilience4jConfigurations(configurations);
- }
-
- @Override
- public void addResilience4jConfiguration(String id, Resilience4jConfigurationDefinition configuration) {
- model.addResilience4jConfiguration(id, configuration);
- }
-
- @Override
- public List<ValidatorDefinition> getValidators() {
- return model.getValidators();
- }
-
- @Override
- public void setTransformers(List<TransformerDefinition> transformers) {
- model.setTransformers(transformers);
- }
-
- @Override
- public List<TransformerDefinition> getTransformers() {
- return model.getTransformers();
- }
-
- @Override
- public ServiceCallConfigurationDefinition getServiceCallConfiguration(String serviceName) {
- return model.getServiceCallConfiguration(serviceName);
- }
-
- @Override
- public void setServiceCallConfiguration(ServiceCallConfigurationDefinition configuration) {
- model.setServiceCallConfiguration(configuration);
- }
-
- @Override
- public void setServiceCallConfigurations(List<ServiceCallConfigurationDefinition> configurations) {
- model.setServiceCallConfigurations(configurations);
- }
-
- @Override
- public void addServiceCallConfiguration(String serviceName, ServiceCallConfigurationDefinition configuration) {
- model.addServiceCallConfiguration(serviceName, configuration);
- }
-
- @Override
- public void setRouteFilterPattern(String include, String exclude) {
- model.setRouteFilterPattern(include, exclude);
- }
-
- @Override
- public void setRouteFilter(Function<RouteDefinition, Boolean> filter) {
- model.setRouteFilter(filter);
- }
-
- @Override
- public Function<RouteDefinition, Boolean> getRouteFilter() {
- return model.getRouteFilter();
- }
-
- @Override
- protected ValidatorRegistry<ValidatorKey> createValidatorRegistry() {
- return new DefaultValidatorRegistry(this);
- }
-
- @Override
- protected TransformerRegistry<TransformerKey> createTransformerRegistry() {
- return new DefaultTransformerRegistry(this);
- }
-
- protected abstract HealthCheckRegistry createHealthCheckRegistry();
-
- @Override
- protected void doStartStandardServices() {
- super.doStartStandardServices();
- }
-
- @Override
- protected void doStartEagerServices() {
- getExtension(HealthCheckRegistry.class);
- super.doStartEagerServices();
- }
-
- @Override
- protected void bindDataFormats() throws Exception {
- // eager lookup data formats and bind to registry so the dataformats can
- // be looked up and used
- for (Map.Entry<String, DataFormatDefinition> e : model.getDataFormats().entrySet()) {
- String id = e.getKey();
- DataFormatDefinition def = e.getValue();
- LOG.debug("Creating Dataformat with id: {} and definition: {}", id, def);
- DataFormat df = DataFormatReifier.reifier(this, def).createDataFormat();
- addService(df, true);
- getRegistry().bind(id, df);
- }
- }
-
- @Override
- protected synchronized void shutdownRouteService(BaseRouteService routeService) throws Exception {
- if (routeService instanceof RouteService) {
- model.getRouteDefinitions().remove(((RouteService)routeService).getRouteDefinition());
- }
- super.shutdownRouteService(routeService);
- }
-
- @Override
- protected boolean isStreamCachingInUse() throws Exception {
- boolean streamCachingInUse = super.isStreamCachingInUse();
- if (!streamCachingInUse) {
- for (RouteDefinition route : model.getRouteDefinitions()) {
- Boolean routeCache = CamelContextHelper.parseBoolean(this, route.getStreamCache());
- if (routeCache != null && routeCache) {
- streamCachingInUse = true;
- break;
- }
- }
- }
- return streamCachingInUse;
- }
-
- @Override
- public void startRouteDefinitions() throws Exception {
- model.startRouteDefinitions();
- }
-
- @Override
- public AsyncProcessor createMulticast(Collection<Processor> processors, ExecutorService executor, boolean shutdownExecutorService) {
- return new MulticastProcessor(this, processors, null, true, executor, shutdownExecutorService, false, false, 0, null, false, false);
- }
-
-}
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultCamelContext.java b/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
index 6fc27c8..c5f56f1 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
@@ -16,84 +16,32 @@
*/
package org.apache.camel.impl;
+import java.util.Collection;
+import java.util.List;
import java.util.Map;
+import java.util.function.Function;
import org.apache.camel.CamelContext;
-import org.apache.camel.Endpoint;
-import org.apache.camel.TypeConverter;
-import org.apache.camel.catalog.RuntimeCamelCatalog;
import org.apache.camel.health.HealthCheckRegistry;
-import org.apache.camel.impl.converter.DefaultTypeConverter;
-import org.apache.camel.impl.engine.DefaultAsyncProcessorAwaitManager;
-import org.apache.camel.impl.engine.DefaultBeanIntrospection;
-import org.apache.camel.impl.engine.DefaultCamelBeanPostProcessor;
-import org.apache.camel.impl.engine.DefaultCamelContextNameStrategy;
-import org.apache.camel.impl.engine.DefaultClassResolver;
-import org.apache.camel.impl.engine.DefaultComponentResolver;
-import org.apache.camel.impl.engine.DefaultConfigurerResolver;
-import org.apache.camel.impl.engine.DefaultDataFormatResolver;
-import org.apache.camel.impl.engine.DefaultEndpointRegistry;
-import org.apache.camel.impl.engine.DefaultFactoryFinderResolver;
-import org.apache.camel.impl.engine.DefaultHeadersMapFactory;
-import org.apache.camel.impl.engine.DefaultInflightRepository;
-import org.apache.camel.impl.engine.DefaultInjector;
-import org.apache.camel.impl.engine.DefaultLanguageResolver;
-import org.apache.camel.impl.engine.DefaultManagementNameStrategy;
-import org.apache.camel.impl.engine.DefaultMessageHistoryFactory;
-import org.apache.camel.impl.engine.DefaultNodeIdFactory;
-import org.apache.camel.impl.engine.DefaultPackageScanClassResolver;
-import org.apache.camel.impl.engine.DefaultPackageScanResourceResolver;
-import org.apache.camel.impl.engine.DefaultProcessorFactory;
-import org.apache.camel.impl.engine.DefaultReactiveExecutor;
-import org.apache.camel.impl.engine.DefaultRouteController;
-import org.apache.camel.impl.engine.DefaultShutdownStrategy;
-import org.apache.camel.impl.engine.DefaultStreamCachingStrategy;
-import org.apache.camel.impl.engine.DefaultTracer;
-import org.apache.camel.impl.engine.DefaultUnitOfWorkFactory;
-import org.apache.camel.impl.engine.DefaultUuidGenerator;
-import org.apache.camel.impl.engine.EndpointKey;
-import org.apache.camel.impl.engine.WebSpherePackageScanClassResolver;
-import org.apache.camel.impl.engine.BaseServiceResolver;
-import org.apache.camel.impl.health.DefaultHealthCheckRegistry;
-import org.apache.camel.spi.AsyncProcessorAwaitManager;
-import org.apache.camel.spi.BeanIntrospection;
-import org.apache.camel.spi.BeanProcessorFactory;
-import org.apache.camel.spi.BeanProxyFactory;
+import org.apache.camel.impl.engine.BaseRouteService;
+import org.apache.camel.impl.engine.SimpleCamelContext;
+import org.apache.camel.model.DataFormatDefinition;
+import org.apache.camel.model.HystrixConfigurationDefinition;
+import org.apache.camel.model.Model;
+import org.apache.camel.model.ModelCamelContext;
+import org.apache.camel.model.ProcessorDefinition;
+import org.apache.camel.model.Resilience4jConfigurationDefinition;
+import org.apache.camel.model.RouteDefinition;
+import org.apache.camel.model.cloud.ServiceCallConfigurationDefinition;
+import org.apache.camel.model.rest.RestDefinition;
+import org.apache.camel.model.transformer.TransformerDefinition;
+import org.apache.camel.model.validator.ValidatorDefinition;
+import org.apache.camel.reifier.dataformat.DataFormatReifier;
import org.apache.camel.spi.BeanRepository;
-import org.apache.camel.spi.CamelBeanPostProcessor;
-import org.apache.camel.spi.CamelContextNameStrategy;
-import org.apache.camel.spi.ClassResolver;
-import org.apache.camel.spi.ComponentResolver;
-import org.apache.camel.spi.ConfigurerResolver;
-import org.apache.camel.spi.DataFormatResolver;
-import org.apache.camel.spi.EndpointRegistry;
+import org.apache.camel.spi.DataFormat;
import org.apache.camel.spi.ExecutorServiceManager;
-import org.apache.camel.spi.FactoryFinder;
-import org.apache.camel.spi.FactoryFinderResolver;
-import org.apache.camel.spi.HeadersMapFactory;
-import org.apache.camel.spi.InflightRepository;
-import org.apache.camel.spi.Injector;
-import org.apache.camel.spi.LanguageResolver;
-import org.apache.camel.spi.ManagementNameStrategy;
-import org.apache.camel.spi.MessageHistoryFactory;
-import org.apache.camel.spi.ModelJAXBContextFactory;
-import org.apache.camel.spi.ModelToXMLDumper;
-import org.apache.camel.spi.NodeIdFactory;
-import org.apache.camel.spi.PackageScanClassResolver;
-import org.apache.camel.spi.PackageScanResourceResolver;
-import org.apache.camel.spi.ProcessorFactory;
-import org.apache.camel.spi.PropertiesComponent;
-import org.apache.camel.spi.ReactiveExecutor;
import org.apache.camel.spi.Registry;
-import org.apache.camel.spi.RestRegistryFactory;
-import org.apache.camel.spi.RouteController;
-import org.apache.camel.spi.ShutdownStrategy;
-import org.apache.camel.spi.StreamCachingStrategy;
-import org.apache.camel.spi.Tracer;
-import org.apache.camel.spi.TypeConverterRegistry;
-import org.apache.camel.spi.UnitOfWorkFactory;
-import org.apache.camel.spi.UuidGenerator;
-import org.apache.camel.spi.XMLRoutesDefinitionLoader;
+import org.apache.camel.support.CamelContextHelper;
import org.apache.camel.support.DefaultRegistry;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -101,17 +49,20 @@ import org.slf4j.LoggerFactory;
/**
* Represents the context used to configure routes and the policies to use.
*/
-public class DefaultCamelContext extends AbstractModelCamelContext {
+public abstract class DefaultCamelContext extends SimpleCamelContext implements ModelCamelContext {
private static final Logger LOG = LoggerFactory.getLogger(DefaultCamelContext.class);
+ private final Model model = new DefaultModel(this);
+
/**
- * Creates the {@link CamelContext} using {@link DefaultRegistry} as
- * registry.
+ * Creates the {@link ModelCamelContext} using
+ * {@link org.apache.camel.support.DefaultRegistry} as registry.
* <p/>
* Use one of the other constructors to force use an explicit registry.
*/
public DefaultCamelContext() {
+ this(true);
}
/**
@@ -123,290 +74,248 @@ public class DefaultCamelContext extends AbstractModelCamelContext {
* @param repository the bean repository.
*/
public DefaultCamelContext(BeanRepository repository) {
- super(new DefaultRegistry(repository));
+ this(new DefaultRegistry(repository));
}
/**
- * Creates the {@link CamelContext} using the given registry
+ * Creates the {@link ModelCamelContext} using the given registry
*
* @param registry the registry
*/
public DefaultCamelContext(Registry registry) {
- super(registry);
+ this();
+ setRegistry(registry);
}
- /**
- * Creates the {@link CamelContext} and allows to control whether the
- * context should automatic initialize or not.
- * <p/>
- * This is used by some Camel components such as camel-cdi and
- * camel-blueprint, however this constructor is not intended for regular
- * Camel end users.
- *
- * @param init whether to automatic initialize.
- */
public DefaultCamelContext(boolean init) {
super(init);
}
@Override
- protected TypeConverter createTypeConverter() {
- return new DefaultTypeConverter(this, getPackageScanClassResolver(), getInjector(),
- getDefaultFactoryFinder(), isLoadTypeConverters());
+ public List<RouteDefinition> getRouteDefinitions() {
+ return model.getRouteDefinitions();
}
@Override
- protected TypeConverterRegistry createTypeConverterRegistry() {
- TypeConverter typeConverter = getTypeConverter();
- // type converter is also registry so create type converter
- if (typeConverter == null) {
- typeConverter = createTypeConverter();
- }
- if (typeConverter instanceof TypeConverterRegistry) {
- return (TypeConverterRegistry)typeConverter;
- }
- return null;
+ public RouteDefinition getRouteDefinition(String id) {
+ return model.getRouteDefinition(id);
}
@Override
- protected Injector createInjector() {
- FactoryFinder finder = getDefaultFactoryFinder();
- return finder.newInstance("Injector", Injector.class).orElse(new DefaultInjector(this));
- }
-
- @Override
- protected PropertiesComponent createPropertiesComponent() {
- return new BaseServiceResolver<>(PropertiesComponent.FACTORY, PropertiesComponent.class)
- .resolve(this)
- .orElseGet(org.apache.camel.component.properties.PropertiesComponent::new);
+ public void addRouteDefinitions(Collection<RouteDefinition> routeDefinitions) throws Exception {
+ if (isStarted() && !isAllowAddingNewRoutes()) {
+ throw new IllegalArgumentException("Adding new routes after CamelContext has been started is not allowed");
+ }
+ model.addRouteDefinitions(routeDefinitions);
}
@Override
- protected CamelBeanPostProcessor createBeanPostProcessor() {
- return new DefaultCamelBeanPostProcessor(this);
+ public void addRouteDefinition(RouteDefinition routeDefinition) throws Exception {
+ if (isStarted() && !isAllowAddingNewRoutes()) {
+ throw new IllegalArgumentException("Adding new routes after CamelContext has been started is not allowed");
+ }
+ model.addRouteDefinition(routeDefinition);
}
@Override
- protected ComponentResolver createComponentResolver() {
- return new DefaultComponentResolver();
+ public void removeRouteDefinitions(Collection<RouteDefinition> routeDefinitions) throws Exception {
+ model.removeRouteDefinitions(routeDefinitions);
}
@Override
- protected Registry createRegistry() {
- return new DefaultRegistry();
+ public void removeRouteDefinition(RouteDefinition routeDefinition) throws Exception {
+ model.removeRouteDefinition(routeDefinition);
}
@Override
- protected UuidGenerator createUuidGenerator() {
- return new DefaultUuidGenerator();
+ public List<RestDefinition> getRestDefinitions() {
+ return model.getRestDefinitions();
}
@Override
- protected ModelJAXBContextFactory createModelJAXBContextFactory() {
- return new BaseServiceResolver<>(ModelJAXBContextFactory.FACTORY, ModelJAXBContextFactory.class)
- .resolve(this)
- .orElseThrow(() -> new IllegalArgumentException("Cannot find ModelJAXBContextFactory on classpath. "
- + "Add camel-xml-jaxb to classpath."));
+ public void addRestDefinitions(Collection<RestDefinition> restDefinitions, boolean addToRoutes) throws Exception {
+ if (isStarted() && !isAllowAddingNewRoutes()) {
+ throw new IllegalArgumentException("Adding new routes after CamelContext has been started is not allowed");
+ }
+ model.addRestDefinitions(restDefinitions, addToRoutes);
}
@Override
- protected NodeIdFactory createNodeIdFactory() {
- return new DefaultNodeIdFactory();
+ public void setDataFormats(Map<String, DataFormatDefinition> dataFormats) {
+ model.setDataFormats(dataFormats);
}
@Override
- protected FactoryFinderResolver createFactoryFinderResolver() {
- return new DefaultFactoryFinderResolver();
+ public Map<String, DataFormatDefinition> getDataFormats() {
+ return model.getDataFormats();
}
@Override
- protected ClassResolver createClassResolver() {
- return new DefaultClassResolver(this);
+ public DataFormatDefinition resolveDataFormatDefinition(String name) {
+ return model.resolveDataFormatDefinition(name);
}
@Override
- protected ProcessorFactory createProcessorFactory() {
- return new DefaultProcessorFactory();
+ public ProcessorDefinition<?> getProcessorDefinition(String id) {
+ return model.getProcessorDefinition(id);
}
@Override
- protected DataFormatResolver createDataFormatResolver() {
- return new DefaultDataFormatResolver();
+ public <T extends ProcessorDefinition<T>> T getProcessorDefinition(String id, Class<T> type) {
+ return model.getProcessorDefinition(id, type);
}
@Override
- protected MessageHistoryFactory createMessageHistoryFactory() {
- return new DefaultMessageHistoryFactory();
+ public void setValidators(List<ValidatorDefinition> validators) {
+ model.setValidators(validators);
}
@Override
- protected InflightRepository createInflightRepository() {
- return new DefaultInflightRepository();
+ public HystrixConfigurationDefinition getHystrixConfiguration(String id) {
+ return model.getHystrixConfiguration(id);
}
@Override
- protected AsyncProcessorAwaitManager createAsyncProcessorAwaitManager() {
- return new DefaultAsyncProcessorAwaitManager();
+ public void setHystrixConfiguration(HystrixConfigurationDefinition configuration) {
+ model.setHystrixConfiguration(configuration);
}
@Override
- protected RouteController createRouteController() {
- return new DefaultRouteController(this);
+ public void setHystrixConfigurations(List<HystrixConfigurationDefinition> configurations) {
+ model.setHystrixConfigurations(configurations);
}
@Override
- protected HealthCheckRegistry createHealthCheckRegistry() {
- return new DefaultHealthCheckRegistry(this);
+ public void addHystrixConfiguration(String id, HystrixConfigurationDefinition configuration) {
+ model.addHystrixConfiguration(id, configuration);
}
@Override
- protected ShutdownStrategy createShutdownStrategy() {
- return new DefaultShutdownStrategy(this);
+ public Resilience4jConfigurationDefinition getResilience4jConfiguration(String id) {
+ return model.getResilience4jConfiguration(id);
}
@Override
- protected PackageScanClassResolver createPackageScanClassResolver() {
- PackageScanClassResolver packageScanClassResolver;
- // use WebSphere specific resolver if running on WebSphere
- if (WebSpherePackageScanClassResolver.isWebSphereClassLoader(this.getClass().getClassLoader())) {
- LOG.info("Using WebSphere specific PackageScanClassResolver");
- packageScanClassResolver = new WebSpherePackageScanClassResolver("META-INF/services/org/apache/camel/TypeConverter");
- } else {
- packageScanClassResolver = new DefaultPackageScanClassResolver();
- }
- return packageScanClassResolver;
+ public void setResilience4jConfiguration(Resilience4jConfigurationDefinition configuration) {
+ model.setResilience4jConfiguration(configuration);
}
@Override
- protected PackageScanResourceResolver createPackageScanResourceResolver() {
- return new DefaultPackageScanResourceResolver();
+ public void setResilience4jConfigurations(List<Resilience4jConfigurationDefinition> configurations) {
+ model.setResilience4jConfigurations(configurations);
}
@Override
- protected ExecutorServiceManager createExecutorServiceManager() {
- return new DefaultExecutorServiceManager(this);
+ public void addResilience4jConfiguration(String id, Resilience4jConfigurationDefinition configuration) {
+ model.addResilience4jConfiguration(id, configuration);
}
@Override
- protected UnitOfWorkFactory createUnitOfWorkFactory() {
- return new DefaultUnitOfWorkFactory();
+ public List<ValidatorDefinition> getValidators() {
+ return model.getValidators();
}
@Override
- protected RuntimeCamelCatalog createRuntimeCamelCatalog() {
- return new BaseServiceResolver<>(RuntimeCamelCatalog.FACTORY, RuntimeCamelCatalog.class)
- .resolve(this)
- .orElseThrow(() -> new IllegalArgumentException("Cannot find RuntimeCamelCatalog on classpath. "
- + "Add camel-core-catalog to classpath."));
+ public void setTransformers(List<TransformerDefinition> transformers) {
+ model.setTransformers(transformers);
}
@Override
- protected CamelContextNameStrategy createCamelContextNameStrategy() {
- return new DefaultCamelContextNameStrategy();
+ public List<TransformerDefinition> getTransformers() {
+ return model.getTransformers();
}
@Override
- protected ManagementNameStrategy createManagementNameStrategy() {
- return new DefaultManagementNameStrategy(this);
+ public ServiceCallConfigurationDefinition getServiceCallConfiguration(String serviceName) {
+ return model.getServiceCallConfiguration(serviceName);
}
@Override
- protected HeadersMapFactory createHeadersMapFactory() {
- return new BaseServiceResolver<>(HeadersMapFactory.FACTORY, HeadersMapFactory.class)
- .resolve(this)
- .orElseGet(DefaultHeadersMapFactory::new);
+ public void setServiceCallConfiguration(ServiceCallConfigurationDefinition configuration) {
+ model.setServiceCallConfiguration(configuration);
}
@Override
- protected BeanProxyFactory createBeanProxyFactory() {
- return new BaseServiceResolver<>(BeanProxyFactory.FACTORY, BeanProxyFactory.class)
- .resolve(this)
- .orElseThrow(() -> new IllegalArgumentException("Cannot find BeanProxyFactory on classpath. "
- + "Add camel-bean to classpath."));
+ public void setServiceCallConfigurations(List<ServiceCallConfigurationDefinition> configurations) {
+ model.setServiceCallConfigurations(configurations);
}
@Override
- protected BeanProcessorFactory createBeanProcessorFactory() {
- return new BaseServiceResolver<>(BeanProcessorFactory.FACTORY, BeanProcessorFactory.class)
- .resolve(this)
- .orElseThrow(() -> new IllegalArgumentException("Cannot find BeanProcessorFactory on classpath. "
- + "Add camel-bean to classpath."));
+ public void addServiceCallConfiguration(String serviceName, ServiceCallConfigurationDefinition configuration) {
+ model.addServiceCallConfiguration(serviceName, configuration);
}
@Override
- protected BeanIntrospection createBeanIntrospection() {
- return new DefaultBeanIntrospection();
+ public void setRouteFilterPattern(String include, String exclude) {
+ model.setRouteFilterPattern(include, exclude);
}
@Override
- protected XMLRoutesDefinitionLoader createXMLRoutesDefinitionLoader() {
- return new BaseServiceResolver<>(XMLRoutesDefinitionLoader.FACTORY, XMLRoutesDefinitionLoader.class)
- .resolve(this)
- .orElseThrow(() -> new IllegalArgumentException("Cannot find XMLRoutesDefinitionLoader on classpath. "
- + "Add either camel-xml-io or camel-xml-jaxb to classpath."));
+ public void setRouteFilter(Function<RouteDefinition, Boolean> filter) {
+ model.setRouteFilter(filter);
}
@Override
- protected ModelToXMLDumper createModelToXMLDumper() {
- return new BaseServiceResolver<>(ModelToXMLDumper.FACTORY, ModelToXMLDumper.class)
- .resolve(this)
- .orElseThrow(() -> new IllegalArgumentException("Cannot find ModelToXMLDumper on classpath. "
- + "Add camel-xml-jaxb to classpath."));
+ public Function<RouteDefinition, Boolean> getRouteFilter() {
+ return model.getRouteFilter();
}
@Override
- protected Tracer createTracer() {
- Tracer tracer = null;
- if (getRegistry() != null) {
- // lookup in registry
- Map<String, Tracer> map = getRegistry().findByTypeWithName(Tracer.class);
- if (map.size() == 1) {
- tracer = map.values().iterator().next();
- }
- }
- if (tracer == null) {
- tracer = getExtension(Tracer.class);
- }
- if (tracer == null) {
- tracer = new DefaultTracer();
- setExtension(Tracer.class, tracer);
- }
- return tracer;
+ protected void doStartStandardServices() {
+ super.doStartStandardServices();
}
@Override
- protected LanguageResolver createLanguageResolver() {
- return new DefaultLanguageResolver();
+ protected void doStartEagerServices() {
+ getExtension(HealthCheckRegistry.class);
+ super.doStartEagerServices();
}
@Override
- protected ConfigurerResolver createConfigurerResolver() {
- return new DefaultConfigurerResolver();
+ protected void bindDataFormats() throws Exception {
+ // eager lookup data formats and bind to registry so the dataformats can
+ // be looked up and used
+ for (Map.Entry<String, DataFormatDefinition> e : model.getDataFormats().entrySet()) {
+ String id = e.getKey();
+ DataFormatDefinition def = e.getValue();
+ LOG.debug("Creating Dataformat with id: {} and definition: {}", id, def);
+ DataFormat df = DataFormatReifier.reifier(this, def).createDataFormat();
+ addService(df, true);
+ getRegistry().bind(id, df);
+ }
}
@Override
- protected RestRegistryFactory createRestRegistryFactory() {
- return new BaseServiceResolver<>(RestRegistryFactory.FACTORY, RestRegistryFactory.class)
- .resolve(this)
- .orElseThrow(() -> new IllegalArgumentException("Cannot find RestRegistryFactory on classpath. "
- + "Add camel-rest to classpath."));
+ protected synchronized void shutdownRouteService(BaseRouteService routeService) throws Exception {
+ if (routeService instanceof RouteService) {
+ model.getRouteDefinitions().remove(((RouteService)routeService).getRouteDefinition());
+ }
+ super.shutdownRouteService(routeService);
}
@Override
- protected EndpointRegistry<EndpointKey> createEndpointRegistry(Map<EndpointKey, Endpoint> endpoints) {
- return new DefaultEndpointRegistry(this, endpoints);
+ protected boolean isStreamCachingInUse() throws Exception {
+ boolean streamCachingInUse = super.isStreamCachingInUse();
+ if (!streamCachingInUse) {
+ for (RouteDefinition route : model.getRouteDefinitions()) {
+ Boolean routeCache = CamelContextHelper.parseBoolean(this, route.getStreamCache());
+ if (routeCache != null && routeCache) {
+ streamCachingInUse = true;
+ break;
+ }
+ }
+ }
+ return streamCachingInUse;
}
@Override
- protected StreamCachingStrategy createStreamCachingStrategy() {
- return new DefaultStreamCachingStrategy();
+ public void startRouteDefinitions() throws Exception {
+ model.startRouteDefinitions();
}
@Override
- protected ReactiveExecutor createReactiveExecutor() {
- return new BaseServiceResolver<>(ReactiveExecutor.FACTORY, ReactiveExecutor.class)
- .resolve(this)
- .orElseGet(DefaultReactiveExecutor::new);
+ protected ExecutorServiceManager createExecutorServiceManager() {
+ return new DefaultExecutorServiceManager(this);
}
}