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 2021/03/14 10:56:42 UTC
[camel] 05/05: CAMEL-16353: camel-core - Force eager classloading
in build phase
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 8c2939c45f67cc84c36e8ec2973eadda95477155
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sun Mar 14 11:44:50 2021 +0100
CAMEL-16353: camel-core - Force eager classloading in build phase
---
.../java/org/apache/camel/spi/UnitOfWorkFactory.java | 5 +++++
.../impl/engine/DefaultExchangeFactoryManager.java | 17 +++++++++++++++++
.../org/apache/camel/impl/engine/DefaultUnitOfWork.java | 4 ++++
.../camel/impl/engine/DefaultUnitOfWorkFactory.java | 6 ++++++
.../apache/camel/impl/engine/PooledExchangeFactory.java | 1 +
.../java/org/apache/camel/support/ExchangeHelper.java | 5 +++++
.../java/org/apache/camel/support/UnitOfWorkHelper.java | 4 ++++
7 files changed, 42 insertions(+)
diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/UnitOfWorkFactory.java b/core/camel-api/src/main/java/org/apache/camel/spi/UnitOfWorkFactory.java
index e3b5715..ab76ae1 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/UnitOfWorkFactory.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/UnitOfWorkFactory.java
@@ -19,6 +19,7 @@ package org.apache.camel.spi;
import org.apache.camel.AfterPropertiesConfigured;
import org.apache.camel.CamelContext;
import org.apache.camel.Exchange;
+import org.slf4j.Logger;
/**
* Factory to create {@link org.apache.camel.spi.UnitOfWork}.
@@ -37,4 +38,8 @@ public interface UnitOfWorkFactory extends AfterPropertiesConfigured {
default void afterPropertiesConfigured(CamelContext camelContext) {
// noop
}
+
+ default void warmup(Logger log) {
+ // noop
+ }
}
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultExchangeFactoryManager.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultExchangeFactoryManager.java
index eb3aa1e..1568966 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultExchangeFactoryManager.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultExchangeFactoryManager.java
@@ -24,12 +24,19 @@ import java.util.concurrent.ConcurrentHashMap;
import org.apache.camel.CamelContext;
import org.apache.camel.CamelContextAware;
import org.apache.camel.Consumer;
+import org.apache.camel.ExtendedCamelContext;
import org.apache.camel.spi.ExchangeFactory;
import org.apache.camel.spi.ExchangeFactoryManager;
+import org.apache.camel.support.ExchangeHelper;
+import org.apache.camel.support.UnitOfWorkHelper;
import org.apache.camel.support.service.ServiceSupport;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
public class DefaultExchangeFactoryManager extends ServiceSupport implements ExchangeFactoryManager, CamelContextAware {
+ private static final Logger LOG = LoggerFactory.getLogger(DefaultExchangeFactoryManager.class);
+
private final Map<Consumer, ExchangeFactory> factories = new ConcurrentHashMap<>();
private final UtilizationStatistics statistics = new UtilizationStatistics();
private CamelContext camelContext;
@@ -166,6 +173,16 @@ public class DefaultExchangeFactoryManager extends ServiceSupport implements Exc
}
@Override
+ protected void doBuild() throws Exception {
+ super.doBuild();
+ // force to create and load the class during build time so the JVM does not
+ // load the class on first exchange to be created
+ ExchangeHelper.warmup(LOG);
+ UnitOfWorkHelper.warmup(LOG);
+ camelContext.adapt(ExtendedCamelContext.class).getUnitOfWorkFactory().warmup(LOG);
+ }
+
+ @Override
protected void doShutdown() throws Exception {
factories.clear();
}
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultUnitOfWork.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultUnitOfWork.java
index c80c515..f8f143a 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultUnitOfWork.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultUnitOfWork.java
@@ -84,6 +84,10 @@ public class DefaultUnitOfWork implements UnitOfWork {
doOnPrepare(exchange);
}
+ static void warmup(Logger log) {
+ log.trace("Warming up DefaultUnitOfWork");
+ }
+
UnitOfWork newInstance(Exchange exchange) {
return new DefaultUnitOfWork(exchange, inflightRepository, allowUseOriginalMessage, useBreadcrumb);
}
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultUnitOfWorkFactory.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultUnitOfWorkFactory.java
index dd91419..78a36eb 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultUnitOfWorkFactory.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultUnitOfWorkFactory.java
@@ -21,6 +21,7 @@ import org.apache.camel.Exchange;
import org.apache.camel.spi.InflightRepository;
import org.apache.camel.spi.UnitOfWork;
import org.apache.camel.spi.UnitOfWorkFactory;
+import org.slf4j.Logger;
/**
* Default {@link org.apache.camel.spi.UnitOfWorkFactory}
@@ -34,6 +35,11 @@ public class DefaultUnitOfWorkFactory implements UnitOfWorkFactory {
private boolean useBreadcrumb;
@Override
+ public void warmup(Logger log) {
+ DefaultUnitOfWork.warmup(log);
+ }
+
+ @Override
public UnitOfWork createUnitOfWork(Exchange exchange) {
UnitOfWork answer;
if (usedMDCLogging) {
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/PooledExchangeFactory.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/PooledExchangeFactory.java
index 4eb0a7b..44e9190 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/PooledExchangeFactory.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/PooledExchangeFactory.java
@@ -48,6 +48,7 @@ public final class PooledExchangeFactory extends PrototypeExchangeFactory {
// load the class on first exchange to be created
DefaultPooledExchange dummy = new DefaultPooledExchange(camelContext);
LOG.trace("Warming up PooledExchangeFactory loaded class: {}", dummy.getClass().getName());
+
}
@Override
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/ExchangeHelper.java b/core/camel-support/src/main/java/org/apache/camel/support/ExchangeHelper.java
index 42d8408..7006e7e 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/ExchangeHelper.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/ExchangeHelper.java
@@ -56,6 +56,7 @@ import org.apache.camel.util.IOHelper;
import org.apache.camel.util.ObjectHelper;
import org.apache.camel.util.Scanner;
import org.apache.camel.util.StringHelper;
+import org.slf4j.Logger;
/**
* Some helper methods for working with {@link Exchange} objects
@@ -68,6 +69,10 @@ public final class ExchangeHelper {
private ExchangeHelper() {
}
+ public static void warmup(Logger log) {
+ log.trace("Warming up ExchangeHelper");
+ }
+
/**
* Extracts the Exchange.BINDING of the given type or null if not present
*
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/UnitOfWorkHelper.java b/core/camel-support/src/main/java/org/apache/camel/support/UnitOfWorkHelper.java
index 38bca85..4d99365 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/UnitOfWorkHelper.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/UnitOfWorkHelper.java
@@ -38,6 +38,10 @@ public final class UnitOfWorkHelper {
private UnitOfWorkHelper() {
}
+ public static void warmup(Logger log) {
+ log.trace("Warming up UnitOfWorkHelper");
+ }
+
/**
* Done and stop the {@link UnitOfWork}.
*