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:10 UTC
[camel] 02/05: CAMEL-14354: camel-core optimize. Lets use a inner
class for the after task instead of lambda so we have nicer strackrrace and
can better understand them.
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 11d4eab0f695d4011cda56503f6feea5290bb443
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sun Feb 2 14:02:59 2020 +0100
CAMEL-14354: camel-core optimize. Lets use a inner class for the after task instead of lambda so we have nicer strackrrace and can better understand them.
---
.../camel/processor/CamelInternalProcessor.java | 76 ++++++++++++++--------
1 file changed, 48 insertions(+), 28 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 f2a7c7e..6b8265e 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
@@ -146,6 +146,53 @@ public class CamelInternalProcessor extends DelegateAsyncProcessor {
return null;
}
+ /**
+ * Callback task to process the advices after processing.
+ */
+ private class AsyncAfterTask implements AsyncCallback {
+
+ private final Object[] states;
+ private final Exchange exchange;
+ private final AsyncCallback originalCallback;
+
+ private AsyncAfterTask(Object[] states, Exchange exchange, AsyncCallback originalCallback) {
+ this.states = states;
+ this.exchange = exchange;
+ this.originalCallback = originalCallback;
+ }
+
+ @Override
+ @SuppressWarnings("unchecked")
+ public void done(boolean doneSync) {
+ try {
+ for (int i = advices.size() - 1, j = states.length - 1; i >= 0; i--) {
+ CamelInternalProcessorAdvice task = advices.get(i);
+ Object state = null;
+ if (task.hasState()) {
+ state = states[j--];
+ }
+ try {
+ task.after(exchange, state);
+ } catch (Throwable e) {
+ exchange.setException(e);
+ // allow all advices to complete even if there was an exception
+ }
+ }
+ } finally {
+ // ----------------------------------------------------------
+ // CAMEL END USER - DEBUG ME HERE +++ START +++
+ // ----------------------------------------------------------
+ // callback must be called
+ if (originalCallback != null) {
+ reactiveExecutor.schedule(originalCallback);
+ }
+ // ----------------------------------------------------------
+ // CAMEL END USER - DEBUG ME HERE +++ END +++
+ // ----------------------------------------------------------
+ }
+ }
+ }
+
@Override
@SuppressWarnings("unchecked")
public boolean process(Exchange exchange, AsyncCallback originalCallback) {
@@ -187,34 +234,7 @@ public class CamelInternalProcessor extends DelegateAsyncProcessor {
}
// create internal callback which will execute the advices in reverse order when done
- AsyncCallback callback = doneSync -> {
- try {
- for (int i = advices.size() - 1, j = states.length - 1; i >= 0; i--) {
- CamelInternalProcessorAdvice task = advices.get(i);
- Object state = null;
- if (task.hasState()) {
- state = states[j--];
- }
- try {
- task.after(exchange, state);
- } catch (Throwable e) {
- exchange.setException(e);
- // allow all advices to complete even if there was an exception
- }
- }
- } finally {
- // ----------------------------------------------------------
- // CAMEL END USER - DEBUG ME HERE +++ START +++
- // ----------------------------------------------------------
- // callback must be called
- if (originalCallback != null) {
- reactiveExecutor.schedule(originalCallback);
- }
- // ----------------------------------------------------------
- // CAMEL END USER - DEBUG ME HERE +++ END +++
- // ----------------------------------------------------------
- }
- };
+ AsyncCallback callback = new AsyncAfterTask(states, exchange, originalCallback);
if (exchange.isTransacted()) {
// must be synchronized for transacted exchanges