| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.apache.camel.impl; |
| |
| import java.util.Map; |
| import javax.naming.Context; |
| |
| import org.apache.camel.CamelContext; |
| import org.apache.camel.Endpoint; |
| import org.apache.camel.PollingConsumer; |
| import org.apache.camel.Producer; |
| import org.apache.camel.TypeConverter; |
| import org.apache.camel.health.HealthCheckRegistry; |
| import org.apache.camel.impl.converter.DefaultTypeConverter; |
| import org.apache.camel.impl.engine.BeanProcessorFactoryResolver; |
| import org.apache.camel.impl.engine.BeanProxyFactoryResolver; |
| import org.apache.camel.impl.engine.DefaultAsyncProcessorAwaitManager; |
| import org.apache.camel.impl.engine.DefaultBeanIntrospection; |
| import org.apache.camel.impl.engine.DefaultCamelBeanPostProcessor; |
| import org.apache.camel.impl.engine.DefaultCamelContextNameStrategy; |
| import org.apache.camel.impl.engine.DefaultClassResolver; |
| import org.apache.camel.impl.engine.DefaultComponentResolver; |
| import org.apache.camel.impl.engine.DefaultDataFormatResolver; |
| import org.apache.camel.impl.engine.DefaultEndpointRegistry; |
| import org.apache.camel.impl.engine.DefaultFactoryFinderResolver; |
| import org.apache.camel.impl.engine.DefaultInflightRepository; |
| import org.apache.camel.impl.engine.DefaultInjector; |
| import org.apache.camel.impl.engine.DefaultLanguageResolver; |
| import org.apache.camel.impl.engine.DefaultManagementNameStrategy; |
| import org.apache.camel.impl.engine.DefaultMessageHistoryFactory; |
| import org.apache.camel.impl.engine.DefaultNodeIdFactory; |
| import org.apache.camel.impl.engine.DefaultPackageScanClassResolver; |
| import org.apache.camel.impl.engine.DefaultPackageScanResourceResolver; |
| import org.apache.camel.impl.engine.DefaultProcessorFactory; |
| import org.apache.camel.impl.engine.DefaultRouteController; |
| import org.apache.camel.impl.engine.DefaultShutdownStrategy; |
| import org.apache.camel.impl.engine.DefaultStreamCachingStrategy; |
| import org.apache.camel.impl.engine.DefaultTracer; |
| import org.apache.camel.impl.engine.DefaultUnitOfWorkFactory; |
| import org.apache.camel.impl.engine.DefaultUuidGenerator; |
| import org.apache.camel.impl.engine.EndpointKey; |
| import org.apache.camel.impl.engine.HeadersMapFactoryResolver; |
| import org.apache.camel.impl.engine.PropertiesComponentFactoryResolver; |
| import org.apache.camel.impl.engine.ReactiveExecutorResolver; |
| import org.apache.camel.impl.engine.RestRegistryFactoryResolver; |
| import org.apache.camel.impl.engine.ServicePool; |
| import org.apache.camel.impl.engine.WebSpherePackageScanClassResolver; |
| import org.apache.camel.impl.health.DefaultHealthCheckRegistry; |
| import org.apache.camel.runtimecatalog.RuntimeCamelCatalog; |
| import org.apache.camel.runtimecatalog.impl.DefaultRuntimeCamelCatalog; |
| import org.apache.camel.spi.AsyncProcessorAwaitManager; |
| import org.apache.camel.spi.BeanIntrospection; |
| import org.apache.camel.spi.BeanProcessorFactory; |
| import org.apache.camel.spi.BeanProxyFactory; |
| import org.apache.camel.spi.BeanRepository; |
| import org.apache.camel.spi.CamelBeanPostProcessor; |
| import org.apache.camel.spi.CamelContextNameStrategy; |
| import org.apache.camel.spi.ClassResolver; |
| import org.apache.camel.spi.ComponentResolver; |
| import org.apache.camel.spi.DataFormatResolver; |
| import org.apache.camel.spi.EndpointRegistry; |
| import org.apache.camel.spi.ExecutorServiceManager; |
| import org.apache.camel.spi.FactoryFinder; |
| import org.apache.camel.spi.FactoryFinderResolver; |
| import org.apache.camel.spi.HeadersMapFactory; |
| import org.apache.camel.spi.InflightRepository; |
| import org.apache.camel.spi.Injector; |
| import org.apache.camel.spi.LanguageResolver; |
| import org.apache.camel.spi.ManagementNameStrategy; |
| import org.apache.camel.spi.MessageHistoryFactory; |
| import org.apache.camel.spi.ModelJAXBContextFactory; |
| import org.apache.camel.spi.NodeIdFactory; |
| import org.apache.camel.spi.PackageScanClassResolver; |
| import org.apache.camel.spi.PackageScanResourceResolver; |
| import org.apache.camel.spi.ProcessorFactory; |
| import org.apache.camel.spi.PropertiesComponent; |
| import org.apache.camel.spi.ReactiveExecutor; |
| import org.apache.camel.spi.Registry; |
| import org.apache.camel.spi.RestRegistryFactory; |
| import org.apache.camel.spi.RouteController; |
| import org.apache.camel.spi.ShutdownStrategy; |
| import org.apache.camel.spi.StreamCachingStrategy; |
| import org.apache.camel.spi.Tracer; |
| import org.apache.camel.spi.TypeConverterRegistry; |
| import org.apache.camel.spi.UnitOfWorkFactory; |
| import org.apache.camel.spi.UuidGenerator; |
| import org.apache.camel.support.DefaultRegistry; |
| |
| /** |
| * Represents the context used to configure routes and the policies to use. |
| */ |
| public class DefaultCamelContext extends AbstractModelCamelContext { |
| |
| /** |
| * Creates the {@link CamelContext} using {@link DefaultRegistry} as |
| * registry. |
| * <p/> |
| * Use one of the other constructors to force use an explicit registry. |
| */ |
| public DefaultCamelContext() { |
| } |
| |
| /** |
| * Creates the {@link CamelContext} using the given {@link BeanRepository} |
| * as first-choice repository, and the |
| * {@link org.apache.camel.support.SimpleRegistry} as fallback, via the |
| * {@link DefaultRegistry} implementation. |
| * |
| * @param repository the bean repository. |
| */ |
| public DefaultCamelContext(BeanRepository repository) { |
| super(new DefaultRegistry(repository)); |
| } |
| |
| /** |
| * Creates the {@link CamelContext} using the given JNDI context as the |
| * registry |
| * |
| * @param jndiContext the JNDI context |
| * @deprecated create a new {@link JndiRegistry} and use the constructor |
| * that accepts this registry. |
| */ |
| @Deprecated |
| public DefaultCamelContext(Context jndiContext) { |
| this(new JndiRegistry(jndiContext)); |
| } |
| |
| /** |
| * Creates the {@link CamelContext} using the given registry |
| * |
| * @param registry the registry |
| */ |
| public DefaultCamelContext(Registry registry) { |
| super(registry); |
| } |
| |
| /** |
| * Creates the {@link CamelContext} and allows to control whether the |
| * context should automatic initialize or not. |
| * <p/> |
| * This is used by some Camel components such as camel-cdi and |
| * camel-blueprint, however this constructor is not intended for regular |
| * Camel end users. |
| * |
| * @param init whether to automatic initialize. |
| */ |
| public DefaultCamelContext(boolean init) { |
| super(init); |
| } |
| |
| @Override |
| protected TypeConverter createTypeConverter() { |
| return new DefaultTypeConverter(this, getPackageScanClassResolver(), getInjector(), getDefaultFactoryFinder(), isLoadTypeConverters()); |
| } |
| |
| @Override |
| protected TypeConverterRegistry createTypeConverterRegistry() { |
| TypeConverter typeConverter = getTypeConverter(); |
| if (typeConverter instanceof TypeConverterRegistry) { |
| return (TypeConverterRegistry)typeConverter; |
| } |
| return null; |
| } |
| |
| @Override |
| protected Injector createInjector() { |
| FactoryFinder finder = getDefaultFactoryFinder(); |
| return finder.newInstance("Injector", Injector.class).orElse(new DefaultInjector(this)); |
| } |
| |
| @Override |
| protected PropertiesComponent createPropertiesComponent() { |
| return new PropertiesComponentFactoryResolver().resolve(this); |
| } |
| |
| @Override |
| protected CamelBeanPostProcessor createBeanPostProcessor() { |
| return new DefaultCamelBeanPostProcessor(this); |
| } |
| |
| @Override |
| protected ComponentResolver createComponentResolver() { |
| return new DefaultComponentResolver(); |
| } |
| |
| @Override |
| protected Registry createRegistry() { |
| return new DefaultRegistry(); |
| } |
| |
| @Override |
| protected UuidGenerator createUuidGenerator() { |
| return new DefaultUuidGenerator(); |
| } |
| |
| @Override |
| protected ModelJAXBContextFactory createModelJAXBContextFactory() { |
| return new DefaultModelJAXBContextFactory(); |
| } |
| |
| @Override |
| protected NodeIdFactory createNodeIdFactory() { |
| return new DefaultNodeIdFactory(); |
| } |
| |
| @Override |
| protected FactoryFinderResolver createFactoryFinderResolver() { |
| return new DefaultFactoryFinderResolver(); |
| } |
| |
| @Override |
| protected ClassResolver createClassResolver() { |
| return new DefaultClassResolver(this); |
| } |
| |
| @Override |
| protected ProcessorFactory createProcessorFactory() { |
| return new DefaultProcessorFactory(); |
| } |
| |
| @Override |
| protected DataFormatResolver createDataFormatResolver() { |
| return new DefaultDataFormatResolver(); |
| } |
| |
| @Override |
| protected MessageHistoryFactory createMessageHistoryFactory() { |
| return new DefaultMessageHistoryFactory(); |
| } |
| |
| @Override |
| protected InflightRepository createInflightRepository() { |
| return new DefaultInflightRepository(); |
| } |
| |
| @Override |
| protected AsyncProcessorAwaitManager createAsyncProcessorAwaitManager() { |
| return new DefaultAsyncProcessorAwaitManager(); |
| } |
| |
| @Override |
| protected RouteController createRouteController() { |
| return new DefaultRouteController(this); |
| } |
| |
| @Override |
| protected HealthCheckRegistry createHealthCheckRegistry() { |
| return new DefaultHealthCheckRegistry(this); |
| } |
| |
| @Override |
| protected ShutdownStrategy createShutdownStrategy() { |
| return new DefaultShutdownStrategy(this); |
| } |
| |
| @Override |
| protected PackageScanClassResolver createPackageScanClassResolver() { |
| PackageScanClassResolver packageScanClassResolver; |
| // use WebSphere specific resolver if running on WebSphere |
| if (WebSpherePackageScanClassResolver.isWebSphereClassLoader(this.getClass().getClassLoader())) { |
| log.info("Using WebSphere specific PackageScanClassResolver"); |
| packageScanClassResolver = new WebSpherePackageScanClassResolver("META-INF/services/org/apache/camel/TypeConverter"); |
| } else { |
| packageScanClassResolver = new DefaultPackageScanClassResolver(); |
| } |
| return packageScanClassResolver; |
| } |
| |
| @Override |
| protected PackageScanResourceResolver createPackageScanResourceResolver() { |
| return new DefaultPackageScanResourceResolver(); |
| } |
| |
| @Override |
| protected ExecutorServiceManager createExecutorServiceManager() { |
| return new DefaultExecutorServiceManager(this); |
| } |
| |
| @Override |
| protected ServicePool<Producer> createProducerServicePool() { |
| return new ServicePool<>(Endpoint::createProducer, Producer::getEndpoint, 100); |
| } |
| |
| @Override |
| protected ServicePool<PollingConsumer> createPollingConsumerServicePool() { |
| return new ServicePool<>(Endpoint::createPollingConsumer, PollingConsumer::getEndpoint, 100); |
| } |
| |
| @Override |
| protected UnitOfWorkFactory createUnitOfWorkFactory() { |
| return new DefaultUnitOfWorkFactory(); |
| } |
| |
| @Override |
| protected RuntimeCamelCatalog createRuntimeCamelCatalog() { |
| return new DefaultRuntimeCamelCatalog(this, true); |
| } |
| |
| @Override |
| protected CamelContextNameStrategy createCamelContextNameStrategy() { |
| return new DefaultCamelContextNameStrategy(); |
| } |
| |
| @Override |
| protected ManagementNameStrategy createManagementNameStrategy() { |
| return new DefaultManagementNameStrategy(this); |
| } |
| |
| @Override |
| protected HeadersMapFactory createHeadersMapFactory() { |
| return new HeadersMapFactoryResolver().resolve(this); |
| } |
| |
| @Override |
| protected BeanProxyFactory createBeanProxyFactory() { |
| return new BeanProxyFactoryResolver().resolve(this); |
| } |
| |
| @Override |
| protected BeanProcessorFactory createBeanProcessorFactory() { |
| return new BeanProcessorFactoryResolver().resolve(this); |
| } |
| |
| @Override |
| protected BeanIntrospection createBeanIntrospection() { |
| return new DefaultBeanIntrospection(); |
| } |
| |
| @Override |
| protected Tracer createTracer() { |
| Tracer tracer = null; |
| if (getRegistry() != null) { |
| // lookup in registry |
| Map<String, Tracer> map = getRegistry().findByTypeWithName(Tracer.class); |
| if (map.size() == 1) { |
| tracer = map.values().iterator().next(); |
| } |
| } |
| if (tracer == null) { |
| tracer = getExtension(Tracer.class); |
| } |
| if (tracer == null) { |
| tracer = new DefaultTracer(); |
| setExtension(Tracer.class, tracer); |
| } |
| return tracer; |
| } |
| |
| @Override |
| protected LanguageResolver createLanguageResolver() { |
| return new DefaultLanguageResolver(); |
| } |
| |
| @Override |
| protected RestRegistryFactory createRestRegistryFactory() { |
| return new RestRegistryFactoryResolver().resolve(this); |
| } |
| |
| @Override |
| protected EndpointRegistry<EndpointKey> createEndpointRegistry(Map<EndpointKey, Endpoint> endpoints) { |
| return new DefaultEndpointRegistry(this, endpoints); |
| } |
| |
| @Override |
| protected StreamCachingStrategy createStreamCachingStrategy() { |
| return new DefaultStreamCachingStrategy(); |
| } |
| |
| @Override |
| protected ReactiveExecutor createReactiveExecutor() { |
| return new ReactiveExecutorResolver().resolve(this); |
| } |
| } |