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 <[email protected]>
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());
             }
         }
 

Reply via email to