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 a4c40c5717d53d962d641da9a72c8df4711a1c96 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Sat Jan 25 20:48:25 2020 +0100 CAMEL-14354: camel-core optimize --- .../src/main/java/org/apache/camel/ExtendedExchange.java | 5 +++++ .../org/apache/camel/impl/engine/DefaultUnitOfWork.java | 8 +++++++- .../main/java/org/apache/camel/support/DefaultExchange.java | 13 +++++++------ 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/core/camel-api/src/main/java/org/apache/camel/ExtendedExchange.java b/core/camel-api/src/main/java/org/apache/camel/ExtendedExchange.java index ce927f1..2f9acdf 100644 --- a/core/camel-api/src/main/java/org/apache/camel/ExtendedExchange.java +++ b/core/camel-api/src/main/java/org/apache/camel/ExtendedExchange.java @@ -100,4 +100,9 @@ public interface ExtendedExchange extends Exchange { */ String getHistoryNodeLabel(); + /** + * Sets whether the exchange is routed in a transaction. + */ + void setTransacted(boolean transacted); + } diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultUnitOfWork.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultUnitOfWork.java index e2d69dd..7c784be 100644 --- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultUnitOfWork.java +++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultUnitOfWork.java @@ -59,6 +59,7 @@ public class DefaultUnitOfWork implements UnitOfWork, Service { // requires API changes and thus is best kept for future Camel work private String id; + private final Exchange exchange; private final Logger log; private final CamelContext context; private final InflightRepository inflightRepository; @@ -73,7 +74,8 @@ public class DefaultUnitOfWork implements UnitOfWork, Service { } protected DefaultUnitOfWork(Exchange exchange, Logger logger) { - log = logger; + this.exchange = exchange; + this.log = logger; if (log.isTraceEnabled()) { log.trace("UnitOfWork created for ExchangeId: {} with {}", exchange.getExchangeId(), exchange); } @@ -264,12 +266,16 @@ public class DefaultUnitOfWork implements UnitOfWork, Service { @Override public void beginTransactedBy(Object key) { + exchange.adapt(ExtendedExchange.class).setTransacted(true); getTransactedBy().add(key); } @Override public void endTransactedBy(Object key) { getTransactedBy().remove(key); + // we may still be transacted even if we end this section of transaction + boolean transacted = isTransacted(); + exchange.adapt(ExtendedExchange.class).setTransacted(transacted); } @Override diff --git a/core/camel-support/src/main/java/org/apache/camel/support/DefaultExchange.java b/core/camel-support/src/main/java/org/apache/camel/support/DefaultExchange.java index 995f306..0c6d925 100644 --- a/core/camel-support/src/main/java/org/apache/camel/support/DefaultExchange.java +++ b/core/camel-support/src/main/java/org/apache/camel/support/DefaultExchange.java @@ -57,6 +57,7 @@ public final class DefaultExchange implements ExtendedExchange { private Boolean externalRedelivered; private String historyNodeId; private String historyNodeLabel; + private boolean transacted; private boolean routeStop; private boolean rollbackOnly; private boolean rollbackOnlyLast; @@ -467,12 +468,12 @@ public final class DefaultExchange implements ExtendedExchange { @Override public boolean isTransacted() { - UnitOfWork uow = getUnitOfWork(); - if (uow != null) { - return uow.isTransacted(); - } else { - return false; - } + return transacted; + } + + @Override + public void setTransacted(boolean transacted) { + this.transacted = true; } @Override