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 2021/04/19 07:44:31 UTC

[camel] branch master updated: camel-core - Optimize fluent producer template to reduce object allocations

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


The following commit(s) were added to refs/heads/master by this push:
     new bfafd03  camel-core - Optimize fluent producer template to reduce object allocations
bfafd03 is described below

commit bfafd03b4a402bde1ad3a429bc80d70ecdc69f07
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Mon Apr 19 09:43:48 2021 +0200

    camel-core - Optimize fluent producer template to reduce object allocations
---
 .../impl/engine/DefaultFluentProducerTemplate.java      | 17 ++++++++++++-----
 .../camel/builder/FluentProducerTemplateTest.java       |  9 +++++++++
 2 files changed, 21 insertions(+), 5 deletions(-)

diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultFluentProducerTemplate.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultFluentProducerTemplate.java
index 61da95e..fbb8f34 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultFluentProducerTemplate.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultFluentProducerTemplate.java
@@ -477,18 +477,25 @@ public class DefaultFluentProducerTemplate extends ServiceSupport implements Flu
 
     private Processor defaultProcessor() {
         return exchange -> {
-            ObjectHelper.ifNotEmpty(headers, exchange.getIn().getHeaders()::putAll);
-            ObjectHelper.ifNotEmpty(body, exchange.getIn()::setBody);
+            if (headers != null) {
+                exchange.getIn().getHeaders().putAll(headers);
+            }
+            if (body != null) {
+                exchange.getIn().setBody(body);
+            }
         };
     }
 
     private Processor defaultAsyncProcessor() {
         final Map<String, Object> headersCopy = ObjectHelper.isNotEmpty(this.headers) ? new HashMap<>(this.headers) : null;
         final Object bodyCopy = this.body;
-
         return exchange -> {
-            ObjectHelper.ifNotEmpty(headersCopy, exchange.getIn().getHeaders()::putAll);
-            ObjectHelper.ifNotEmpty(bodyCopy, exchange.getIn()::setBody);
+            if (headersCopy != null) {
+                exchange.getIn().getHeaders().putAll(headersCopy);
+            }
+            if (bodyCopy != null) {
+                exchange.getIn().setBody(bodyCopy);
+            }
         };
     }
 
diff --git a/core/camel-core/src/test/java/org/apache/camel/builder/FluentProducerTemplateTest.java b/core/camel-core/src/test/java/org/apache/camel/builder/FluentProducerTemplateTest.java
index b14aa92..6229f8c 100644
--- a/core/camel-core/src/test/java/org/apache/camel/builder/FluentProducerTemplateTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/builder/FluentProducerTemplateTest.java
@@ -429,6 +429,15 @@ public class FluentProducerTemplateTest extends ContextTestSupport {
         assertMockEndpointsSatisfied();
     }
 
+    @Test
+    public void testPerformance() throws Exception {
+        FluentProducerTemplate fluent = context.createFluentProducerTemplate();
+        for (int i = 0; i < 1000; i++) {
+            Object result = fluent.withBody("Camel").withHeader("foo", "" + i).to("direct:echo").request();
+            assertEquals("CamelCamel" + i, result);
+        }
+    }
+
     @Override
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {