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/02/02 18:19:13 UTC

[camel] 05/05: CAMEL-14354: camel-core - Optimize to reduce calling method in critical path

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 d7241e1bb045d333dd265d06ba2458994a77adad
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sun Feb 2 19:18:21 2020 +0100

    CAMEL-14354: camel-core - Optimize to reduce calling method in critical path
---
 .../apache/camel/processor/CamelInternalProcessor.java  | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

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 d447036..84c4ac0 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
@@ -149,21 +149,30 @@ public class CamelInternalProcessor extends DelegateAsyncProcessor {
     /**
      * Callback task to process the advices after processing.
      */
-    private class AsyncAfterTask implements AsyncCallback {
+    private static final class AsyncAfterTask implements AsyncCallback {
 
+        private final List<CamelInternalProcessorAdvice<?>> advices;
         private final Object[] states;
         private final Exchange exchange;
         private final AsyncCallback originalCallback;
+        private final ReactiveExecutor reactiveExecutor;
 
-        private AsyncAfterTask(Object[] states, Exchange exchange, AsyncCallback originalCallback) {
+        private AsyncAfterTask(List<CamelInternalProcessorAdvice<?>> advices, Object[] states,
+                               Exchange exchange, AsyncCallback originalCallback, ReactiveExecutor reactiveExecutor) {
+            this.advices = advices;
             this.states = states;
             this.exchange = exchange;
             this.originalCallback = originalCallback;
+            this.reactiveExecutor = reactiveExecutor;
         }
 
         @Override
-        @SuppressWarnings("unchecked")
         public void done(boolean doneSync) {
+            // noop as we override run method
+        }
+
+        @Override
+        public void run() {
             try {
                 for (int i = advices.size() - 1, j = states.length - 1; i >= 0; i--) {
                     CamelInternalProcessorAdvice task = advices.get(i);
@@ -247,7 +256,7 @@ public class CamelInternalProcessor extends DelegateAsyncProcessor {
         }
 
         // create internal callback which will execute the advices in reverse order when done
-        AsyncCallback callback = new AsyncAfterTask(states, exchange, originalCallback);
+        AsyncCallback callback = new AsyncAfterTask(advices, states, exchange, originalCallback, reactiveExecutor);
 
         if (exchange.isTransacted()) {
             // must be synchronized for transacted exchanges