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 no...@apache.org on 2010/09/20 12:57:06 UTC
svn commit: r998884 - in
/james/server/trunk/spoolmanager/src/main/java/org/apache/james/transport/camel:
CamelMailProcessorList.java DisposeProcessor.java
Author: norman
Date: Mon Sep 20 10:57:06 2010
New Revision: 998884
URL: http://svn.apache.org/viewvc?rev=998884&view=rev
Log:
Make Camel route building more readable
Modified:
james/server/trunk/spoolmanager/src/main/java/org/apache/james/transport/camel/CamelMailProcessorList.java
james/server/trunk/spoolmanager/src/main/java/org/apache/james/transport/camel/DisposeProcessor.java
Modified: james/server/trunk/spoolmanager/src/main/java/org/apache/james/transport/camel/CamelMailProcessorList.java
URL: http://svn.apache.org/viewvc/james/server/trunk/spoolmanager/src/main/java/org/apache/james/transport/camel/CamelMailProcessorList.java?rev=998884&r1=998883&r2=998884&view=diff
==============================================================================
--- james/server/trunk/spoolmanager/src/main/java/org/apache/james/transport/camel/CamelMailProcessorList.java (original)
+++ james/server/trunk/spoolmanager/src/main/java/org/apache/james/transport/camel/CamelMailProcessorList.java Mon Sep 20 10:57:06 2010
@@ -34,7 +34,7 @@ import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.model.ChoiceDefinition;
+import org.apache.camel.model.RouteDefinition;
import org.apache.camel.processor.aggregate.UseLatestAggregationStrategy;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.HierarchicalConfiguration;
@@ -73,7 +73,7 @@ public class CamelMailProcessorList exte
private final Map<String,List<Matcher>> matchers = new HashMap<String,List<Matcher>>();
private final List<String> processors = new ArrayList<String>();
-
+ private final UseLatestAggregationStrategy aggr = new UseLatestAggregationStrategy();
@Resource(name = "matcherpackages")
public void setMatcherLoader(MatcherLoader matcherLoader) {
@@ -85,7 +85,6 @@ public class CamelMailProcessorList exte
this.mailetLoader = mailetLoader;
}
- private final UseLatestAggregationStrategy aggr = new UseLatestAggregationStrategy();
private ProducerTemplate producerTemplate;
/*
* (non-Javadoc)
@@ -97,6 +96,7 @@ public class CamelMailProcessorList exte
Processor terminatingMailetProcessor = new MailetProcessor(new TerminatingMailet(), logger);
Processor disposeProcessor = new DisposeProcessor();
Processor mailProcessor = new MailCamelProcessor();
+ Processor removePropsProcessor = new RemovePropertiesProcessor();
List<HierarchicalConfiguration> processorConfs = config.configurationsAt("processor");
for (int i = 0; i < processorConfs.size(); i++) {
@@ -108,17 +108,10 @@ public class CamelMailProcessorList exte
mailets.put(processorName, new ArrayList<Mailet>());
matchers.put(processorName, new ArrayList<Matcher>());
- // Check which route we need to go
- ChoiceDefinition processorDef = from(getEndpoint(processorName))
-
- // exchange mode is inOnly
- .inOnly()
-
- // use transaction
- .transacted()
+ RouteDefinition processorDef = from(getEndpoint(processorName)).inOnly()
+ // store the logger in properties
+ .setProperty(MatcherSplitter.LOGGER_PROPERTY, constant(logger));
- // check that body is not null, just to be sure...
- .choice().when(body().isNotNull());
final List<HierarchicalConfiguration> mailetConfs = processorConf.configurationsAt("mailet");
// Loop through the mailet configuration, load
@@ -196,56 +189,17 @@ public class CamelMailProcessorList exte
}
// Store the matcher to use for splitter in properties
- processorDef.setProperty(MatcherSplitter.MATCHER_PROPERTY, constant(matcher))
-
- // store the config in properties
- .setProperty(MatcherSplitter.ON_MATCH_EXCEPTION_PROPERTY, constant(onMatchException))
+ processorDef
+ .setProperty(MatcherSplitter.MATCHER_PROPERTY, constant(matcher)).setProperty(MatcherSplitter.ON_MATCH_EXCEPTION_PROPERTY, constant(onMatchException))
- // store the logger in properties
- .setProperty(MatcherSplitter.LOGGER_PROPERTY, constant(logger))
-
// do splitting of the mail based on the stored matcher
- .split().method(MatcherSplitter.class)
-
- // set the aggregationStrategy. This is needed because the default has
- // change.
- // See:
- // https://issues.apache.org/jira/browse/JAMES-1013
- // http://camel.apache.org/camel-230-release.html
- .aggregationStrategy(aggr)
-
- // speed up things by processing in parallel
- .parallelProcessing()
- // start first choice
- .choice()
-
- // check if we need to execute the mailet. If so execute it and remove the header on the end
- .when(new MatcherMatch()).process(new MailetProcessor(mailet, logger))
-
-
- // end second choice
- .end()
-
- .choice()
-
- // if the mailstate is GHOST whe should just dispose and stop here.
- .when(new MailStateEquals(Mail.GHOST)).process(disposeProcessor).stop()
-
- // check if the state of the mail is the same as the
- // current processor.
- .when(new MailStateNotEquals(processorName)).process(mailProcessor).stop()
-
- // end first choice
- .end()
+ .split().method(MatcherSplitter.class).aggregationStrategy(aggr).parallelProcessing()
+
+ .choice().when(new MatcherMatch()).process(new MailetProcessor(mailet, logger)).end()
- // remove matcher from properties
- .removeProperty(MatcherSplitter.MATCHER_PROPERTY)
+ .choice().when(new MailStateEquals(Mail.GHOST)).process(disposeProcessor).stop().otherwise().process(removePropsProcessor).end()
- // remove config from properties
- .removeProperty(MatcherSplitter.ON_MATCH_EXCEPTION_PROPERTY)
-
- // remove logger from properties
- .removeProperty(MatcherSplitter.LOGGER_PROPERTY);
+ .choice().when(new MailStateNotEquals(processorName)).process(mailProcessor).stop().end();
// store mailet and matcher
mailets.get(processorName).add(mailet);
@@ -258,16 +212,17 @@ public class CamelMailProcessorList exte
processorDef
// start choice
.choice()
-
+
// when the mail state did not change till yet ( the end of the route) we need to call the TerminatingMailet to
// make sure we don't fall into a endless loop
- .when(new MailStateEquals(processorName)).process(terminatingMailetProcessor)
+ .when(new MailStateEquals(processorName)).process(terminatingMailetProcessor).stop()
- // end the choice
- .end()
+
+ // dispose when needed
+ .when(new MailStateEquals(Mail.GHOST)).process(disposeProcessor).stop()
// route it to the next processor
- .process(mailProcessor);
+ .otherwise().process(mailProcessor).stop();
}
@@ -428,6 +383,15 @@ public class CamelMailProcessorList exte
}
+ private final class RemovePropertiesProcessor implements Processor {
+
+ public void process(Exchange exchange) throws Exception {
+ exchange.removeProperty(MatcherSplitter.ON_MATCH_EXCEPTION_PROPERTY);
+ exchange.removeProperty(MatcherSplitter.MATCHER_PROPERTY);
+ }
+ }
+
+
/*
*
*/
Modified: james/server/trunk/spoolmanager/src/main/java/org/apache/james/transport/camel/DisposeProcessor.java
URL: http://svn.apache.org/viewvc/james/server/trunk/spoolmanager/src/main/java/org/apache/james/transport/camel/DisposeProcessor.java?rev=998884&r1=998883&r2=998884&view=diff
==============================================================================
--- james/server/trunk/spoolmanager/src/main/java/org/apache/james/transport/camel/DisposeProcessor.java (original)
+++ james/server/trunk/spoolmanager/src/main/java/org/apache/james/transport/camel/DisposeProcessor.java Mon Sep 20 10:57:06 2010
@@ -39,6 +39,9 @@ public class DisposeProcessor implements
Mail mail = arg0.getIn().getBody(Mail.class);
LifecycleUtil.dispose(mail.getMessage());
LifecycleUtil.dispose(mail);
+
+ // stop routing
+ arg0.setProperty(Exchange.ROUTE_STOP, true);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org