You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2018/07/05 02:01:26 UTC

[04/13] james-project git commit: JAMES-2448 Don't use Camel exchanges properties

JAMES-2448 Don't use Camel exchanges properties

It comes with a performance penalty and actually makes code reading harder


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/32d59cc3
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/32d59cc3
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/32d59cc3

Branch: refs/heads/master
Commit: 32d59cc34afb7408d3f131d532193be571d293e4
Parents: d261aef
Author: benwa <bt...@linagora.com>
Authored: Sun Jul 1 23:47:06 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Thu Jul 5 08:56:22 2018 +0700

----------------------------------------------------------------------
 .../impl/camel/CamelMailetProcessor.java        | 29 ++++---------
 .../impl/camel/MatcherSplitter.java             | 43 ++++++++------------
 2 files changed, 26 insertions(+), 46 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/32d59cc3/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/camel/CamelMailetProcessor.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/camel/CamelMailetProcessor.java b/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/camel/CamelMailetProcessor.java
index b4808c8..2410374 100644
--- a/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/camel/CamelMailetProcessor.java
+++ b/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/camel/CamelMailetProcessor.java
@@ -133,18 +133,16 @@ public class CamelMailetProcessor extends AbstractStateMailetProcessor implement
         }
 
         @Override
-        public void configure() throws Exception {
+        public void configure() {
             Processor disposeProcessor = new DisposeProcessor();
-            Processor removePropsProcessor = new RemovePropertiesProcessor();
             Processor completeProcessor = new CompleteProcessor();
             Processor stateChangedProcessor = new StateChangedProcessor();
 
             String state = getState();
 
-            RouteDefinition processorDef = from(getEndpoint()).routeId(state).setExchangePattern(ExchangePattern.InOnly)
-                    // store the logger in properties
-                    .setProperty(MatcherSplitter.LOGGER_PROPERTY, constant(LOGGER))
-                    .setProperty(MatcherSplitter.METRIC_FACTORY, constant(metricFactory));
+            RouteDefinition processorDef = from(getEndpoint())
+                .routeId(state)
+                .setExchangePattern(ExchangePattern.InOnly);
 
             for (MatcherMailetPair pair : pairs) {
                 Matcher matcher = pair.getMatcher();
@@ -155,14 +153,15 @@ public class CamelMailetProcessor extends AbstractStateMailetProcessor implement
 
                 CamelProcessor mailetProccessor = new CamelProcessor(metricFactory, mailet, CamelMailetProcessor.this);
                 // Store the matcher to use for splitter in properties
-                processorDef.setProperty(MatcherSplitter.MATCHER_PROPERTY, constant(matcher)).setProperty(MatcherSplitter.ON_MATCH_EXCEPTION_PROPERTY, constant(onMatchException)).setProperty(MatcherSplitter.MAILETCONTAINER_PROPERTY, constant(CamelMailetProcessor.this))
+                MatcherSplitter matcherSplitter = new MatcherSplitter(metricFactory, CamelMailetProcessor.this, matcher, onMatchException);
 
+                processorDef
                         // do splitting of the mail based on the stored matcher
-                        .split().method(MatcherSplitter.class).aggregationStrategy(aggr)
+                        .split().method(matcherSplitter).aggregationStrategy(aggr)
 
                         .choice().when(new MatcherMatch()).process(mailetProccessor).end()
 
-                        .choice().when(new MailStateEquals(Mail.GHOST)).process(disposeProcessor).stop().otherwise().process(removePropsProcessor).end()
+                        .choice().when(new MailStateEquals(Mail.GHOST)).process(disposeProcessor).stop().end()
 
                         .choice().when(new MailStateNotEquals(state)).process(stateChangedProcessor).process(completeProcessor).stop().end();
             }
@@ -186,19 +185,10 @@ public class CamelMailetProcessor extends AbstractStateMailetProcessor implement
 
         }
 
-        private final class RemovePropertiesProcessor implements Processor {
-
-            @Override
-            public void process(Exchange exchange) throws Exception {
-                exchange.removeProperty(MatcherSplitter.ON_MATCH_EXCEPTION_PROPERTY);
-                exchange.removeProperty(MatcherSplitter.MATCHER_PROPERTY);
-            }
-        }
-
         private final class CompleteProcessor implements Processor {
 
             @Override
-            public void process(Exchange ex) throws Exception {
+            public void process(Exchange ex) {
                 LOGGER.debug("End of mailetprocessor for state {} reached", getState());
                 ex.setProperty(Exchange.ROUTE_STOP, true);
             }
@@ -210,7 +200,6 @@ public class CamelMailetProcessor extends AbstractStateMailetProcessor implement
             public void process(Exchange arg0) throws Exception {
                 Mail mail = arg0.getIn().getBody(Mail.class);
                 toProcessor(mail);
-
             }
 
         }

http://git-wip-us.apache.org/repos/asf/james-project/blob/32d59cc3/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/camel/MatcherSplitter.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/camel/MatcherSplitter.java b/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/camel/MatcherSplitter.java
index 876ce6a..016a0c9 100644
--- a/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/camel/MatcherSplitter.java
+++ b/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/camel/MatcherSplitter.java
@@ -24,11 +24,11 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 import java.util.Locale;
+import java.util.Optional;
 
 import javax.mail.MessagingException;
 
 import org.apache.camel.Body;
-import org.apache.camel.ExchangeProperty;
 import org.apache.camel.Handler;
 import org.apache.camel.InOnly;
 import org.apache.james.core.MailAddress;
@@ -56,36 +56,32 @@ public class MatcherSplitter {
     /** Headername which is used to indicate that the matcher matched */
     public static final String MATCHER_MATCHED_ATTRIBUTE = "matched";
 
-    /** Headername under which the matcher is stored */
-    public static final String MATCHER_PROPERTY = "matcher";
-
-    public static final String ON_MATCH_EXCEPTION_PROPERTY = "onMatchException";
-
-    public static final String LOGGER_PROPERTY = "logger";
-
-    public static final String MAILETCONTAINER_PROPERTY = "container";
-
-    public static final String METRIC_FACTORY = "metricFactory";
+    private final MetricFactory metricFactory;
+    private final CamelMailetProcessor container;
+    private final Matcher matcher;
+    private final String onMatchException;
+
+    public MatcherSplitter(MetricFactory metricFactory, CamelMailetProcessor container, Matcher matcher, String onMatchException) {
+        this.metricFactory = metricFactory;
+        this.container = container;
+        this.matcher = matcher;
+        this.onMatchException = Optional.ofNullable(onMatchException)
+            .map(s -> s.trim().toLowerCase(Locale.US))
+            .orElse(Mail.ERROR);
+    }
 
     /**
      * Generate a List of MailMessage instances for the give @Body. This is done
      * by using the given Matcher to see if we need more then one instance of
      * the MailMessage
-     * 
-     * @param matcher
-     *            Matcher to use for splitting
+     *
      * @param mail
      *            Mail which is stored in the @Body of the MailMessage
      * @return mailMessageList
      * @throws MessagingException
      */
     @Handler
-    public List<Mail> split(@ExchangeProperty(MATCHER_PROPERTY) Matcher matcher,
-                            @ExchangeProperty(ON_MATCH_EXCEPTION_PROPERTY) String onMatchException,
-                            @ExchangeProperty(LOGGER_PROPERTY) Logger logger,
-                            @ExchangeProperty(MAILETCONTAINER_PROPERTY) CamelMailetProcessor container,
-                            @ExchangeProperty(METRIC_FACTORY) MetricFactory metricFactory,
-                            @Body Mail mail) throws MessagingException {
+    public List<Mail> split(@Body Mail mail) throws MessagingException {
         Collection<MailAddress> matchedRcpts = null;
         Collection<MailAddress> origRcpts = new ArrayList<>(mail.getRecipients());
         long start = System.currentTimeMillis();
@@ -122,11 +118,6 @@ public class MatcherSplitter {
 
             } catch (Exception me) {
                 ex = me;
-                if (onMatchException == null) {
-                    onMatchException = Mail.ERROR;
-                } else {
-                    onMatchException = onMatchException.trim().toLowerCase(Locale.US);
-                }
                 if (onMatchException.equalsIgnoreCase("nomatch")) {
                     // In case the matcher returned null, create an empty
                     // Collection
@@ -137,7 +128,7 @@ public class MatcherSplitter {
                     matchedRcpts = mail.getRecipients();
                     // no need to verify addresses
                 } else {
-                    ProcessorUtil.handleException(me, mail, matcher.getMatcherConfig().getMatcherName(), onMatchException, logger);
+                    ProcessorUtil.handleException(me, mail, matcher.getMatcherConfig().getMatcherName(), onMatchException, LOGGER);
                 }
             }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org