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/01/27 12:34:57 UTC

[camel] 03/04: CAMEL-14354: camel-core optimize

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 7acff9d6201da53d6746a4dc88d8169c7b489b02
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Mon Jan 27 13:27:05 2020 +0100

    CAMEL-14354: camel-core optimize
---
 .../main/java/org/apache/camel/spi/UnitOfWorkFactory.java  |  9 ++++++++-
 .../apache/camel/impl/engine/DefaultUnitOfWorkFactory.java | 14 ++++++++++++--
 .../org/apache/camel/processor/CamelInternalProcessor.java |  3 +++
 3 files changed, 23 insertions(+), 3 deletions(-)

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 9af44dc..64b2429 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
@@ -16,12 +16,14 @@
  */
 package org.apache.camel.spi;
 
+import org.apache.camel.AfterPropertiesConfigured;
+import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
 
 /**
  * Factory to create {@link org.apache.camel.spi.UnitOfWork}.
  */
-public interface UnitOfWorkFactory {
+public interface UnitOfWorkFactory extends AfterPropertiesConfigured {
 
     /**
      * Creates a new {@link UnitOfWork}
@@ -30,5 +32,10 @@ public interface UnitOfWorkFactory {
      * @return the created {@link UnitOfWork}
      */
     UnitOfWork createUnitOfWork(Exchange exchange);
+
+    @Override
+    default void afterPropertiesConfigured(CamelContext camelContext) {
+        // noop
+    }
 }
 
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultUnitOfWorkFactory.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultUnitOfWorkFactory.java
index a2af28e..69e4f93 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultUnitOfWorkFactory.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultUnitOfWorkFactory.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.impl.engine;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
 import org.apache.camel.spi.UnitOfWork;
 import org.apache.camel.spi.UnitOfWorkFactory;
@@ -25,15 +26,24 @@ import org.apache.camel.spi.UnitOfWorkFactory;
  */
 public class DefaultUnitOfWorkFactory implements UnitOfWorkFactory {
 
+    private boolean usedMDCLogging;
+    private String mdcLoggingKeysPattern;
+
     @Override
     public UnitOfWork createUnitOfWork(Exchange exchange) {
         UnitOfWork answer;
-        if (exchange.getContext().isUseMDCLogging()) {
-            answer = new MDCUnitOfWork(exchange, exchange.getContext().getMDCLoggingKeysPattern());
+        if (usedMDCLogging) {
+            answer = new MDCUnitOfWork(exchange, mdcLoggingKeysPattern);
         } else {
             answer = new DefaultUnitOfWork(exchange);
         }
         return answer;
     }
 
+    @Override
+    public void afterPropertiesConfigured(CamelContext camelContext) {
+        usedMDCLogging = camelContext.isUseMDCLogging() != null && camelContext.isUseMDCLogging();
+        mdcLoggingKeysPattern = camelContext.getMDCLoggingKeysPattern();
+    }
+
 }
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/CamelInternalProcessor.java b/core/camel-base/src/main/java/org/apache/camel/processor/CamelInternalProcessor.java
index 8c7dcb1..c1e4d3b 100644
--- a/core/camel-base/src/main/java/org/apache/camel/processor/CamelInternalProcessor.java
+++ b/core/camel-base/src/main/java/org/apache/camel/processor/CamelInternalProcessor.java
@@ -60,6 +60,7 @@ import org.apache.camel.support.OrderedComparator;
 import org.apache.camel.support.SynchronizationAdapter;
 import org.apache.camel.support.UnitOfWorkHelper;
 import org.apache.camel.support.processor.DelegateAsyncProcessor;
+import org.apache.camel.support.service.ServiceHelper;
 import org.apache.camel.util.StopWatch;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -595,6 +596,8 @@ public class CamelInternalProcessor extends DelegateAsyncProcessor {
             if (routeContext != null) {
                 this.routeId = routeContext.getRouteId();
                 this.uowFactory = routeContext.getCamelContext().adapt(ExtendedCamelContext.class).getUnitOfWorkFactory();
+                // optimize uow factory to initialize it early and once per advice
+                this.uowFactory.afterPropertiesConfigured(routeContext.getCamelContext());
             }
         }