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

Reply via email to