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 54809d7  CAMEL-16462: camel-core - Optimize RecipientList EIP for 
default delimiter usage
54809d7 is described below

commit 54809d740ed4982683225a5db56c4e13b24448f9
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Wed Apr 7 07:22:20 2021 +0200

    CAMEL-16462: camel-core - Optimize RecipientList EIP for default delimiter 
usage
---
 .../apache/camel/processor/MulticastProcessor.java |  4 ++--
 .../org/apache/camel/processor/RecipientList.java  | 24 ++++++++++++++++------
 .../camel/processor/RecipientListProcessor.java    |  2 +-
 3 files changed, 21 insertions(+), 9 deletions(-)

diff --git 
a/core/camel-core-processor/src/main/java/org/apache/camel/processor/MulticastProcessor.java
 
b/core/camel-core-processor/src/main/java/org/apache/camel/processor/MulticastProcessor.java
index d9390cc..6f35e5f 100644
--- 
a/core/camel-core-processor/src/main/java/org/apache/camel/processor/MulticastProcessor.java
+++ 
b/core/camel-core-processor/src/main/java/org/apache/camel/processor/MulticastProcessor.java
@@ -229,8 +229,8 @@ public class MulticastProcessor extends 
AsyncProcessorSupport
         this.shareUnitOfWork = shareUnitOfWork;
         this.parallelAggregate = parallelAggregate;
         this.stopOnAggregateException = stopOnAggregateException;
-        if (this instanceof Splitter) {
-            // not supported for splitter
+        if (this instanceof Splitter || this instanceof 
RecipientListProcessor) {
+            // not supported for splitter/recipient-list
             this.processorExchangeFactory = null;
         } else {
             this.processorExchangeFactory = 
camelContext.adapt(ExtendedCamelContext.class)
diff --git 
a/core/camel-core-processor/src/main/java/org/apache/camel/processor/RecipientList.java
 
b/core/camel-core-processor/src/main/java/org/apache/camel/processor/RecipientList.java
index b5713e2..c45167a 100644
--- 
a/core/camel-core-processor/src/main/java/org/apache/camel/processor/RecipientList.java
+++ 
b/core/camel-core-processor/src/main/java/org/apache/camel/processor/RecipientList.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.processor;
 
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.concurrent.ExecutorService;
@@ -190,12 +191,23 @@ public class RecipientList extends AsyncProcessorSupport 
implements IdAware, Rou
      * Sends the given exchange to the recipient list
      */
     public boolean sendToRecipientList(Exchange exchange, Object 
recipientList, AsyncCallback callback) {
-        Iterator<?> iter;
-
-        if (delimiter != null && 
delimiter.equalsIgnoreCase(IGNORE_DELIMITER_MARKER)) {
-            iter = ObjectHelper.createIterator(recipientList, null);
-        } else {
-            iter = ObjectHelper.createIterator(recipientList, delimiter);
+        Iterator<?> iter = null;
+
+        if (recipientList instanceof String && delimiter != null && 
!delimiter.equalsIgnoreCase(IGNORE_DELIMITER_MARKER)) {
+            // optimize for fast iterator
+            String str = (String) recipientList;
+            if (delimiter.length() == 1) {
+                int count = StringHelper.countChar(str, delimiter.charAt(0)) + 
1;
+                String[] parts = StringHelper.splitOnCharacter(str, delimiter, 
count);
+                iter = Arrays.asList((Object[]) parts).iterator();
+            }
+        }
+        if (iter == null) {
+            if (delimiter != null && 
delimiter.equalsIgnoreCase(IGNORE_DELIMITER_MARKER)) {
+                iter = ObjectHelper.createIterator(recipientList, null);
+            } else {
+                iter = ObjectHelper.createIterator(recipientList, delimiter);
+            }
         }
 
         RecipientListProcessor rlp = new RecipientListProcessor(
diff --git 
a/core/camel-core-processor/src/main/java/org/apache/camel/processor/RecipientListProcessor.java
 
b/core/camel-core-processor/src/main/java/org/apache/camel/processor/RecipientListProcessor.java
index 4d9f76f..e1dacf3 100644
--- 
a/core/camel-core-processor/src/main/java/org/apache/camel/processor/RecipientListProcessor.java
+++ 
b/core/camel-core-processor/src/main/java/org/apache/camel/processor/RecipientListProcessor.java
@@ -241,7 +241,7 @@ public class RecipientListProcessor extends 
MulticastProcessor {
             int index, Endpoint endpoint, Producer producer,
             Exchange exchange, ExchangePattern pattern, boolean 
prototypeEndpoint) {
         // copy exchange, and do not share the unit of work
-        Exchange copy = 
processorExchangeFactory.createCorrelatedCopy(exchange, false);
+        Exchange copy = ExchangeHelper.createCorrelatedCopy(exchange, false);
 
         // if we share unit of work, we need to prepare the child exchange
         if (isShareUnitOfWork()) {

Reply via email to