You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2020/11/07 09:20:42 UTC

[camel] 03/03: camel-core - Optimize to avoid lambda classes in base engine to reduce memory and reduce classes loaded.

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

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

commit 0a94e0f2ecf8aa381cde59af8f762674d29f3281
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sat Nov 7 10:20:09 2020 +0100

    camel-core - Optimize to avoid lambda classes in base engine to reduce memory and reduce classes loaded.
---
 .../camel/impl/engine/SimpleCamelContext.java      | 216 +++++++++++++--------
 1 file changed, 139 insertions(+), 77 deletions(-)

diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java
index 804219e..ea696b9 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java
@@ -17,6 +17,7 @@
 package org.apache.camel.impl.engine;
 
 import java.util.Map;
+import java.util.Optional;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
@@ -114,8 +115,10 @@ public class SimpleCamelContext extends AbstractCamelContext {
 
     @Override
     protected HealthCheckRegistry createHealthCheckRegistry() {
-        return new BaseServiceResolver<>(HealthCheckRegistry.FACTORY, HealthCheckRegistry.class, getBootstrapFactoryFinder())
-                .resolve(getCamelContextReference()).orElse(null);
+        BaseServiceResolver<HealthCheckRegistry> resolver = new BaseServiceResolver<>(
+                HealthCheckRegistry.FACTORY, HealthCheckRegistry.class, getBootstrapFactoryFinder());
+        Optional<HealthCheckRegistry> result = resolver.resolve(getCamelContextReference());
+        return result.orElse(null);
     }
 
     @Override
@@ -141,14 +144,24 @@ public class SimpleCamelContext extends AbstractCamelContext {
     @Override
     protected Injector createInjector() {
         FactoryFinder finder = getBootstrapFactoryFinder();
-        return finder.newInstance("Injector", Injector.class).orElse(new DefaultInjector(getCamelContextReference()));
+        Optional<Injector> result = finder.newInstance("Injector", Injector.class);
+        if (result.isPresent()) {
+            return result.get();
+        } else {
+            return new DefaultInjector(getCamelContextReference());
+        }
     }
 
     @Override
     protected PropertiesComponent createPropertiesComponent() {
-        return new BaseServiceResolver<>(PropertiesComponent.FACTORY, PropertiesComponent.class, getBootstrapFactoryFinder())
-                .resolve(getCamelContextReference())
-                .orElseGet(org.apache.camel.component.properties.PropertiesComponent::new);
+        BaseServiceResolver<PropertiesComponent> resolver = new BaseServiceResolver<>(
+                PropertiesComponent.FACTORY, PropertiesComponent.class, getBootstrapFactoryFinder());
+        Optional<PropertiesComponent> result = resolver.resolve(getCamelContextReference());
+        if (result.isPresent()) {
+            return result.get();
+        } else {
+            return new org.apache.camel.component.properties.PropertiesComponent();
+        }
     }
 
     @Override
@@ -178,12 +191,15 @@ public class SimpleCamelContext extends AbstractCamelContext {
 
     @Override
     protected ModelJAXBContextFactory createModelJAXBContextFactory() {
-        return new BaseServiceResolver<>(
-                ModelJAXBContextFactory.FACTORY, ModelJAXBContextFactory.class, getBootstrapFactoryFinder())
-                        .resolve(getCamelContextReference())
-                        .orElseThrow(() -> new IllegalArgumentException(
-                                "Cannot find ModelJAXBContextFactory on classpath. "
-                                                                        + "Add camel-xml-jaxb to classpath."));
+        BaseServiceResolver<ModelJAXBContextFactory> resolver = new BaseServiceResolver<>(
+                ModelJAXBContextFactory.FACTORY, ModelJAXBContextFactory.class, getBootstrapFactoryFinder());
+        Optional<ModelJAXBContextFactory> result = resolver.resolve(getCamelContextReference());
+        if (result.isPresent()) {
+            return result.get();
+        } else {
+            throw new IllegalArgumentException(
+                    "Cannot find ModelJAXBContextFactory on classpath. Add camel-xml-jaxb to classpath.");
+        }
     }
 
     @Override
@@ -203,21 +219,28 @@ public class SimpleCamelContext extends AbstractCamelContext {
 
     @Override
     protected ProcessorFactory createProcessorFactory() {
-        return new BaseServiceResolver<>(ProcessorFactory.FACTORY, ProcessorFactory.class, getBootstrapFactoryFinder())
-                .resolve(getCamelContextReference())
-                .orElseThrow(() -> new IllegalArgumentException(
-                        "Cannot find ProcessorFactory on classpath. "
-                                                                + "Add camel-core-processor to classpath."));
+        BaseServiceResolver<ProcessorFactory> resolver
+                = new BaseServiceResolver<>(ProcessorFactory.FACTORY, ProcessorFactory.class, getBootstrapFactoryFinder());
+        Optional<ProcessorFactory> result = resolver.resolve(getCamelContextReference());
+        if (result.isPresent()) {
+            return result.get();
+        } else {
+            throw new IllegalArgumentException(
+                    "Cannot find ProcessorFactory on classpath. Add camel-core-processor to classpath.");
+        }
     }
 
     @Override
     protected InternalProcessorFactory createInternalProcessorFactory() {
-        return new BaseServiceResolver<>(
-                InternalProcessorFactory.FACTORY, InternalProcessorFactory.class, getBootstrapFactoryFinder())
-                        .resolve(getCamelContextReference())
-                        .orElseThrow(() -> new IllegalArgumentException(
-                                "Cannot find InternalProcessorFactory on classpath. "
-                                                                        + "Add camel-core-processor to classpath."));
+        BaseServiceResolver<InternalProcessorFactory> resolver = new BaseServiceResolver<>(
+                InternalProcessorFactory.FACTORY, InternalProcessorFactory.class, getBootstrapFactoryFinder());
+        Optional<InternalProcessorFactory> result = resolver.resolve(getCamelContextReference());
+        if (result.isPresent()) {
+            return result.get();
+        } else {
+            throw new IllegalArgumentException(
+                    "Cannot find InternalProcessorFactory on classpath. Add ccamel-core-processor to classpath.");
+        }
     }
 
     @Override
@@ -286,11 +309,15 @@ public class SimpleCamelContext extends AbstractCamelContext {
 
     @Override
     protected RuntimeCamelCatalog createRuntimeCamelCatalog() {
-        return new BaseServiceResolver<>(RuntimeCamelCatalog.FACTORY, RuntimeCamelCatalog.class, getBootstrapFactoryFinder())
-                .resolve(getCamelContextReference())
-                .orElseThrow(() -> new IllegalArgumentException(
-                        "Cannot find RuntimeCamelCatalog on classpath. "
-                                                                + "Add camel-core-catalog to classpath."));
+        BaseServiceResolver<RuntimeCamelCatalog> resolver = new BaseServiceResolver<>(
+                RuntimeCamelCatalog.FACTORY, RuntimeCamelCatalog.class, getBootstrapFactoryFinder());
+        Optional<RuntimeCamelCatalog> result = resolver.resolve(getCamelContextReference());
+        if (result.isPresent()) {
+            return result.get();
+        } else {
+            throw new IllegalArgumentException(
+                    "Cannot find RuntimeCamelCatalog on classpath. Add camel-core-catalog to classpath.");
+        }
     }
 
     @Override
@@ -305,46 +332,64 @@ public class SimpleCamelContext extends AbstractCamelContext {
 
     @Override
     protected HeadersMapFactory createHeadersMapFactory() {
-        return new BaseServiceResolver<>(HeadersMapFactory.FACTORY, HeadersMapFactory.class, getBootstrapFactoryFinder())
-                .resolve(getCamelContextReference())
-                .orElseGet(DefaultHeadersMapFactory::new);
+        BaseServiceResolver<HeadersMapFactory> resolver
+                = new BaseServiceResolver<>(HeadersMapFactory.FACTORY, HeadersMapFactory.class, getBootstrapFactoryFinder());
+        Optional<HeadersMapFactory> result = resolver.resolve(getCamelContextReference());
+        if (result.isPresent()) {
+            return result.get();
+        } else {
+            return new DefaultHeadersMapFactory();
+        }
     }
 
     @Override
     protected BeanProxyFactory createBeanProxyFactory() {
-        return new BaseServiceResolver<>(BeanProxyFactory.FACTORY, BeanProxyFactory.class, getBootstrapFactoryFinder())
-                .resolve(getCamelContextReference())
-                .orElseThrow(() -> new IllegalArgumentException(
-                        "Cannot find BeanProxyFactory on classpath. "
-                                                                + "Add camel-bean to classpath."));
+        BaseServiceResolver<BeanProxyFactory> resolver
+                = new BaseServiceResolver<>(BeanProxyFactory.FACTORY, BeanProxyFactory.class, getBootstrapFactoryFinder());
+        Optional<BeanProxyFactory> result = resolver.resolve(getCamelContextReference());
+        if (result.isPresent()) {
+            return result.get();
+        } else {
+            throw new IllegalArgumentException("Cannot find BeanProxyFactory on classpath. Add camel-bean to classpath.");
+        }
     }
 
     @Override
     protected AnnotationBasedProcessorFactory createAnnotationBasedProcessorFactory() {
-        return new BaseServiceResolver<>(
-                AnnotationBasedProcessorFactory.FACTORY, AnnotationBasedProcessorFactory.class, getBootstrapFactoryFinder())
-                        .resolve(getCamelContextReference())
-                        .orElseThrow(() -> new IllegalArgumentException(
-                                "Cannot find AnnotationBasedProcessorFactory on classpath. "
-                                                                        + "Add camel-core-processor to classpath."));
+        BaseServiceResolver<AnnotationBasedProcessorFactory> resolver = new BaseServiceResolver<>(
+                AnnotationBasedProcessorFactory.FACTORY, AnnotationBasedProcessorFactory.class, getBootstrapFactoryFinder());
+        Optional<AnnotationBasedProcessorFactory> result = resolver.resolve(getCamelContextReference());
+        if (result.isPresent()) {
+            return result.get();
+        } else {
+            throw new IllegalArgumentException(
+                    "Cannot find AnnotationBasedProcessorFactory on classpath. Add camel-core-processor to classpath.");
+        }
     }
 
     @Override
     protected DeferServiceFactory createDeferServiceFactory() {
-        return new BaseServiceResolver<>(DeferServiceFactory.FACTORY, DeferServiceFactory.class, getBootstrapFactoryFinder())
-                .resolve(getCamelContextReference())
-                .orElseThrow(() -> new IllegalArgumentException(
-                        "Cannot find DeferServiceFactory on classpath. "
-                                                                + "Add camel-core-processor to classpath."));
+        BaseServiceResolver<DeferServiceFactory> resolver = new BaseServiceResolver<>(
+                DeferServiceFactory.FACTORY, DeferServiceFactory.class, getBootstrapFactoryFinder());
+        Optional<DeferServiceFactory> result = resolver.resolve(getCamelContextReference());
+        if (result.isPresent()) {
+            return result.get();
+        } else {
+            throw new IllegalArgumentException(
+                    "Cannot find DeferServiceFactory on classpath. Add camel-core-processor to classpath.");
+        }
     }
 
     @Override
     protected BeanProcessorFactory createBeanProcessorFactory() {
-        return new BaseServiceResolver<>(BeanProcessorFactory.FACTORY, BeanProcessorFactory.class, getBootstrapFactoryFinder())
-                .resolve(getCamelContextReference())
-                .orElseThrow(() -> new IllegalArgumentException(
-                        "Cannot find BeanProcessorFactory on classpath. "
-                                                                + "Add camel-bean to classpath."));
+        BaseServiceResolver<BeanProcessorFactory> resolver = new BaseServiceResolver<>(
+                BeanProcessorFactory.FACTORY, BeanProcessorFactory.class, getBootstrapFactoryFinder());
+        Optional<BeanProcessorFactory> result = resolver.resolve(getCamelContextReference());
+        if (result.isPresent()) {
+            return result.get();
+        } else {
+            throw new IllegalArgumentException("Cannot find BeanProcessorFactory on classpath. Add camel-bean to classpath.");
+        }
     }
 
     @Override
@@ -354,31 +399,40 @@ public class SimpleCamelContext extends AbstractCamelContext {
 
     @Override
     protected XMLRoutesDefinitionLoader createXMLRoutesDefinitionLoader() {
-        return new BaseServiceResolver<>(
-                XMLRoutesDefinitionLoader.FACTORY, XMLRoutesDefinitionLoader.class, getBootstrapFactoryFinder())
-                        .resolve(getCamelContextReference())
-                        .orElseThrow(() -> new IllegalArgumentException(
-                                "Cannot find XMLRoutesDefinitionLoader on classpath. "
-                                                                        + "Add either camel-xml-io or camel-xml-jaxb to classpath."));
+        BaseServiceResolver<XMLRoutesDefinitionLoader> resolver = new BaseServiceResolver<>(
+                XMLRoutesDefinitionLoader.FACTORY, XMLRoutesDefinitionLoader.class, getBootstrapFactoryFinder());
+        Optional<XMLRoutesDefinitionLoader> result = resolver.resolve(getCamelContextReference());
+        if (result.isPresent()) {
+            return result.get();
+        } else {
+            throw new IllegalArgumentException(
+                    "Cannot find ModelJAXBContextFactory on classpath. Add either camel-xml-io or camel-xml-jaxb to classpath.");
+        }
     }
 
     @Override
     protected ModelToXMLDumper createModelToXMLDumper() {
-        return new BaseServiceResolver<>(ModelToXMLDumper.FACTORY, ModelToXMLDumper.class, getBootstrapFactoryFinder())
-                .resolve(getCamelContextReference())
-                .orElseThrow(() -> new IllegalArgumentException(
-                        "Cannot find ModelToXMLDumper on classpath. "
-                                                                + "Add camel-xml-jaxb to classpath."));
+        BaseServiceResolver<ModelToXMLDumper> resolver
+                = new BaseServiceResolver<>(ModelToXMLDumper.FACTORY, ModelToXMLDumper.class, getBootstrapFactoryFinder());
+        Optional<ModelToXMLDumper> result = resolver.resolve(getCamelContextReference());
+        if (result.isPresent()) {
+            return result.get();
+        } else {
+            throw new IllegalArgumentException("Cannot find ModelToXMLDumper on classpath. Add camel-xml-jaxb to classpath.");
+        }
     }
 
     @Override
     protected RestBindingJaxbDataFormatFactory createRestBindingJaxbDataFormatFactory() {
-        return new BaseServiceResolver<>(
-                RestBindingJaxbDataFormatFactory.FACTORY, RestBindingJaxbDataFormatFactory.class, getBootstrapFactoryFinder())
-                        .resolve(getCamelContextReference())
-                        .orElseThrow(() -> new IllegalArgumentException(
-                                "Cannot find RestBindingJaxbDataFormatFactory on classpath. "
-                                                                        + "Add camel-jaxb to classpath."));
+        BaseServiceResolver<RestBindingJaxbDataFormatFactory> resolver = new BaseServiceResolver<>(
+                RestBindingJaxbDataFormatFactory.FACTORY, RestBindingJaxbDataFormatFactory.class, getBootstrapFactoryFinder());
+        Optional<RestBindingJaxbDataFormatFactory> result = resolver.resolve(getCamelContextReference());
+        if (result.isPresent()) {
+            return result.get();
+        } else {
+            throw new IllegalArgumentException(
+                    "Cannot find RestBindingJaxbDataFormatFactory on classpath. Add camel-jaxb to classpath.");
+        }
     }
 
     @Override
@@ -418,11 +472,14 @@ public class SimpleCamelContext extends AbstractCamelContext {
 
     @Override
     protected RestRegistryFactory createRestRegistryFactory() {
-        return new BaseServiceResolver<>(RestRegistryFactory.FACTORY, RestRegistryFactory.class, getBootstrapFactoryFinder())
-                .resolve(getCamelContextReference())
-                .orElseThrow(() -> new IllegalArgumentException(
-                        "Cannot find RestRegistryFactory on classpath. "
-                                                                + "Add camel-rest to classpath."));
+        BaseServiceResolver<RestRegistryFactory> resolver = new BaseServiceResolver<>(
+                RestRegistryFactory.FACTORY, RestRegistryFactory.class, getBootstrapFactoryFinder());
+        Optional<RestRegistryFactory> result = resolver.resolve(getCamelContextReference());
+        if (result.isPresent()) {
+            return result.get();
+        } else {
+            throw new IllegalArgumentException("Cannot find RestRegistryFactory on classpath. Add camel-rest to classpath.");
+        }
     }
 
     @Override
@@ -437,9 +494,14 @@ public class SimpleCamelContext extends AbstractCamelContext {
 
     @Override
     protected ReactiveExecutor createReactiveExecutor() {
-        return new BaseServiceResolver<>(ReactiveExecutor.FACTORY, ReactiveExecutor.class, getBootstrapFactoryFinder())
-                .resolve(getCamelContextReference())
-                .orElseGet(DefaultReactiveExecutor::new);
+        BaseServiceResolver<ReactiveExecutor> resolver
+                = new BaseServiceResolver<>(ReactiveExecutor.FACTORY, ReactiveExecutor.class, getBootstrapFactoryFinder());
+        Optional<ReactiveExecutor> result = resolver.resolve(getCamelContextReference());
+        if (result.isPresent()) {
+            return result.get();
+        } else {
+            return new DefaultReactiveExecutor();
+        }
     }
 
     @Override