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 ecffb32c27df4ece0e16bc7e9a1dbed4434ef2ba Author: Guillaume Nodet <gno...@gmail.com> AuthorDate: Mon May 13 16:36:26 2019 +0200 [CAMEL-13511] Introduce a Model interface to hold definitions related methods --- .../blueprint/handler/CamelNamespaceHandler.java | 6 +- .../org/apache/camel/cdi/CdiCamelExtension.java | 4 +- .../cdi/test/XmlServiceCallConfigurationTest.java | 6 +- .../HipchatXmlDefinedComponentProducerTest.java | 4 +- .../hystrix/processor/HystrixReifier.java | 6 +- .../processor/HystrixHierarchicalConfigTest.java | 8 +- .../policy/InfinispanRoutePolicyTestBase.java | 6 +- .../apache/camel/component/kura/KuraRouter.java | 4 +- .../camel/component/kura/KuraRouterTest.java | 4 +- .../apache/camel/spring/boot/RoutesCollector.java | 6 +- .../boot/actuate/endpoint/CamelRoutesEndpoint.java | 4 +- .../rest/RestUndertowHttpPojoTypeTest.java | 4 +- .../MultiMasterCuratorLeaderRoutePolicyTest.java | 6 +- .../main/java/org/apache/camel/CamelContext.java | 2 +- .../camel/impl/engine/AbstractCamelContext.java | 7 +- .../impl/cloud/ServiceCallProcessorFactory.java | 6 +- .../apache/camel/builder/TransformerBuilder.java | 4 +- .../org/apache/camel/builder/ValidatorBuilder.java | 4 +- .../camel/impl/AbstractModelCamelContext.java | 262 ++++++--------------- ...actModelCamelContext.java => DefaultModel.java} | 175 ++++---------- .../apache/camel/impl/ReloadStrategySupport.java | 4 +- .../java/org/apache/camel/main/MainSupport.java | 4 +- .../model/{ModelCamelContext.java => Model.java} | 25 +- .../org/apache/camel/model/ModelCamelContext.java | 226 +----------------- .../apache/camel/model/RouteDefinitionHelper.java | 8 +- .../org/apache/camel/reifier/RouteReifier.java | 2 +- .../reifier/dataformat/DataFormatReifier.java | 4 +- .../camel/component/log/LogListenerTest.java | 3 +- .../apache/camel/impl/StartAndStopRoutesTest.java | 4 +- .../apache/camel/processor/LogEipListenerTest.java | 3 +- .../aggregator/AbstractDistributedTest.java | 3 +- .../camel/management/ManagedCamelContextImpl.java | 6 +- .../management/mbean/ModelCamelContextHelper.java | 4 +- .../management/RemoveRouteDefinitionTest.java | 6 +- .../commands/AbstractLocalCamelController.java | 6 +- .../camel/commands/ContextListCommandTest.java | 3 +- .../camel/commands/ValidatorListCommandTest.java | 8 +- .../HystrixHierarchicalConfigurationTest.java | 4 +- .../itest/DuplicateNamespacePrefixIssueTest.java | 4 +- 39 files changed, 212 insertions(+), 643 deletions(-) diff --git a/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/handler/CamelNamespaceHandler.java b/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/handler/CamelNamespaceHandler.java index 78ea996..cbd683d 100644 --- a/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/handler/CamelNamespaceHandler.java +++ b/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/handler/CamelNamespaceHandler.java @@ -72,7 +72,7 @@ import org.apache.camel.model.ExpressionNode; import org.apache.camel.model.ExpressionSubElementDefinition; import org.apache.camel.model.FromDefinition; import org.apache.camel.model.MarshalDefinition; -import org.apache.camel.model.ModelCamelContext; +import org.apache.camel.model.Model; import org.apache.camel.model.OnExceptionDefinition; import org.apache.camel.model.ProcessorDefinition; import org.apache.camel.model.ResequenceDefinition; @@ -1025,13 +1025,13 @@ public class CamelNamespaceHandler implements NamespaceHandler { Set<String> dataformats = new HashSet<>(); // regular camel routes - for (RouteDefinition rd : camelContext.adapt(ModelCamelContext.class).getRouteDefinitions()) { + for (RouteDefinition rd : camelContext.getExtension(Model.class).getRouteDefinitions()) { findInputComponents(rd.getInput(), components, languages, dataformats); findOutputComponents(rd.getOutputs(), components, languages, dataformats); } // rest services can have embedded routes or a singular to - for (RestDefinition rd : camelContext.adapt(ModelCamelContext.class).getRestDefinitions()) { + for (RestDefinition rd : camelContext.getExtension(Model.class).getRestDefinitions()) { for (VerbDefinition vd : rd.getVerbs()) { Object o = vd.getToOrRoute(); if (o instanceof RouteDefinition) { diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelExtension.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelExtension.java index 4098e09..ac557fd 100644 --- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelExtension.java +++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelExtension.java @@ -76,7 +76,7 @@ import org.apache.camel.RoutesBuilder; import org.apache.camel.ServiceStatus; import org.apache.camel.TypeConverter; import org.apache.camel.impl.DefaultCamelContext; -import org.apache.camel.model.ModelCamelContext; +import org.apache.camel.model.Model; import org.apache.camel.model.RouteContainer; import org.apache.camel.spi.CamelEvent; import org.slf4j.Logger; @@ -453,7 +453,7 @@ public class CdiCamelExtension implements Extension { if (route instanceof RoutesBuilder) { context.addRoutes((RoutesBuilder) route); } else if (route instanceof RouteContainer) { - context.adapt(ModelCamelContext.class).addRouteDefinitions(((RouteContainer) route).getRoutes()); + context.getExtension(Model.class).addRouteDefinitions(((RouteContainer) route).getRoutes()); } else { throw new IllegalArgumentException( "Invalid routes type [" + routeBean.getBeanClass().getName() + "], " diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlServiceCallConfigurationTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlServiceCallConfigurationTest.java index e9d5335..423f8da 100644 --- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlServiceCallConfigurationTest.java +++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlServiceCallConfigurationTest.java @@ -22,7 +22,7 @@ import javax.inject.Inject; import org.apache.camel.CamelContext; import org.apache.camel.cdi.CdiCamelExtension; import org.apache.camel.cdi.ImportResource; -import org.apache.camel.model.ModelCamelContext; +import org.apache.camel.model.Model; import org.apache.camel.model.cloud.ServiceCallConfigurationDefinition; import org.apache.camel.model.cloud.StaticServiceCallServiceDiscoveryConfiguration; import org.jboss.arquillian.container.test.api.Deployment; @@ -59,7 +59,7 @@ public class XmlServiceCallConfigurationTest { @Test public void testServiceDiscoveryConfiguration() { - ServiceCallConfigurationDefinition conf1 = context.adapt(ModelCamelContext.class).getServiceCallConfiguration("conf1"); + ServiceCallConfigurationDefinition conf1 = context.getExtension(Model.class).getServiceCallConfiguration("conf1"); assertNotNull("No ServiceCallConfiguration (1)", conf1); assertNotNull("No ServiceDiscoveryConfiguration (1)", conf1.getServiceDiscoveryConfiguration()); @@ -67,7 +67,7 @@ public class XmlServiceCallConfigurationTest { assertEquals(1, discovery1.getServers().size()); assertEquals("localhost:9091", discovery1.getServers().get(0)); - ServiceCallConfigurationDefinition conf2 = context.adapt(ModelCamelContext.class).getServiceCallConfiguration("conf2"); + ServiceCallConfigurationDefinition conf2 = context.getExtension(Model.class).getServiceCallConfiguration("conf2"); assertNotNull("No ServiceCallConfiguration (2)", conf2); assertNotNull("No ServiceDiscoveryConfiguration (2)", conf2.getServiceDiscoveryConfiguration()); diff --git a/components/camel-hipchat/src/test/java/org/apache/camel/component/hipchat/HipchatXmlDefinedComponentProducerTest.java b/components/camel-hipchat/src/test/java/org/apache/camel/component/hipchat/HipchatXmlDefinedComponentProducerTest.java index d9b27b5..6b6e119 100644 --- a/components/camel-hipchat/src/test/java/org/apache/camel/component/hipchat/HipchatXmlDefinedComponentProducerTest.java +++ b/components/camel-hipchat/src/test/java/org/apache/camel/component/hipchat/HipchatXmlDefinedComponentProducerTest.java @@ -20,7 +20,7 @@ import java.io.InputStream; import org.apache.camel.CamelContext; import org.apache.camel.Endpoint; import org.apache.camel.EndpointInject; -import org.apache.camel.model.ModelCamelContext; +import org.apache.camel.model.Model; import org.apache.camel.model.ModelHelper; import org.apache.camel.model.RoutesDefinition; import org.apache.camel.test.junit4.CamelTestSupport; @@ -59,7 +59,7 @@ public class HipchatXmlDefinedComponentProducerTest extends CamelTestSupport { // This test is all about ensuring the endpoint is configured correctly when using the XML DSL so this try (InputStream routes = getClass().getResourceAsStream("HipchatXmlDefinedComponentProducerTest-route.xml")) { RoutesDefinition routesDefinition = ModelHelper.loadRoutesDefinition(context, routes); - context.adapt(ModelCamelContext.class).addRouteDefinition(routesDefinition.getRoutes().get(0)); + context.getExtension(Model.class).addRouteDefinition(routesDefinition.getRoutes().get(0)); } return context; diff --git a/components/camel-hystrix/src/main/java/org/apache/camel/component/hystrix/processor/HystrixReifier.java b/components/camel-hystrix/src/main/java/org/apache/camel/component/hystrix/processor/HystrixReifier.java index 081fbf5..5cb2a1d 100644 --- a/components/camel-hystrix/src/main/java/org/apache/camel/component/hystrix/processor/HystrixReifier.java +++ b/components/camel-hystrix/src/main/java/org/apache/camel/component/hystrix/processor/HystrixReifier.java @@ -30,7 +30,7 @@ import org.apache.camel.CamelContext; import org.apache.camel.Processor; import org.apache.camel.model.HystrixConfigurationDefinition; import org.apache.camel.model.HystrixDefinition; -import org.apache.camel.model.ModelCamelContext; +import org.apache.camel.model.Model; import org.apache.camel.reifier.ProcessorReifier; import org.apache.camel.spi.RouteContext; import org.apache.camel.support.IntrospectionSupport; @@ -215,7 +215,7 @@ public class HystrixReifier extends ProcessorReifier<HystrixDefinition> { // Extract properties from default configuration, the one configured on // camel context takes the precedence over those in the registry loadProperties(properties, Suppliers.firstNotNull( - () -> camelContext.adapt(ModelCamelContext.class).getHystrixConfiguration(null), + () -> camelContext.getExtension(Model.class).getHystrixConfiguration(null), () -> lookup(camelContext, HystrixConstants.DEFAULT_HYSTRIX_CONFIGURATION_ID, HystrixConfigurationDefinition.class)) ); @@ -225,7 +225,7 @@ public class HystrixReifier extends ProcessorReifier<HystrixDefinition> { final String ref = definition.getHystrixConfigurationRef(); loadProperties(properties, Suppliers.firstNotNull( - () -> camelContext.adapt(ModelCamelContext.class).getHystrixConfiguration(ref), + () -> camelContext.getExtension(Model.class).getHystrixConfiguration(ref), () -> mandatoryLookup(camelContext, ref, HystrixConfigurationDefinition.class)) ); } diff --git a/components/camel-hystrix/src/test/java/org/apache/camel/component/hystrix/processor/HystrixHierarchicalConfigTest.java b/components/camel-hystrix/src/test/java/org/apache/camel/component/hystrix/processor/HystrixHierarchicalConfigTest.java index 9af6b6f..5c4c65b 100644 --- a/components/camel-hystrix/src/test/java/org/apache/camel/component/hystrix/processor/HystrixHierarchicalConfigTest.java +++ b/components/camel-hystrix/src/test/java/org/apache/camel/component/hystrix/processor/HystrixHierarchicalConfigTest.java @@ -20,7 +20,7 @@ import org.apache.camel.CamelContext; import org.apache.camel.impl.DefaultCamelContext; import org.apache.camel.model.HystrixConfigurationDefinition; import org.apache.camel.model.HystrixDefinition; -import org.apache.camel.model.ModelCamelContext; +import org.apache.camel.model.Model; import org.apache.camel.support.SimpleRegistry; import org.junit.Assert; import org.junit.Test; @@ -72,8 +72,8 @@ public class HystrixHierarchicalConfigTest { ref.setGroupKey("ref-group-key"); ref.setCorePoolSize(5); - context.adapt(ModelCamelContext.class).setHystrixConfiguration(def); - context.adapt(ModelCamelContext.class).addHystrixConfiguration("ref-hystrix", ref); + context.getExtension(Model.class).setHystrixConfiguration(def); + context.getExtension(Model.class).addHystrixConfiguration("ref-hystrix", ref); final HystrixReifier reifier = new HystrixReifier( new HystrixDefinition() @@ -110,7 +110,7 @@ public class HystrixHierarchicalConfigTest { defReg.setThreadPoolKey("global-reg-thread-key"); defReg.setCorePoolSize(20); - context.adapt(ModelCamelContext.class).setHystrixConfiguration(def); + context.getExtension(Model.class).setHystrixConfiguration(def); registry.bind(HystrixConstants.DEFAULT_HYSTRIX_CONFIGURATION_ID, defReg); registry.bind("ref-hystrix", ref); diff --git a/components/camel-infinispan/src/test/java/org/apache/camel/component/infinispan/policy/InfinispanRoutePolicyTestBase.java b/components/camel-infinispan/src/test/java/org/apache/camel/component/infinispan/policy/InfinispanRoutePolicyTestBase.java index 9ce79f0..f222f9d 100644 --- a/components/camel-infinispan/src/test/java/org/apache/camel/component/infinispan/policy/InfinispanRoutePolicyTestBase.java +++ b/components/camel-infinispan/src/test/java/org/apache/camel/component/infinispan/policy/InfinispanRoutePolicyTestBase.java @@ -18,7 +18,7 @@ package org.apache.camel.component.infinispan.policy; import org.apache.camel.CamelContext; import org.apache.camel.impl.DefaultCamelContext; -import org.apache.camel.model.ModelCamelContext; +import org.apache.camel.model.Model; import org.apache.camel.model.RouteDefinition; import org.apache.camel.support.service.ServiceHelper; import org.infinispan.commons.api.BasicCacheContainer; @@ -55,13 +55,13 @@ abstract class InfinispanRoutePolicyTestBase { context = new DefaultCamelContext(); context.start(); - context.adapt(ModelCamelContext.class).addRouteDefinition(RouteDefinition.fromUri("direct:r1").routePolicy(policy1).to("mock:p1")); + context.getExtension(Model.class).addRouteDefinition(RouteDefinition.fromUri("direct:r1").routePolicy(policy1).to("mock:p1")); for (int i = 0; i < 10 && !policy1.isLeader(); i++) { Thread.sleep(250); } - context.adapt(ModelCamelContext.class).addRouteDefinition(RouteDefinition.fromUri("direct:r2").routePolicy(policy2).to("mock:p2")); + context.getExtension(Model.class).addRouteDefinition(RouteDefinition.fromUri("direct:r2").routePolicy(policy2).to("mock:p2")); Assert.assertTrue(policy1.isLeader()); Assert.assertFalse(policy2.isLeader()); diff --git a/components/camel-kura/src/main/java/org/apache/camel/component/kura/KuraRouter.java b/components/camel-kura/src/main/java/org/apache/camel/component/kura/KuraRouter.java index baed5f7..cebb191 100644 --- a/components/camel-kura/src/main/java/org/apache/camel/component/kura/KuraRouter.java +++ b/components/camel-kura/src/main/java/org/apache/camel/component/kura/KuraRouter.java @@ -25,7 +25,7 @@ import org.apache.camel.ConsumerTemplate; import org.apache.camel.ProducerTemplate; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.core.osgi.OsgiDefaultCamelContext; -import org.apache.camel.model.ModelCamelContext; +import org.apache.camel.model.Model; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceReference; @@ -65,7 +65,7 @@ public abstract class KuraRouter extends RouteBuilder implements BundleActivator Object routePropertyValue = camelKuraConfig.getProperties().get(camelXmlRoutesProperty()); if (routePropertyValue != null) { InputStream routesXml = new ByteArrayInputStream(routePropertyValue.toString().getBytes()); - camelContext.adapt(ModelCamelContext.class).addRouteDefinitions(routesXml); + camelContext.getExtension(Model.class).addRouteDefinitions(routesXml); } } diff --git a/components/camel-kura/src/test/java/org/apache/camel/component/kura/KuraRouterTest.java b/components/camel-kura/src/test/java/org/apache/camel/component/kura/KuraRouterTest.java index 1702a74..4799dfb 100644 --- a/components/camel-kura/src/test/java/org/apache/camel/component/kura/KuraRouterTest.java +++ b/components/camel-kura/src/test/java/org/apache/camel/component/kura/KuraRouterTest.java @@ -24,7 +24,7 @@ import org.apache.camel.CamelContext; import org.apache.camel.ServiceStatus; import org.apache.camel.component.mock.MockEndpoint; import org.apache.camel.impl.DefaultCamelContext; -import org.apache.camel.model.ModelCamelContext; +import org.apache.camel.model.Model; import org.apache.commons.io.IOUtils; import org.junit.After; import org.junit.Assert; @@ -123,7 +123,7 @@ public class KuraRouterTest extends Assert { router.start(router.bundleContext); // Then - assertNotNull(router.camelContext.adapt(ModelCamelContext.class).getRouteDefinition("loaded")); + assertNotNull(router.camelContext.getExtension(Model.class).getRouteDefinition("loaded")); } static class TestKuraRouter extends KuraRouter { diff --git a/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/RoutesCollector.java b/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/RoutesCollector.java index 2bcce4c..36d88aa 100644 --- a/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/RoutesCollector.java +++ b/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/RoutesCollector.java @@ -30,7 +30,7 @@ import org.apache.camel.CamelContext; import org.apache.camel.RoutesBuilder; import org.apache.camel.StartupListener; import org.apache.camel.main.MainDurationEventNotifier; -import org.apache.camel.model.ModelCamelContext; +import org.apache.camel.model.Model; import org.apache.camel.spi.CamelEvent; import org.apache.camel.spi.CamelEvent.Type; import org.apache.camel.spi.EventNotifier; @@ -296,7 +296,7 @@ public class RoutesCollector implements ApplicationListener<ContextRefreshedEven Resource[] xmlRoutes = applicationContext.getResources(part); for (Resource xmlRoute : xmlRoutes) { LOG.debug("Found XML route: {}", xmlRoute); - camelContext.adapt(ModelCamelContext.class).addRouteDefinitions(xmlRoute.getInputStream()); + camelContext.getExtension(Model.class).addRouteDefinitions(xmlRoute.getInputStream()); } } catch (FileNotFoundException e) { LOG.debug("No XML routes found in {}. Skipping XML routes detection.", part); @@ -311,7 +311,7 @@ public class RoutesCollector implements ApplicationListener<ContextRefreshedEven try { final Resource[] xmlRests = applicationContext.getResources(part); for (final Resource xmlRest : xmlRests) { - camelContext.adapt(ModelCamelContext.class).addRestDefinitions(xmlRest.getInputStream(), true); + camelContext.getExtension(Model.class).addRestDefinitions(xmlRest.getInputStream(), true); } } catch (FileNotFoundException e) { LOG.debug("No XML rests found in {}. Skipping XML rests detection.", part); diff --git a/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpoint.java b/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpoint.java index f99eefb..ec11652 100644 --- a/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpoint.java +++ b/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpoint.java @@ -35,7 +35,7 @@ import org.apache.camel.StatefulService; import org.apache.camel.api.management.ManagedCamelContext; import org.apache.camel.api.management.mbean.ManagedRouteMBean; import org.apache.camel.api.management.mbean.RouteError; -import org.apache.camel.model.ModelCamelContext; +import org.apache.camel.model.Model; import org.apache.camel.model.ModelHelper; import org.apache.camel.model.RouteDefinition; import org.springframework.boot.actuate.endpoint.annotation.Endpoint; @@ -115,7 +115,7 @@ public class CamelRoutesEndpoint { throw new IllegalArgumentException("Read only: route dump is not permitted in read-only mode"); } - RouteDefinition route = camelContext.adapt(ModelCamelContext.class).getRouteDefinition(id); + RouteDefinition route = camelContext.getExtension(Model.class).getRouteDefinition(id); if (route != null) { try { return ModelHelper.dumpModelAsXml(camelContext, route); diff --git a/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/rest/RestUndertowHttpPojoTypeTest.java b/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/rest/RestUndertowHttpPojoTypeTest.java index dd3f311..9db6700 100644 --- a/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/rest/RestUndertowHttpPojoTypeTest.java +++ b/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/rest/RestUndertowHttpPojoTypeTest.java @@ -26,7 +26,7 @@ import org.apache.camel.Processor; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.mock.MockEndpoint; import org.apache.camel.component.undertow.BaseUndertowTest; -import org.apache.camel.model.ModelCamelContext; +import org.apache.camel.model.Model; import org.apache.camel.model.rest.RestBindingMode; import org.apache.camel.model.rest.RestDefinition; import org.apache.camel.model.rest.VerbDefinition; @@ -40,7 +40,7 @@ public class RestUndertowHttpPojoTypeTest extends BaseUndertowTest { // Wasn't clear if there's a way to put this test into camel-core just to test the model // perhaps without starting the Camel Context? - List<RestDefinition> restDefinitions = context().adapt(ModelCamelContext.class).getRestDefinitions(); + List<RestDefinition> restDefinitions = context().getExtension(Model.class).getRestDefinitions(); assertNotNull(restDefinitions); assertTrue(restDefinitions.size() > 0); diff --git a/components/camel-zookeeper/src/test/java/org/apache/camel/component/zookeeper/policy/MultiMasterCuratorLeaderRoutePolicyTest.java b/components/camel-zookeeper/src/test/java/org/apache/camel/component/zookeeper/policy/MultiMasterCuratorLeaderRoutePolicyTest.java index 4be4bb3..05afc3f 100644 --- a/components/camel-zookeeper/src/test/java/org/apache/camel/component/zookeeper/policy/MultiMasterCuratorLeaderRoutePolicyTest.java +++ b/components/camel-zookeeper/src/test/java/org/apache/camel/component/zookeeper/policy/MultiMasterCuratorLeaderRoutePolicyTest.java @@ -26,7 +26,7 @@ import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.mock.MockEndpoint; import org.apache.camel.component.zookeeper.ZooKeeperTestSupport; import org.apache.camel.impl.DefaultCamelContext; -import org.apache.camel.model.ModelCamelContext; +import org.apache.camel.model.Model; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -272,9 +272,9 @@ public class MultiMasterCuratorLeaderRoutePolicyTest extends ZooKeeperTestSuppor first.shutdown(); // let's find out who's active now: - CuratorMultiMasterLeaderRoutePolicy routePolicySecond = (CuratorMultiMasterLeaderRoutePolicy) arr[0].controlledContext.adapt(ModelCamelContext.class) + CuratorMultiMasterLeaderRoutePolicy routePolicySecond = (CuratorMultiMasterLeaderRoutePolicy) arr[0].controlledContext.getExtension(Model.class) .getRouteDefinition(secondDestination).getRoutePolicies().get(0); - CuratorMultiMasterLeaderRoutePolicy routePolicyThird = (CuratorMultiMasterLeaderRoutePolicy) arr[1].controlledContext.adapt(ModelCamelContext.class) + CuratorMultiMasterLeaderRoutePolicy routePolicyThird = (CuratorMultiMasterLeaderRoutePolicy) arr[1].controlledContext.getExtension(Model.class) .getRouteDefinition(thirdDestination).getRoutePolicies().get(0); MultiMasterZookeeperPolicyEnforcedContext newMaster = null; diff --git a/core/camel-api/src/main/java/org/apache/camel/CamelContext.java b/core/camel-api/src/main/java/org/apache/camel/CamelContext.java index a9a5fa9..5a92a38 100644 --- a/core/camel-api/src/main/java/org/apache/camel/CamelContext.java +++ b/core/camel-api/src/main/java/org/apache/camel/CamelContext.java @@ -98,7 +98,7 @@ import org.apache.camel.support.jsse.SSLContextParameters; * End users are advised to use suspend/resume. Using stop is for shutting down Camel and it's not guaranteed that * when it's being started again using the start method that Camel will operate consistently. */ -public interface CamelContext extends SuspendableService, RuntimeConfiguration { +public interface CamelContext extends StatefulService, RuntimeConfiguration { /** * Adapts this {@link org.apache.camel.CamelContext} to the specialized type. 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 d41c5d7..29b6ff8 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 @@ -329,6 +329,9 @@ public abstract class AbstractCamelContext extends ServiceSupport implements Cam @Override public <T> T getExtension(Class<T> type) { + if (type.isInstance(this)) { + return type.cast(this); + } Object extension = extensions.get(type); if (extension instanceof Supplier) { extension = ((Supplier)extension).get(); @@ -981,7 +984,7 @@ public abstract class AbstractCamelContext extends ServiceSupport implements Cam return answer != null && answer; } - protected void setStartingRoutes(boolean starting) { + public void setStartingRoutes(boolean starting) { if (starting) { isStartingRoutes.set(true); } else { @@ -2721,7 +2724,7 @@ public abstract class AbstractCamelContext extends ServiceSupport implements Cam /** * Starts the given route service */ - protected synchronized void startRouteService(BaseRouteService routeService, boolean addingRoutes) throws Exception { + public synchronized void startRouteService(BaseRouteService routeService, boolean addingRoutes) throws Exception { // we may already be starting routes so remember this, so we can unset // accordingly in finally block boolean alreadyStartingRoutes = isStartingRoutes(); diff --git a/core/camel-cloud/src/main/java/org/apache/camel/impl/cloud/ServiceCallProcessorFactory.java b/core/camel-cloud/src/main/java/org/apache/camel/impl/cloud/ServiceCallProcessorFactory.java index 20604a4..54f422a 100644 --- a/core/camel-cloud/src/main/java/org/apache/camel/impl/cloud/ServiceCallProcessorFactory.java +++ b/core/camel-cloud/src/main/java/org/apache/camel/impl/cloud/ServiceCallProcessorFactory.java @@ -33,7 +33,7 @@ import org.apache.camel.cloud.ServiceFilter; import org.apache.camel.cloud.ServiceFilterAware; import org.apache.camel.cloud.ServiceLoadBalancer; import org.apache.camel.impl.engine.TypedProcessorFactory; -import org.apache.camel.model.ModelCamelContext; +import org.apache.camel.model.Model; import org.apache.camel.model.cloud.ServiceCallConfigurationDefinition; import org.apache.camel.model.cloud.ServiceCallDefinition; import org.apache.camel.model.cloud.ServiceCallDefinitionConstants; @@ -134,7 +134,7 @@ public class ServiceCallProcessorFactory extends TypedProcessorFactory<ServiceCa private ServiceCallConfigurationDefinition retrieveDefaultConfig(CamelContext camelContext) { // check if a default configuration is bound to the registry - ServiceCallConfigurationDefinition config = camelContext.adapt(ModelCamelContext.class).getServiceCallConfiguration(null); + ServiceCallConfigurationDefinition config = camelContext.getExtension(Model.class).getServiceCallConfiguration(null); if (config == null) { // Or if it is in the registry @@ -158,7 +158,7 @@ public class ServiceCallProcessorFactory extends TypedProcessorFactory<ServiceCa config = lookup(camelContext, definition.getConfigurationRef(), ServiceCallConfigurationDefinition.class); if (config == null) { // and fallback as service configuration - config = camelContext.adapt(ModelCamelContext.class).getServiceCallConfiguration(definition.getConfigurationRef()); + config = camelContext.getExtension(Model.class).getServiceCallConfiguration(definition.getConfigurationRef()); } } diff --git a/core/camel-core/src/main/java/org/apache/camel/builder/TransformerBuilder.java b/core/camel-core/src/main/java/org/apache/camel/builder/TransformerBuilder.java index b0b4129..cad5f96 100644 --- a/core/camel-core/src/main/java/org/apache/camel/builder/TransformerBuilder.java +++ b/core/camel-core/src/main/java/org/apache/camel/builder/TransformerBuilder.java @@ -18,7 +18,7 @@ package org.apache.camel.builder; import org.apache.camel.CamelContext; import org.apache.camel.model.DataFormatDefinition; -import org.apache.camel.model.ModelCamelContext; +import org.apache.camel.model.Model; import org.apache.camel.model.transformer.CustomTransformerDefinition; import org.apache.camel.model.transformer.DataFormatTransformerDefinition; import org.apache.camel.model.transformer.EndpointTransformerDefinition; @@ -181,6 +181,6 @@ public class TransformerBuilder { transformer.setToType(to); } - camelContext.adapt(ModelCamelContext.class).getTransformers().add(transformer); + camelContext.getExtension(Model.class).getTransformers().add(transformer); } } diff --git a/core/camel-core/src/main/java/org/apache/camel/builder/ValidatorBuilder.java b/core/camel-core/src/main/java/org/apache/camel/builder/ValidatorBuilder.java index fc11c7c..491044f 100644 --- a/core/camel-core/src/main/java/org/apache/camel/builder/ValidatorBuilder.java +++ b/core/camel-core/src/main/java/org/apache/camel/builder/ValidatorBuilder.java @@ -19,7 +19,7 @@ package org.apache.camel.builder; import org.apache.camel.CamelContext; import org.apache.camel.Expression; import org.apache.camel.Predicate; -import org.apache.camel.model.ModelCamelContext; +import org.apache.camel.model.Model; import org.apache.camel.model.language.ExpressionDefinition; import org.apache.camel.model.validator.CustomValidatorDefinition; import org.apache.camel.model.validator.EndpointValidatorDefinition; @@ -162,6 +162,6 @@ public class ValidatorBuilder { } validator.setType(type); - camelContext.adapt(ModelCamelContext.class).getValidators().add(validator); + camelContext.getExtension(Model.class).getValidators().add(validator); } } diff --git a/core/camel-core/src/main/java/org/apache/camel/impl/AbstractModelCamelContext.java b/core/camel-core/src/main/java/org/apache/camel/impl/AbstractModelCamelContext.java index 0a5fd78..7f6e2ae 100644 --- a/core/camel-core/src/main/java/org/apache/camel/impl/AbstractModelCamelContext.java +++ b/core/camel-core/src/main/java/org/apache/camel/impl/AbstractModelCamelContext.java @@ -17,21 +17,14 @@ package org.apache.camel.impl; import java.io.InputStream; -import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ExecutorService; import org.apache.camel.AsyncProcessor; import org.apache.camel.CatalogCamelContext; -import org.apache.camel.FailedToStartRouteException; import org.apache.camel.Processor; -import org.apache.camel.Route; import org.apache.camel.builder.ErrorHandlerBuilderSupport; import org.apache.camel.health.HealthCheckRegistry; import org.apache.camel.impl.engine.AbstractCamelContext; @@ -40,20 +33,15 @@ 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.ModelHelper; import org.apache.camel.model.ProcessorDefinition; -import org.apache.camel.model.ProcessorDefinitionHelper; import org.apache.camel.model.RouteDefinition; -import org.apache.camel.model.RouteDefinitionHelper; -import org.apache.camel.model.RoutesDefinition; import org.apache.camel.model.cloud.ServiceCallConfigurationDefinition; import org.apache.camel.model.rest.RestDefinition; -import org.apache.camel.model.rest.RestsDefinition; 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.RouteReifier; import org.apache.camel.reifier.dataformat.DataFormatReifier; import org.apache.camel.runtimecatalog.RuntimeCamelCatalog; import org.apache.camel.spi.DataFormat; @@ -67,16 +55,10 @@ import org.apache.camel.support.CamelContextHelper; */ public abstract class AbstractModelCamelContext extends AbstractCamelContext implements ModelCamelContext, CatalogCamelContext { - private final List<RouteDefinition> routeDefinitions = new ArrayList<>(); - private final List<RestDefinition> restDefinitions = new ArrayList<>(); - private Map<String, DataFormatDefinition> dataFormats = new HashMap<>(); - private List<TransformerDefinition> transformers = new ArrayList<>(); - private List<ValidatorDefinition> validators = new ArrayList<>(); - private Map<String, ServiceCallConfigurationDefinition> serviceCallConfigurations = new ConcurrentHashMap<>(); - private Map<String, HystrixConfigurationDefinition> hystrixConfigurations = new ConcurrentHashMap<>(); + private final Model model = new DefaultModel(this); /** - * Creates the {@link CamelContext} using + * 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. @@ -86,7 +68,7 @@ public abstract class AbstractModelCamelContext extends AbstractCamelContext imp } /** - * Creates the {@link CamelContext} using the given registry + * Creates the {@link ModelCamelContext} using the given registry * * @param registry the registry */ @@ -106,202 +88,139 @@ public abstract class AbstractModelCamelContext extends AbstractCamelContext imp } } - public void addRouteDefinitions(InputStream is) throws Exception { - RoutesDefinition def = ModelHelper.loadRoutesDefinition(this, is); - if (def != null) { - addRouteDefinitions(def.getRoutes()); - } + @Override + public List<RouteDefinition> getRouteDefinitions() { + return model.getRouteDefinitions(); } - public synchronized void addRouteDefinitions(Collection<RouteDefinition> routeDefinitions) throws Exception { - if (routeDefinitions == null || routeDefinitions.isEmpty()) { - return; - } - removeRouteDefinitions(routeDefinitions); - this.routeDefinitions.addAll(routeDefinitions); - if (shouldStartRoutes()) { - startRouteDefinitions(routeDefinitions); - } + @Override + public RouteDefinition getRouteDefinition(String id) { + return model.getRouteDefinition(id); } - public void addRouteDefinition(RouteDefinition routeDefinition) throws Exception { - addRouteDefinitions(Collections.singletonList(routeDefinition)); + @Override + public void addRouteDefinitions(InputStream is) throws Exception { + model.addRouteDefinitions(is); } - public synchronized void removeRouteDefinitions(Collection<RouteDefinition> routeDefinitions) throws Exception { - for (RouteDefinition routeDefinition : routeDefinitions) { - removeRouteDefinition(routeDefinition); - } + @Override + public void addRouteDefinitions(Collection<RouteDefinition> routeDefinitions) throws Exception { + model.addRouteDefinitions(routeDefinitions); } - public synchronized void removeRouteDefinition(RouteDefinition routeDefinition) throws Exception { - RouteDefinition toBeRemoved = routeDefinition; - String id = routeDefinition.getId(); - if (id != null) { - // remove existing route - stopRoute(id); - removeRoute(id); - toBeRemoved = getRouteDefinition(id); - } - this.routeDefinitions.remove(toBeRemoved); + @Override + public void addRouteDefinition(RouteDefinition routeDefinition) throws Exception { + model.addRouteDefinition(routeDefinition); } - public synchronized List<RouteDefinition> getRouteDefinitions() { - return routeDefinitions; + @Override + public void removeRouteDefinitions(Collection<RouteDefinition> routeDefinitions) throws Exception { + model.removeRouteDefinitions(routeDefinitions); } - public synchronized RouteDefinition getRouteDefinition(String id) { - for (RouteDefinition route : routeDefinitions) { - if (route.idOrCreate(getNodeIdFactory()).equals(id)) { - return route; - } - } - return null; + @Override + public void removeRouteDefinition(RouteDefinition routeDefinition) throws Exception { + model.removeRouteDefinition(routeDefinition); } - public synchronized List<RestDefinition> getRestDefinitions() { - return restDefinitions; + @Override + public List<RestDefinition> getRestDefinitions() { + return model.getRestDefinitions(); } + @Override public void addRestDefinitions(InputStream is, boolean addToRoutes) throws Exception { - RestsDefinition rests = ModelHelper.loadRestsDefinition(this, is); - if (rests != null) { - addRestDefinitions(rests.getRests(), addToRoutes); - } + model.addRestDefinitions(is, addToRoutes); } - public synchronized void addRestDefinitions(Collection<RestDefinition> restDefinitions, boolean addToRoutes) throws Exception { - if (restDefinitions == null || restDefinitions.isEmpty()) { - return; - } - - this.restDefinitions.addAll(restDefinitions); - if (addToRoutes) { - // rests are also routes so need to add them there too - for (final RestDefinition restDefinition : restDefinitions) { - List<RouteDefinition> routeDefinitions = restDefinition.asRouteDefinition(this); - addRouteDefinitions(routeDefinitions); - } - } + @Override + public void addRestDefinitions(Collection<RestDefinition> restDefinitions, boolean addToRoutes) throws Exception { + model.addRestDefinitions(restDefinitions, addToRoutes); } @Override - public ServiceCallConfigurationDefinition getServiceCallConfiguration(String serviceName) { - if (serviceName == null) { - serviceName = ""; - } - - return serviceCallConfigurations.get(serviceName); + public void setDataFormats(Map<String, DataFormatDefinition> dataFormats) { + model.setDataFormats(dataFormats); } @Override - public void setServiceCallConfiguration(ServiceCallConfigurationDefinition configuration) { - serviceCallConfigurations.put("", configuration); + public Map<String, DataFormatDefinition> getDataFormats() { + return model.getDataFormats(); } @Override - public void setServiceCallConfigurations(List<ServiceCallConfigurationDefinition> configurations) { - if (configurations != null) { - for (ServiceCallConfigurationDefinition configuration : configurations) { - serviceCallConfigurations.put(configuration.getId(), configuration); - } - } + public DataFormatDefinition resolveDataFormatDefinition(String name) { + return model.resolveDataFormatDefinition(name); } @Override - public void addServiceCallConfiguration(String serviceName, ServiceCallConfigurationDefinition configuration) { - serviceCallConfigurations.put(serviceName, configuration); + public ProcessorDefinition getProcessorDefinition(String id) { + return model.getProcessorDefinition(id); } @Override - public HystrixConfigurationDefinition getHystrixConfiguration(String id) { - if (id == null) { - id = ""; - } - - return hystrixConfigurations.get(id); + public <T extends ProcessorDefinition> T getProcessorDefinition(String id, Class<T> type) { + return model.getProcessorDefinition(id, type); } @Override - public void setHystrixConfiguration(HystrixConfigurationDefinition configuration) { - hystrixConfigurations.put("", configuration); + public void setValidators(List<ValidatorDefinition> validators) { + model.setValidators(validators); } @Override - public void setHystrixConfigurations(List<HystrixConfigurationDefinition> configurations) { - if (configurations != null) { - for (HystrixConfigurationDefinition configuration : configurations) { - hystrixConfigurations.put(configuration.getId(), configuration); - } - } + public HystrixConfigurationDefinition getHystrixConfiguration(String id) { + return model.getHystrixConfiguration(id); } @Override - public void addHystrixConfiguration(String id, HystrixConfigurationDefinition configuration) { - hystrixConfigurations.put(id, configuration); + public void setHystrixConfiguration(HystrixConfigurationDefinition configuration) { + model.setHystrixConfiguration(configuration); } @Override - public DataFormatDefinition resolveDataFormatDefinition(String name) { - // lookup type and create the data format from it - DataFormatDefinition type = lookup(this, name, DataFormatDefinition.class); - if (type == null && getDataFormats() != null) { - type = getDataFormats().get(name); - } - return type; + public void setHystrixConfigurations(List<HystrixConfigurationDefinition> configurations) { + model.setHystrixConfigurations(configurations); } @Override - public ProcessorDefinition getProcessorDefinition(String id) { - for (RouteDefinition route : getRouteDefinitions()) { - Iterator<ProcessorDefinition> it = ProcessorDefinitionHelper.filterTypeInOutputs(route.getOutputs(), ProcessorDefinition.class); - while (it.hasNext()) { - ProcessorDefinition proc = it.next(); - if (id.equals(proc.getId())) { - return proc; - } - } - } - return null; + public void addHystrixConfiguration(String id, HystrixConfigurationDefinition configuration) { + model.addHystrixConfiguration(id, configuration); } @Override - public <T extends ProcessorDefinition> T getProcessorDefinition(String id, Class<T> type) { - ProcessorDefinition answer = getProcessorDefinition(id); - if (answer != null) { - return type.cast(answer); - } - return null; + public List<ValidatorDefinition> getValidators() { + return model.getValidators(); } @Override - public void setDataFormats(Map<String, DataFormatDefinition> dataFormats) { - this.dataFormats = dataFormats; + public void setTransformers(List<TransformerDefinition> transformers) { + model.setTransformers(transformers); } @Override - public Map<String, DataFormatDefinition> getDataFormats() { - return dataFormats; + public List<TransformerDefinition> getTransformers() { + return model.getTransformers(); } @Override - public void setTransformers(List<TransformerDefinition> transformers) { - this.transformers = transformers; + public ServiceCallConfigurationDefinition getServiceCallConfiguration(String serviceName) { + return model.getServiceCallConfiguration(serviceName); } @Override - public List<TransformerDefinition> getTransformers() { - return transformers; + public void setServiceCallConfiguration(ServiceCallConfigurationDefinition configuration) { + model.setServiceCallConfiguration(configuration); } @Override - public void setValidators(List<ValidatorDefinition> validators) { - this.validators = validators; + public void setServiceCallConfigurations(List<ServiceCallConfigurationDefinition> configurations) { + model.setServiceCallConfigurations(configurations); } @Override - public List<ValidatorDefinition> getValidators() { - return validators; + public void addServiceCallConfiguration(String serviceName, ServiceCallConfigurationDefinition configuration) { + model.addServiceCallConfiguration(serviceName, configuration); } protected ValidatorRegistry<ValidatorKey> createValidatorRegistry() throws Exception { @@ -326,18 +245,10 @@ public abstract class AbstractModelCamelContext extends AbstractCamelContext imp super.doStartEagerServices(); } - protected void startRouteDefinitions(Collection<RouteDefinition> list) throws Exception { - if (list != null) { - for (RouteDefinition route : list) { - startRoute(route); - } - } - } - 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 : dataFormats.entrySet()) { + 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); @@ -347,41 +258,14 @@ public abstract class AbstractModelCamelContext extends AbstractCamelContext imp } } - public void startRoute(RouteDefinition routeDefinition) throws Exception { - // assign ids to the routes and validate that the id's is all unique - RouteDefinitionHelper.forceAssignIds(this, routeDefinitions); - String duplicate = RouteDefinitionHelper.validateUniqueIds(routeDefinition, routeDefinitions); - if (duplicate != null) { - throw new FailedToStartRouteException(routeDefinition.getId(), "duplicate id detected: " + duplicate + ". Please correct ids to be unique among all your routes."); - } - - // indicate we are staring the route using this thread so - // we are able to query this if needed - setStartingRoutes(true); - try { - // must ensure route is prepared, before we can start it - if (!routeDefinition.isPrepared()) { - RouteDefinitionHelper.prepareRoute(this, routeDefinition); - routeDefinition.markPrepared(); - } - - Route route = new RouteReifier(routeDefinition).addRoutes(this); - RouteService routeService = new RouteService(this, routeDefinition, route.getRouteContext(), route); - startRouteService(routeService, true); - } finally { - // we are done staring routes - setStartingRoutes(false); - } - } - protected synchronized void shutdownRouteService(BaseRouteService routeService) throws Exception { // remove the route from ErrorHandlerBuilder if possible if (getErrorHandlerFactory() instanceof ErrorHandlerBuilderSupport) { - ErrorHandlerBuilderSupport builder = (ErrorHandlerBuilderSupport)getErrorHandlerFactory(); + ErrorHandlerBuilderSupport builder = (ErrorHandlerBuilderSupport) getErrorHandlerFactory(); builder.removeOnExceptionList(routeService.getId()); } if (routeService instanceof RouteService) { - routeDefinitions.removeIf(route -> route == ((RouteService) routeService).getRouteDefinition()); + model.getRouteDefinitions().remove(((RouteService) routeService).getRouteDefinition()); } super.shutdownRouteService(routeService); } @@ -389,7 +273,7 @@ public abstract class AbstractModelCamelContext extends AbstractCamelContext imp protected boolean isStreamCachingInUse() throws Exception { boolean streamCachingInUse = super.isStreamCachingInUse(); if (!streamCachingInUse) { - for (RouteDefinition route : routeDefinitions) { + for (RouteDefinition route : model.getRouteDefinitions()) { Boolean routeCache = CamelContextHelper.parseBoolean(this, route.getStreamCache()); if (routeCache != null && routeCache) { streamCachingInUse = true; @@ -401,8 +285,8 @@ public abstract class AbstractModelCamelContext extends AbstractCamelContext imp } @Override - protected void startRouteDefinitions() throws Exception { - startRouteDefinitions(routeDefinitions); + public void startRouteDefinitions() throws Exception { + model.startRouteDefinitions(); } @Override diff --git a/core/camel-core/src/main/java/org/apache/camel/impl/AbstractModelCamelContext.java b/core/camel-core/src/main/java/org/apache/camel/impl/DefaultModel.java similarity index 64% copy from core/camel-core/src/main/java/org/apache/camel/impl/AbstractModelCamelContext.java copy to core/camel-core/src/main/java/org/apache/camel/impl/DefaultModel.java index 0a5fd78..fba6394 100644 --- a/core/camel-core/src/main/java/org/apache/camel/impl/AbstractModelCamelContext.java +++ b/core/camel-core/src/main/java/org/apache/camel/impl/DefaultModel.java @@ -25,21 +25,13 @@ import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ExecutorService; -import org.apache.camel.AsyncProcessor; -import org.apache.camel.CatalogCamelContext; +import org.apache.camel.CamelContext; import org.apache.camel.FailedToStartRouteException; -import org.apache.camel.Processor; import org.apache.camel.Route; -import org.apache.camel.builder.ErrorHandlerBuilderSupport; -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.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.ModelHelper; import org.apache.camel.model.ProcessorDefinition; @@ -52,20 +44,11 @@ import org.apache.camel.model.rest.RestDefinition; import org.apache.camel.model.rest.RestsDefinition; 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.RouteReifier; -import org.apache.camel.reifier.dataformat.DataFormatReifier; -import org.apache.camel.runtimecatalog.RuntimeCamelCatalog; -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; - -/** - * Represents the context used to configure routes and the policies to use. - */ -public abstract class AbstractModelCamelContext extends AbstractCamelContext implements ModelCamelContext, CatalogCamelContext { + +public class DefaultModel implements Model { + + private final CamelContext camelContext; private final List<RouteDefinition> routeDefinitions = new ArrayList<>(); private final List<RestDefinition> restDefinitions = new ArrayList<>(); @@ -75,39 +58,12 @@ public abstract class AbstractModelCamelContext extends AbstractCamelContext imp private Map<String, ServiceCallConfigurationDefinition> serviceCallConfigurations = new ConcurrentHashMap<>(); private Map<String, HystrixConfigurationDefinition> hystrixConfigurations = new ConcurrentHashMap<>(); - /** - * Creates the {@link CamelContext} 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 CamelContext} 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); - setDefaultExtension(RuntimeCamelCatalog.class, this::createRuntimeCamelCatalog); - - if (init) { - init(); - } + public DefaultModel(CamelContext camelContext) { + this.camelContext = camelContext; } public void addRouteDefinitions(InputStream is) throws Exception { - RoutesDefinition def = ModelHelper.loadRoutesDefinition(this, is); + RoutesDefinition def = ModelHelper.loadRoutesDefinition(camelContext, is); if (def != null) { addRouteDefinitions(def.getRoutes()); } @@ -139,8 +95,8 @@ public abstract class AbstractModelCamelContext extends AbstractCamelContext imp String id = routeDefinition.getId(); if (id != null) { // remove existing route - stopRoute(id); - removeRoute(id); + camelContext.getRouteController().stopRoute(id); + camelContext.removeRoute(id); toBeRemoved = getRouteDefinition(id); } this.routeDefinitions.remove(toBeRemoved); @@ -152,7 +108,7 @@ public abstract class AbstractModelCamelContext extends AbstractCamelContext imp public synchronized RouteDefinition getRouteDefinition(String id) { for (RouteDefinition route : routeDefinitions) { - if (route.idOrCreate(getNodeIdFactory()).equals(id)) { + if (route.idOrCreate(camelContext.getNodeIdFactory()).equals(id)) { return route; } } @@ -164,7 +120,7 @@ public abstract class AbstractModelCamelContext extends AbstractCamelContext imp } public void addRestDefinitions(InputStream is, boolean addToRoutes) throws Exception { - RestsDefinition rests = ModelHelper.loadRestsDefinition(this, is); + RestsDefinition rests = ModelHelper.loadRestsDefinition(camelContext, is); if (rests != null) { addRestDefinitions(rests.getRests(), addToRoutes); } @@ -179,7 +135,7 @@ public abstract class AbstractModelCamelContext extends AbstractCamelContext imp if (addToRoutes) { // rests are also routes so need to add them there too for (final RestDefinition restDefinition : restDefinitions) { - List<RouteDefinition> routeDefinitions = restDefinition.asRouteDefinition(this); + List<RouteDefinition> routeDefinitions = restDefinition.asRouteDefinition(camelContext); addRouteDefinitions(routeDefinitions); } } @@ -244,7 +200,7 @@ public abstract class AbstractModelCamelContext extends AbstractCamelContext imp @Override public DataFormatDefinition resolveDataFormatDefinition(String name) { // lookup type and create the data format from it - DataFormatDefinition type = lookup(this, name, DataFormatDefinition.class); + DataFormatDefinition type = lookup(camelContext, name, DataFormatDefinition.class); if (type == null && getDataFormats() != null) { type = getDataFormats().get(name); } @@ -304,26 +260,8 @@ public abstract class AbstractModelCamelContext extends AbstractCamelContext imp return validators; } - protected ValidatorRegistry<ValidatorKey> createValidatorRegistry() throws Exception { - return new DefaultValidatorRegistry(this, getValidators()); - } - - protected TransformerRegistry<TransformerKey> createTransformerRegistry() throws Exception { - return new DefaultTransformerRegistry(this, getTransformers()); - } - - protected abstract HealthCheckRegistry createHealthCheckRegistry(); - - protected abstract RuntimeCamelCatalog createRuntimeCamelCatalog(); - - protected void doStartStandardServices() { - super.doStartStandardServices(); - getExtension(RuntimeCamelCatalog.class); - } - - protected void doStartEagerServices() { - getExtension(HealthCheckRegistry.class); - super.doStartEagerServices(); + public void startRouteDefinitions() throws Exception { + startRouteDefinitions(routeDefinitions); } protected void startRouteDefinitions(Collection<RouteDefinition> list) throws Exception { @@ -334,80 +272,49 @@ public abstract class AbstractModelCamelContext extends AbstractCamelContext imp } } - 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 : dataFormats.entrySet()) { - String id = e.getKey(); - DataFormatDefinition def = e.getValue(); - log.debug("Creating Dataformat with id: {} and definition: {}", id, def); - DataFormat df = DataFormatReifier.reifier(def).createDataFormat(this); - addService(df, true); - getRegistry().bind(id, df); - } - } - public void startRoute(RouteDefinition routeDefinition) throws Exception { // assign ids to the routes and validate that the id's is all unique - RouteDefinitionHelper.forceAssignIds(this, routeDefinitions); + RouteDefinitionHelper.forceAssignIds(camelContext, routeDefinitions); String duplicate = RouteDefinitionHelper.validateUniqueIds(routeDefinition, routeDefinitions); if (duplicate != null) { throw new FailedToStartRouteException(routeDefinition.getId(), "duplicate id detected: " + duplicate + ". Please correct ids to be unique among all your routes."); } + // must ensure route is prepared, before we can start it + if (!routeDefinition.isPrepared()) { + RouteDefinitionHelper.prepareRoute(camelContext, routeDefinition); + routeDefinition.markPrepared(); + } + // indicate we are staring the route using this thread so // we are able to query this if needed - setStartingRoutes(true); + AbstractModelCamelContext mcc = camelContext.adapt(AbstractModelCamelContext.class); + mcc.setStartingRoutes(true); try { - // must ensure route is prepared, before we can start it - if (!routeDefinition.isPrepared()) { - RouteDefinitionHelper.prepareRoute(this, routeDefinition); - routeDefinition.markPrepared(); - } - Route route = new RouteReifier(routeDefinition).addRoutes(this); - RouteService routeService = new RouteService(this, routeDefinition, route.getRouteContext(), route); - startRouteService(routeService, true); + Route route = new RouteReifier(routeDefinition).addRoutes(mcc); + RouteService routeService = new RouteService(mcc, routeDefinition, route.getRouteContext(), route); + mcc.startRouteService(routeService, true); } finally { // we are done staring routes - setStartingRoutes(false); + mcc.setStartingRoutes(false); } } - protected synchronized void shutdownRouteService(BaseRouteService routeService) throws Exception { - // remove the route from ErrorHandlerBuilder if possible - if (getErrorHandlerFactory() instanceof ErrorHandlerBuilderSupport) { - ErrorHandlerBuilderSupport builder = (ErrorHandlerBuilderSupport)getErrorHandlerFactory(); - builder.removeOnExceptionList(routeService.getId()); - } - if (routeService instanceof RouteService) { - routeDefinitions.removeIf(route -> route == ((RouteService) routeService).getRouteDefinition()); - } - super.shutdownRouteService(routeService); + /** + * Should we start newly added routes? + */ + protected boolean shouldStartRoutes() { + return camelContext.isStarted() && !camelContext.isStarting(); } - protected boolean isStreamCachingInUse() throws Exception { - boolean streamCachingInUse = super.isStreamCachingInUse(); - if (!streamCachingInUse) { - for (RouteDefinition route : routeDefinitions) { - Boolean routeCache = CamelContextHelper.parseBoolean(this, route.getStreamCache()); - if (routeCache != null && routeCache) { - streamCachingInUse = true; - break; - } - } + protected static <T> T lookup(CamelContext context, String ref, Class<T> type) { + try { + return context.getRegistry().lookupByNameAndType(ref, type); + } catch (Exception e) { + // need to ignore not same type and return it as null + return null; } - return streamCachingInUse; - } - - @Override - protected void startRouteDefinitions() throws Exception { - startRouteDefinitions(routeDefinitions); - } - - @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/src/main/java/org/apache/camel/impl/ReloadStrategySupport.java b/core/camel-core/src/main/java/org/apache/camel/impl/ReloadStrategySupport.java index 75c9d82..1354b57 100644 --- a/core/camel-core/src/main/java/org/apache/camel/impl/ReloadStrategySupport.java +++ b/core/camel-core/src/main/java/org/apache/camel/impl/ReloadStrategySupport.java @@ -30,7 +30,7 @@ import org.apache.camel.CamelContext; import org.apache.camel.RuntimeCamelException; import org.apache.camel.api.management.ManagedAttribute; import org.apache.camel.api.management.ManagedOperation; -import org.apache.camel.model.ModelCamelContext; +import org.apache.camel.model.Model; import org.apache.camel.model.ModelHelper; import org.apache.camel.model.RouteDefinition; import org.apache.camel.model.RoutesDefinition; @@ -148,7 +148,7 @@ public abstract class ReloadStrategySupport extends ServiceSupport implements Re log.warn("Routes with no id's detected. Its recommended to assign id's to your routes so Camel can reload the routes correctly."); } // update the routes (add will remove and shutdown first) - camelContext.adapt(ModelCamelContext.class).addRouteDefinitions(routes); + camelContext.getExtension(Model.class).addRouteDefinitions(routes); log.info("Reloaded routes: [{}] from XML resource: {}", csb, name); } catch (Exception e) { diff --git a/core/camel-core/src/main/java/org/apache/camel/main/MainSupport.java b/core/camel-core/src/main/java/org/apache/camel/main/MainSupport.java index 6e69390..c01451b 100644 --- a/core/camel-core/src/main/java/org/apache/camel/main/MainSupport.java +++ b/core/camel-core/src/main/java/org/apache/camel/main/MainSupport.java @@ -39,7 +39,7 @@ import org.apache.camel.Expression; import org.apache.camel.ProducerTemplate; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.impl.FileWatcherReloadStrategy; -import org.apache.camel.model.ModelCamelContext; +import org.apache.camel.model.Model; import org.apache.camel.model.RouteDefinition; import org.apache.camel.spi.CamelBeanPostProcessor; import org.apache.camel.spi.DataFormat; @@ -658,7 +658,7 @@ public abstract class MainSupport extends ServiceSupport { public List<RouteDefinition> getRouteDefinitions() { List<RouteDefinition> answer = new ArrayList<>(); if (camelContext != null) { - answer.addAll(camelContext.adapt(ModelCamelContext.class).getRouteDefinitions()); + answer.addAll(camelContext.getExtension(Model.class).getRouteDefinitions()); } return answer; } diff --git a/core/camel-core/src/main/java/org/apache/camel/model/ModelCamelContext.java b/core/camel-core/src/main/java/org/apache/camel/model/Model.java similarity index 90% copy from core/camel-core/src/main/java/org/apache/camel/model/ModelCamelContext.java copy to core/camel-core/src/main/java/org/apache/camel/model/Model.java index e2aaaca..47d6638 100644 --- a/core/camel-core/src/main/java/org/apache/camel/model/ModelCamelContext.java +++ b/core/camel-core/src/main/java/org/apache/camel/model/Model.java @@ -28,9 +28,9 @@ import org.apache.camel.model.transformer.TransformerDefinition; import org.apache.camel.model.validator.ValidatorDefinition; /** - * Model level interface for the {@link CamelContext} + * Model interface */ -public interface ModelCamelContext extends CamelContext { +public interface Model { /** * Returns a list of the current route definitions @@ -50,8 +50,8 @@ public interface ModelCamelContext extends CamelContext { /** * Adds a collection of route definitions to the context * <p/> - * <b>Important: </b> Each route in the same {@link org.apache.camel.CamelContext} must have an <b>unique</b> route id. - * If you use the API from {@link org.apache.camel.CamelContext} or {@link org.apache.camel.model.ModelCamelContext} to add routes, then any + * <b>Important: </b> Each route in the same {@link CamelContext} must have an <b>unique</b> route id. + * If you use the API from {@link CamelContext} or {@link Model} to add routes, then any * new routes which has a route id that matches an old route, then the old route is replaced by the new route. * * @param is input stream with the route(s) definition to add @@ -62,8 +62,8 @@ public interface ModelCamelContext extends CamelContext { /** * Adds a collection of route definitions to the context * <p/> - * <b>Important: </b> Each route in the same {@link org.apache.camel.CamelContext} must have an <b>unique</b> route id. - * If you use the API from {@link org.apache.camel.CamelContext} or {@link org.apache.camel.model.ModelCamelContext} to add routes, then any + * <b>Important: </b> Each route in the same {@link CamelContext} must have an <b>unique</b> route id. + * If you use the API from {@link CamelContext} or {@link Model} to add routes, then any * new routes which has a route id that matches an old route, then the old route is replaced by the new route. * * @param routeDefinitions the route(s) definition to add @@ -74,8 +74,8 @@ public interface ModelCamelContext extends CamelContext { /** * Add a route definition to the context * <p/> - * <b>Important: </b> Each route in the same {@link org.apache.camel.CamelContext} must have an <b>unique</b> route id. - * If you use the API from {@link org.apache.camel.CamelContext} or {@link org.apache.camel.model.ModelCamelContext} to add routes, then any + * <b>Important: </b> Each route in the same {@link CamelContext} must have an <b>unique</b> route id. + * If you use the API from {@link CamelContext} or {@link Model} to add routes, then any * new routes which has a route id that matches an old route, then the old route is replaced by the new route. * * @param routeDefinition the route definition to add @@ -162,7 +162,7 @@ public interface ModelCamelContext extends CamelContext { * @param id id of the processor definition * @param type the processor definition type * @return the processor definition or <tt>null</tt> if not found - * @throws java.lang.ClassCastException is thrown if the type is not correct type + * @throws ClassCastException is thrown if the type is not correct type */ <T extends ProcessorDefinition> T getProcessorDefinition(String id, Class<T> type); @@ -256,4 +256,11 @@ public interface ModelCamelContext extends CamelContext { */ void addServiceCallConfiguration(String serviceName, ServiceCallConfigurationDefinition configuration); + /** + * Start all routes from this model. + * + * @throws Exception + */ + void startRouteDefinitions() throws Exception; + } diff --git a/core/camel-core/src/main/java/org/apache/camel/model/ModelCamelContext.java b/core/camel-core/src/main/java/org/apache/camel/model/ModelCamelContext.java index e2aaaca..42245ba 100644 --- a/core/camel-core/src/main/java/org/apache/camel/model/ModelCamelContext.java +++ b/core/camel-core/src/main/java/org/apache/camel/model/ModelCamelContext.java @@ -30,230 +30,6 @@ import org.apache.camel.model.validator.ValidatorDefinition; /** * Model level interface for the {@link CamelContext} */ -public interface ModelCamelContext extends CamelContext { - - /** - * Returns a list of the current route definitions - * - * @return list of the current route definitions - */ - List<RouteDefinition> getRouteDefinitions(); - - /** - * Gets the route definition with the given id - * - * @param id id of the route - * @return the route definition or <tt>null</tt> if not found - */ - RouteDefinition getRouteDefinition(String id); - - /** - * Adds a collection of route definitions to the context - * <p/> - * <b>Important: </b> Each route in the same {@link org.apache.camel.CamelContext} must have an <b>unique</b> route id. - * If you use the API from {@link org.apache.camel.CamelContext} or {@link org.apache.camel.model.ModelCamelContext} to add routes, then any - * new routes which has a route id that matches an old route, then the old route is replaced by the new route. - * - * @param is input stream with the route(s) definition to add - * @throws Exception if the route definitions could not be created for whatever reason - */ - void addRouteDefinitions(InputStream is) throws Exception; - - /** - * Adds a collection of route definitions to the context - * <p/> - * <b>Important: </b> Each route in the same {@link org.apache.camel.CamelContext} must have an <b>unique</b> route id. - * If you use the API from {@link org.apache.camel.CamelContext} or {@link org.apache.camel.model.ModelCamelContext} to add routes, then any - * new routes which has a route id that matches an old route, then the old route is replaced by the new route. - * - * @param routeDefinitions the route(s) definition to add - * @throws Exception if the route definitions could not be created for whatever reason - */ - void addRouteDefinitions(Collection<RouteDefinition> routeDefinitions) throws Exception; - - /** - * Add a route definition to the context - * <p/> - * <b>Important: </b> Each route in the same {@link org.apache.camel.CamelContext} must have an <b>unique</b> route id. - * If you use the API from {@link org.apache.camel.CamelContext} or {@link org.apache.camel.model.ModelCamelContext} to add routes, then any - * new routes which has a route id that matches an old route, then the old route is replaced by the new route. - * - * @param routeDefinition the route definition to add - * @throws Exception if the route definition could not be created for whatever reason - */ - void addRouteDefinition(RouteDefinition routeDefinition) throws Exception; - - /** - * Removes a collection of route definitions from the context - stopping any previously running - * routes if any of them are actively running - * - * @param routeDefinitions route(s) definitions to remove - * @throws Exception if the route definitions could not be removed for whatever reason - */ - void removeRouteDefinitions(Collection<RouteDefinition> routeDefinitions) throws Exception; - - /** - * Removes a route definition from the context - stopping any previously running - * routes if any of them are actively running - * - * @param routeDefinition route definition to remove - * @throws Exception if the route definition could not be removed for whatever reason - */ - void removeRouteDefinition(RouteDefinition routeDefinition) throws Exception; - - /** - * Returns a list of the current REST definitions - * - * @return list of the current REST definitions - */ - List<RestDefinition> getRestDefinitions(); - - /** - * Adds a collection of rest definitions to the context - * - * @param is input stream with the rest(s) definition to add - * @param addToRoutes whether the rests should also automatically be added as routes - * @throws Exception if the rest definitions could not be created for whatever reason - */ - void addRestDefinitions(InputStream is, boolean addToRoutes) throws Exception; - - /** - * Adds a collection of rest definitions to the context - * - * @param restDefinitions the rest(s) definition to add - * @param addToRoutes whether the rests should also automatically be added as routes - * @throws Exception if the rest definitions could not be created for whatever reason - */ - void addRestDefinitions(Collection<RestDefinition> restDefinitions, boolean addToRoutes) throws Exception; - - /** - * Sets the data formats that can be referenced in the routes. - * - * @param dataFormats the data formats - */ - void setDataFormats(Map<String, DataFormatDefinition> dataFormats); - - /** - * Gets the data formats that can be referenced in the routes. - * - * @return the data formats available - */ - Map<String, DataFormatDefinition> getDataFormats(); - - /** - * Resolve a data format definition given its name - * - * @param name the data format definition name or a reference to it in the {@link org.apache.camel.spi.Registry} - * @return the resolved data format definition, or <tt>null</tt> if not found - */ - DataFormatDefinition resolveDataFormatDefinition(String name); - - /** - * Gets the processor definition from any of the routes which with the given id - * - * @param id id of the processor definition - * @return the processor definition or <tt>null</tt> if not found - */ - ProcessorDefinition getProcessorDefinition(String id); - - /** - * Gets the processor definition from any of the routes which with the given id - * - * @param id id of the processor definition - * @param type the processor definition type - * @return the processor definition or <tt>null</tt> if not found - * @throws java.lang.ClassCastException is thrown if the type is not correct type - */ - <T extends ProcessorDefinition> T getProcessorDefinition(String id, Class<T> type); - - /** - * Sets the validators that can be referenced in the routes. - * - * @param validators the validators - */ - void setValidators(List<ValidatorDefinition> validators); - - /** - * Gets the Hystrix configuration by the given name. If no name is given - * the default configuration is returned, see <tt>setHystrixConfiguration</tt> - * - * @param id id of the configuration, or <tt>null</tt> to return the default configuration - * @return the configuration, or <tt>null</tt> if no configuration has been registered - */ - HystrixConfigurationDefinition getHystrixConfiguration(String id); - - /** - * Sets the default Hystrix configuration - * - * @param configuration the configuration - */ - void setHystrixConfiguration(HystrixConfigurationDefinition configuration); - - /** - * Sets the Hystrix configurations - * - * @param configurations the configuration list - */ - void setHystrixConfigurations(List<HystrixConfigurationDefinition> configurations); - - /** - * Adds the Hystrix configuration - * - * @param id name of the configuration - * @param configuration the configuration - */ - void addHystrixConfiguration(String id, HystrixConfigurationDefinition configuration); - - /** - * Gets the validators that can be referenced in the routes. - * - * @return the validators available - */ - List<ValidatorDefinition> getValidators(); - - /** - * Sets the transformers that can be referenced in the routes. - * - * @param transformers the transformers - */ - void setTransformers(List<TransformerDefinition> transformers); - - /** - * Gets the transformers that can be referenced in the routes. - * - * @return the transformers available - */ - List<TransformerDefinition> getTransformers(); - - /** - * Gets the service call configuration by the given name. If no name is given - * the default configuration is returned, see <tt>setServiceCallConfiguration</tt> - * - * @param serviceName name of service, or <tt>null</tt> to return the default configuration - * @return the configuration, or <tt>null</tt> if no configuration has been registered - */ - ServiceCallConfigurationDefinition getServiceCallConfiguration(String serviceName); - - /** - * Sets the default service call configuration - * - * @param configuration the configuration - */ - void setServiceCallConfiguration(ServiceCallConfigurationDefinition configuration); - - /** - * Sets the service call configurations - * - * @param configurations the configuration list - */ - void setServiceCallConfigurations(List<ServiceCallConfigurationDefinition> configurations); - - /** - * Adds the service call configuration - * - * @param serviceName name of the service - * @param configuration the configuration - */ - void addServiceCallConfiguration(String serviceName, ServiceCallConfigurationDefinition configuration); +public interface ModelCamelContext extends CamelContext, Model { } diff --git a/core/camel-core/src/main/java/org/apache/camel/model/RouteDefinitionHelper.java b/core/camel-core/src/main/java/org/apache/camel/model/RouteDefinitionHelper.java index 667fd88..afbc382 100644 --- a/core/camel-core/src/main/java/org/apache/camel/model/RouteDefinitionHelper.java +++ b/core/camel-core/src/main/java/org/apache/camel/model/RouteDefinitionHelper.java @@ -298,7 +298,7 @@ public final class RouteDefinitionHelper { * @param context the camel context * @param route the route */ - public static void prepareRoute(ModelCamelContext context, RouteDefinition route) { + public static void prepareRoute(CamelContext context, RouteDefinition route) { prepareRoute(context, route, null, null, null, null, null); } @@ -315,7 +315,7 @@ public final class RouteDefinitionHelper { * @param interceptSendToEndpointDefinitions optional list of interceptSendToEndpoints * @param onCompletions optional list onCompletions */ - public static void prepareRoute(ModelCamelContext context, RouteDefinition route, + public static void prepareRoute(CamelContext context, RouteDefinition route, List<OnExceptionDefinition> onExceptions, List<InterceptDefinition> intercepts, List<InterceptFromDefinition> interceptFromDefinitions, @@ -344,7 +344,7 @@ public final class RouteDefinitionHelper { * @param interceptSendToEndpointDefinitions optional list of interceptSendToEndpoints * @param onCompletions optional list onCompletions */ - private static void prepareRouteImp(ModelCamelContext context, RouteDefinition route, + private static void prepareRouteImp(CamelContext context, RouteDefinition route, List<OnExceptionDefinition> onExceptions, List<InterceptDefinition> intercepts, List<InterceptFromDefinition> interceptFromDefinitions, @@ -441,7 +441,7 @@ public final class RouteDefinitionHelper { } } - private static void initParentAndErrorHandlerBuilder(ModelCamelContext context, RouteDefinition route, + private static void initParentAndErrorHandlerBuilder(CamelContext context, RouteDefinition route, List<ProcessorDefinition<?>> abstracts, List<OnExceptionDefinition> onExceptions) { if (context != null) { diff --git a/core/camel-core/src/main/java/org/apache/camel/reifier/RouteReifier.java b/core/camel-core/src/main/java/org/apache/camel/reifier/RouteReifier.java index d957d27..264cc20 100644 --- a/core/camel-core/src/main/java/org/apache/camel/reifier/RouteReifier.java +++ b/core/camel-core/src/main/java/org/apache/camel/reifier/RouteReifier.java @@ -202,7 +202,7 @@ public class RouteReifier extends ProcessorReifier<RouteDefinition> { if (camelContext instanceof StatefulService) { StatefulService service = (StatefulService) camelContext; if (service.isStarted()) { - camelContext.adapt(ModelCamelContext.class).addRouteDefinition(merged); + camelContext.addRouteDefinition(merged); } } return merged; diff --git a/core/camel-core/src/main/java/org/apache/camel/reifier/dataformat/DataFormatReifier.java b/core/camel-core/src/main/java/org/apache/camel/reifier/dataformat/DataFormatReifier.java index b950f5d..635f7f5 100644 --- a/core/camel-core/src/main/java/org/apache/camel/reifier/dataformat/DataFormatReifier.java +++ b/core/camel-core/src/main/java/org/apache/camel/reifier/dataformat/DataFormatReifier.java @@ -22,7 +22,7 @@ import java.util.function.Function; import org.apache.camel.CamelContext; import org.apache.camel.model.DataFormatDefinition; -import org.apache.camel.model.ModelCamelContext; +import org.apache.camel.model.Model; import org.apache.camel.model.ProcessorDefinitionHelper; import org.apache.camel.model.dataformat.ASN1DataFormat; import org.apache.camel.model.dataformat.AvroDataFormat; @@ -142,7 +142,7 @@ public abstract class DataFormatReifier<T extends DataFormatDefinition> { } // try to let resolver see if it can resolve it, its not always possible - type = camelContext.adapt(ModelCamelContext.class).resolveDataFormatDefinition(ref); + type = camelContext.getExtension(Model.class).resolveDataFormatDefinition(ref); if (type == null) { dataFormat = camelContext.resolveDataFormat(ref); diff --git a/core/camel-core/src/test/java/org/apache/camel/component/log/LogListenerTest.java b/core/camel-core/src/test/java/org/apache/camel/component/log/LogListenerTest.java index c335dfa..17d2c24 100644 --- a/core/camel-core/src/test/java/org/apache/camel/component/log/LogListenerTest.java +++ b/core/camel-core/src/test/java/org/apache/camel/component/log/LogListenerTest.java @@ -21,7 +21,6 @@ import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.mock.MockEndpoint; import org.apache.camel.impl.DefaultCamelContext; import org.apache.camel.impl.JndiRegistry; -import org.apache.camel.model.ModelCamelContext; import org.apache.camel.support.jndi.JndiTest; import org.junit.Assert; import org.junit.Test; @@ -50,7 +49,7 @@ public class LogListenerTest { protected CamelContext createCamelContext() throws Exception { JndiRegistry registry = new JndiRegistry(JndiTest.createInitialContext()); CamelContext context = new DefaultCamelContext(registry); - context.adapt(ModelCamelContext.class).addRoutes(createRouteBuilder()); + context.addRoutes(createRouteBuilder()); return context; } diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/StartAndStopRoutesTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/StartAndStopRoutesTest.java index 9cea898..750f61d 100644 --- a/core/camel-core/src/test/java/org/apache/camel/impl/StartAndStopRoutesTest.java +++ b/core/camel-core/src/test/java/org/apache/camel/impl/StartAndStopRoutesTest.java @@ -23,7 +23,7 @@ import org.apache.camel.Endpoint; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.mock.MockEndpoint; import org.apache.camel.model.FromDefinition; -import org.apache.camel.model.ModelCamelContext; +import org.apache.camel.model.Model; import org.apache.camel.model.RouteDefinition; import org.junit.Test; @@ -60,7 +60,7 @@ public class StartAndStopRoutesTest extends ContextTestSupport { // lets mutate the route... FromDefinition fromType = route.getInput(); fromType.setUri("direct:test.C"); - context.adapt(ModelCamelContext.class).addRouteDefinition(route); + context.getExtension(Model.class).addRouteDefinition(route); // now lets check it works // send from C over B to results diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/LogEipListenerTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/LogEipListenerTest.java index b9b144a..a2c79db 100644 --- a/core/camel-core/src/test/java/org/apache/camel/processor/LogEipListenerTest.java +++ b/core/camel-core/src/test/java/org/apache/camel/processor/LogEipListenerTest.java @@ -21,7 +21,6 @@ import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.mock.MockEndpoint; import org.apache.camel.impl.DefaultCamelContext; import org.apache.camel.impl.JndiRegistry; -import org.apache.camel.model.ModelCamelContext; import org.apache.camel.support.jndi.JndiTest; import org.junit.Assert; import org.junit.Test; @@ -50,7 +49,7 @@ public class LogEipListenerTest { protected CamelContext createCamelContext() throws Exception { JndiRegistry registry = new JndiRegistry(JndiTest.createInitialContext()); CamelContext context = new DefaultCamelContext(registry); - context.adapt(ModelCamelContext.class).addRoutes(createRouteBuilder()); + context.addRoutes(createRouteBuilder()); return context; } diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/aggregator/AbstractDistributedTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/aggregator/AbstractDistributedTest.java index 7dd5ee4..87edaa6 100644 --- a/core/camel-core/src/test/java/org/apache/camel/processor/aggregator/AbstractDistributedTest.java +++ b/core/camel-core/src/test/java/org/apache/camel/processor/aggregator/AbstractDistributedTest.java @@ -22,7 +22,6 @@ import org.apache.camel.ProducerTemplate; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.mock.MockEndpoint; import org.apache.camel.impl.DefaultCamelContext; -import org.apache.camel.model.ModelCamelContext; import org.apache.camel.support.service.ServiceHelper; import org.junit.After; import org.junit.Before; @@ -43,7 +42,7 @@ public abstract class AbstractDistributedTest extends ContextTestSupport { ServiceHelper.startService(template2, context2); // add routes after CamelContext has been started - context2.adapt(ModelCamelContext.class).addRoutes(createRouteBuilder2()); + context2.addRoutes(createRouteBuilder2()); } @After diff --git a/core/camel-management-impl/src/main/java/org/apache/camel/management/ManagedCamelContextImpl.java b/core/camel-management-impl/src/main/java/org/apache/camel/management/ManagedCamelContextImpl.java index 1c38134..7d03bfc 100644 --- a/core/camel-management-impl/src/main/java/org/apache/camel/management/ManagedCamelContextImpl.java +++ b/core/camel-management-impl/src/main/java/org/apache/camel/management/ManagedCamelContextImpl.java @@ -28,7 +28,7 @@ import org.apache.camel.api.management.mbean.ManagedCamelContextMBean; import org.apache.camel.api.management.mbean.ManagedProcessorMBean; import org.apache.camel.api.management.mbean.ManagedRouteMBean; import org.apache.camel.api.management.mbean.ManagedStepMBean; -import org.apache.camel.model.ModelCamelContext; +import org.apache.camel.model.Model; import org.apache.camel.model.ProcessorDefinition; import org.apache.camel.spi.ManagementStrategy; @@ -54,7 +54,7 @@ public class ManagedCamelContextImpl implements ManagedCamelContext { } Processor processor = camelContext.getProcessor(id); - ProcessorDefinition def = camelContext.adapt(ModelCamelContext.class).getProcessorDefinition(id); + ProcessorDefinition def = camelContext.getExtension(Model.class).getProcessorDefinition(id); // processor may be null if its anonymous inner class or as lambda if (def != null) { @@ -77,7 +77,7 @@ public class ManagedCamelContextImpl implements ManagedCamelContext { } Processor processor = camelContext.getProcessor(id); - ProcessorDefinition def = camelContext.adapt(ModelCamelContext.class).getProcessorDefinition(id); + ProcessorDefinition def = camelContext.getExtension(Model.class).getProcessorDefinition(id); // processor may be null if its anonymous inner class or as lambda if (def != null) { diff --git a/core/camel-management-impl/src/main/java/org/apache/camel/management/mbean/ModelCamelContextHelper.java b/core/camel-management-impl/src/main/java/org/apache/camel/management/mbean/ModelCamelContextHelper.java index 3650601..d683c73 100644 --- a/core/camel-management-impl/src/main/java/org/apache/camel/management/mbean/ModelCamelContextHelper.java +++ b/core/camel-management-impl/src/main/java/org/apache/camel/management/mbean/ModelCamelContextHelper.java @@ -19,7 +19,7 @@ package org.apache.camel.management.mbean; import java.util.Iterator; import org.apache.camel.CamelContext; -import org.apache.camel.model.ModelCamelContext; +import org.apache.camel.model.Model; import org.apache.camel.model.ProcessorDefinition; import org.apache.camel.model.ProcessorDefinitionHelper; import org.apache.camel.model.RouteDefinition; @@ -43,7 +43,7 @@ public final class ModelCamelContextHelper { * @return <tt>true</tt> if in use, <tt>false</tt> if not */ public static boolean isEipInUse(CamelContext camelContext, String name) { - for (RouteDefinition route : camelContext.adapt(ModelCamelContext.class).getRouteDefinitions()) { + for (RouteDefinition route : camelContext.getExtension(Model.class).getRouteDefinitions()) { if (name.equals(route.getInput().getShortName())) { return true; } diff --git a/core/camel-management-impl/src/test/java/org/apache/camel/management/RemoveRouteDefinitionTest.java b/core/camel-management-impl/src/test/java/org/apache/camel/management/RemoveRouteDefinitionTest.java index baa0fbd..3667f23 100644 --- a/core/camel-management-impl/src/test/java/org/apache/camel/management/RemoveRouteDefinitionTest.java +++ b/core/camel-management-impl/src/test/java/org/apache/camel/management/RemoveRouteDefinitionTest.java @@ -24,7 +24,6 @@ import javax.management.MBeanServer; import javax.management.ObjectName; import org.apache.camel.builder.RouteBuilder; -import org.apache.camel.model.ModelCamelContext; import org.apache.camel.model.RouteDefinition; import org.junit.Test; @@ -47,11 +46,8 @@ public class RemoveRouteDefinitionTest extends ManagementTestSupport { boolean registered = mbeanServer.isRegistered(on); assertTrue("Should be registered", registered); - RouteDefinition definition = context.getRouteDefinition("route1"); - List<RouteDefinition> routeDefinitions = new ArrayList<>(); - routeDefinitions.add(definition); context.getRouteController().stopRoute("route1"); - context.adapt(ModelCamelContext.class).removeRoute("route1"); + context.removeRoute("route1"); // route is shutdown (= also removed), so its not longer in JMX set = mbeanServer.queryNames(new ObjectName("*:type=routes,*"), null); diff --git a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractLocalCamelController.java b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractLocalCamelController.java index 99d0a81..d183e9b 100644 --- a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractLocalCamelController.java +++ b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractLocalCamelController.java @@ -39,7 +39,7 @@ import org.apache.camel.ServiceStatus; import org.apache.camel.StatefulService; import org.apache.camel.api.management.ManagedCamelContext; import org.apache.camel.api.management.mbean.ManagedRouteMBean; -import org.apache.camel.model.ModelCamelContext; +import org.apache.camel.model.Model; import org.apache.camel.model.ModelHelper; import org.apache.camel.model.RouteDefinition; import org.apache.camel.model.rest.RestDefinition; @@ -375,7 +375,7 @@ public abstract class AbstractLocalCamelController extends AbstractCamelControll if (context == null) { return null; } - RouteDefinition route = context.adapt(ModelCamelContext.class).getRouteDefinition(routeId); + RouteDefinition route = context.getExtension(Model.class).getRouteDefinition(routeId); if (route == null) { return null; } @@ -437,7 +437,7 @@ public abstract class AbstractLocalCamelController extends AbstractCamelControll return null; } - List<RestDefinition> rests = context.adapt(ModelCamelContext.class).getRestDefinitions(); + List<RestDefinition> rests = context.getExtension(Model.class).getRestDefinitions(); if (rests == null || rests.isEmpty()) { return null; } diff --git a/platforms/commands/commands-core/src/test/java/org/apache/camel/commands/ContextListCommandTest.java b/platforms/commands/commands-core/src/test/java/org/apache/camel/commands/ContextListCommandTest.java index a5c95a1..08a175c 100644 --- a/platforms/commands/commands-core/src/test/java/org/apache/camel/commands/ContextListCommandTest.java +++ b/platforms/commands/commands-core/src/test/java/org/apache/camel/commands/ContextListCommandTest.java @@ -25,7 +25,6 @@ import org.apache.camel.builder.RouteBuilder; import org.apache.camel.impl.DefaultCamelContext; import org.apache.camel.impl.engine.DefaultRuntimeEndpointRegistry; import org.apache.camel.impl.engine.ExplicitCamelContextNameStrategy; -import org.apache.camel.model.ModelCamelContext; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -67,7 +66,7 @@ public class ContextListCommandTest { CamelContext context = new DefaultCamelContext(); context.setRuntimeEndpointRegistry(new DefaultRuntimeEndpointRegistry()); context.setNameStrategy(new ExplicitCamelContextNameStrategy("foobar")); - context.adapt(ModelCamelContext.class).addRoutes(new RouteBuilder() { + context.addRoutes(new RouteBuilder() { @Override public void configure() throws Exception { from("direct:start").to("mock:result"); diff --git a/platforms/commands/commands-core/src/test/java/org/apache/camel/commands/ValidatorListCommandTest.java b/platforms/commands/commands-core/src/test/java/org/apache/camel/commands/ValidatorListCommandTest.java index 02d8eac..7bafb93 100644 --- a/platforms/commands/commands-core/src/test/java/org/apache/camel/commands/ValidatorListCommandTest.java +++ b/platforms/commands/commands-core/src/test/java/org/apache/camel/commands/ValidatorListCommandTest.java @@ -26,7 +26,7 @@ import org.apache.camel.ValidationException; import org.apache.camel.builder.ExpressionBuilder; import org.apache.camel.impl.DefaultCamelContext; import org.apache.camel.impl.engine.ExplicitCamelContextNameStrategy; -import org.apache.camel.model.ModelCamelContext; +import org.apache.camel.model.Model; import org.apache.camel.model.language.ExpressionDefinition; import org.apache.camel.model.validator.CustomValidatorDefinition; import org.apache.camel.model.validator.EndpointValidatorDefinition; @@ -76,15 +76,15 @@ public class ValidatorListCommandTest { EndpointValidatorDefinition evd = new EndpointValidatorDefinition(); evd.setType("xml:foo"); evd.setUri("direct:validator"); - context.adapt(ModelCamelContext.class).getValidators().add(evd); + context.getExtension(Model.class).getValidators().add(evd); PredicateValidatorDefinition pvd = new PredicateValidatorDefinition(); pvd.setType(this.getClass()); pvd.setExpression(new ExpressionDefinition(ExpressionBuilder.bodyExpression())); - context.adapt(ModelCamelContext.class).getValidators().add(pvd); + context.getExtension(Model.class).getValidators().add(pvd); CustomValidatorDefinition cvd = new CustomValidatorDefinition(); cvd.setType("custom"); cvd.setClassName(MyValidator.class.getName()); - context.adapt(ModelCamelContext.class).getValidators().add(cvd); + context.getExtension(Model.class).getValidators().add(cvd); context.setNameStrategy(new ExplicitCamelContextNameStrategy("foobar")); context.start(); diff --git a/platforms/spring-boot/components-starter/camel-hystrix-starter/src/test/java/org/apache/camel/component/hystrix/processor/HystrixHierarchicalConfigurationTest.java b/platforms/spring-boot/components-starter/camel-hystrix-starter/src/test/java/org/apache/camel/component/hystrix/processor/HystrixHierarchicalConfigurationTest.java index 087acd6..b7171e3 100644 --- a/platforms/spring-boot/components-starter/camel-hystrix-starter/src/test/java/org/apache/camel/component/hystrix/processor/HystrixHierarchicalConfigurationTest.java +++ b/platforms/spring-boot/components-starter/camel-hystrix-starter/src/test/java/org/apache/camel/component/hystrix/processor/HystrixHierarchicalConfigurationTest.java @@ -19,7 +19,7 @@ package org.apache.camel.component.hystrix.processor; import org.apache.camel.CamelContext; import org.apache.camel.model.HystrixConfigurationDefinition; import org.apache.camel.model.HystrixDefinition; -import org.apache.camel.model.ModelCamelContext; +import org.apache.camel.model.Model; import org.apache.camel.model.RouteDefinition; import org.junit.Assert; import org.junit.Test; @@ -51,7 +51,7 @@ public class HystrixHierarchicalConfigurationTest { @Test public void testConfiguration() throws Exception { - RouteDefinition routeDefinition = camelContext.adapt(ModelCamelContext.class).getRouteDefinition("hystrix-route"); + RouteDefinition routeDefinition = camelContext.getExtension(Model.class).getRouteDefinition("hystrix-route"); HystrixDefinition hystrixDefinition = findHystrixDefinition(routeDefinition); Assert.assertNotNull(hystrixDefinition); diff --git a/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/DuplicateNamespacePrefixIssueTest.java b/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/DuplicateNamespacePrefixIssueTest.java index 3089ba1..54f9871 100644 --- a/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/DuplicateNamespacePrefixIssueTest.java +++ b/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/DuplicateNamespacePrefixIssueTest.java @@ -22,7 +22,7 @@ import java.io.InputStream; import org.apache.camel.CamelContext; import org.apache.camel.blueprint.BlueprintCamelContext; import org.apache.camel.builder.RouteBuilder; -import org.apache.camel.model.ModelCamelContext; +import org.apache.camel.model.Model; import org.apache.camel.model.ModelHelper; import org.apache.camel.model.RoutesDefinition; import org.apache.camel.test.karaf.AbstractFeatureTest; @@ -58,7 +58,7 @@ public class DuplicateNamespacePrefixIssueTest extends AbstractFeatureTest { }); // Dump the model XML - String originalModelXML = ModelHelper.dumpModelAsXml(context, context.adapt(ModelCamelContext.class).getRouteDefinition("foo")); + String originalModelXML = ModelHelper.dumpModelAsXml(context, context.getExtension(Model.class).getRouteDefinition("foo")); // Reload routes from dumped XML InputStream stream = new ByteArrayInputStream(originalModelXML.getBytes("UTF-8"));