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 2010/01/06 09:56:38 UTC
svn commit: r896355 - in /camel/trunk:
camel-core/src/test/java/org/apache/camel/processor/
camel-core/src/test/resources/
components/camel-spring/src/main/java/org/apache/camel/spring/
components/camel-spring/src/test/resources/ components/camel-sprin...
Author: davsclaus
Date: Wed Jan 6 08:56:25 2010
New Revision: 896355
URL: http://svn.apache.org/viewvc?rev=896355&view=rev
Log:
CAMEL-2336: Fixed issue with transacted and intercept when using Spring XML.
Modified:
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/OnCompletionAndInterceptAndOnExceptionGlobalTest.java
camel/trunk/camel-core/src/test/resources/log4j.properties
camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java
camel/trunk/components/camel-spring/src/test/resources/log4j.properties
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringOnCompletionAndInterceptAndOnExceptionGlobalTest.xml
Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/OnCompletionAndInterceptAndOnExceptionGlobalTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/OnCompletionAndInterceptAndOnExceptionGlobalTest.java?rev=896355&r1=896354&r2=896355&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/processor/OnCompletionAndInterceptAndOnExceptionGlobalTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/processor/OnCompletionAndInterceptAndOnExceptionGlobalTest.java Wed Jan 6 08:56:25 2010
@@ -66,13 +66,15 @@
return new RouteBuilder() {
@Override
public void configure() throws Exception {
+ //context.setTracing(true);
+
intercept().to("mock:intercept");
- // define a global on completion that is invoked when the exchage is complete
+ // define a global on completion that is invoked when the exchange is complete
onCompletion().to("log:global").to("mock:sync");
- // define an on excpetion
- onException(Exception.class).to("mock:exception");
+ // define an on exception
+ onException(Exception.class).to("mock:foo", "mock:bar", "mock:exception");
from("direct:start")
.process(new MyProcessor())
Modified: camel/trunk/camel-core/src/test/resources/log4j.properties
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/resources/log4j.properties?rev=896355&r1=896354&r2=896355&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/resources/log4j.properties (original)
+++ camel/trunk/camel-core/src/test/resources/log4j.properties Wed Jan 6 08:56:25 2010
@@ -23,6 +23,7 @@
log4j.logger.org.apache.activemq.spring=WARN
#log4j.logger.org.apache.camel=DEBUG
#log4j.logger.org.apache.camel.component=TRACE
+#log4j.logger.org.apache.camel.component.mock=DEBUG
#log4j.logger.org.apache.camel.component.file=TRACE
log4j.logger.org.apache.camel.impl.converter=WARN
log4j.logger.org.apache.camel.management=WARN
Modified: camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java?rev=896355&r1=896354&r2=896355&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java (original)
+++ camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java Wed Jan 6 08:56:25 2010
@@ -306,21 +306,33 @@
// using route builders. So we have here a little custom code to fix the JAXB gaps
for (RouteDefinition route : routes) {
- // move all abstracts into their own list so we can deal with them separately
+ // abstracts is the cross cutting concerns
List<ProcessorDefinition> abstracts = new ArrayList<ProcessorDefinition>();
- initAbstracts(route, abstracts);
+
+ // upper is the cross cutting concerns such as interceptors, error handlers etc
+ List<ProcessorDefinition> upper = new ArrayList<ProcessorDefinition>();
+
+ // lower is the regular route
+ List<ProcessorDefinition> lower = new ArrayList<ProcessorDefinition>();
+
+ prepareRouteForInit(route, abstracts, lower);
// toAsync should fix up itself at first
- initToAsync(route);
+ initToAsync(lower);
// interceptors should be first for the cross cutting concerns
- initInterceptors(route);
+ initInterceptors(route, upper);
// then on completion
- initOnCompletions(route, abstracts);
+ initOnCompletions(abstracts, upper);
// then polices
- initPolicies(route, abstracts);
+ initPolicies(abstracts, lower);
// then on exception
- initOnExceptions(route, abstracts);
+ initOnExceptions(abstracts, upper);
+
+ // rebuild route as upper + lower
+ route.clearOutput();
+ route.getOutputs().addAll(upper);
+ route.getOutputs().addAll(lower);
// configure parents
initParent(route);
@@ -340,6 +352,18 @@
installRoutes();
}
+ private void prepareRouteForInit(RouteDefinition route, List<ProcessorDefinition> abstracts,
+ List<ProcessorDefinition> lower) {
+ // filter the route into abstracts and lower
+ for (ProcessorDefinition output : route.getOutputs()) {
+ if (output.isAbstract()) {
+ abstracts.add(output);
+ } else {
+ lower.add(output);
+ }
+ }
+ }
+
private void initParent(RouteDefinition route) {
for (ProcessorDefinition output : route.getOutputs()) {
output.setParent(route);
@@ -362,11 +386,11 @@
}
}
- private void initToAsync(RouteDefinition route) {
+ private void initToAsync(List<ProcessorDefinition> lower) {
List<ProcessorDefinition> outputs = new ArrayList<ProcessorDefinition>();
ToDefinition toAsync = null;
- for (ProcessorDefinition output : route.getOutputs()) {
+ for (ProcessorDefinition output : lower) {
if (toAsync != null) {
// add this output on toAsync
toAsync.getOutputs().add(output);
@@ -385,11 +409,11 @@
}
// rebuild outputs
- route.clearOutput();
- route.getOutputs().addAll(outputs);
+ lower.clear();
+ lower.addAll(outputs);
}
- private void initOnExceptions(RouteDefinition route, List<ProcessorDefinition> abstracts) {
+ private void initOnExceptions(List<ProcessorDefinition> abstracts, List<ProcessorDefinition> upper) {
// add global on exceptions if any
if (onExceptions != null && !onExceptions.isEmpty()) {
@@ -401,36 +425,19 @@
if (output instanceof OnExceptionDefinition) {
// on exceptions must be added at top, so the route flow is correct as
// on exceptions should be the first outputs
- route.getOutputs().add(0, output);
- }
- }
- }
-
- private void initAbstracts(RouteDefinition route, List<ProcessorDefinition> abstracts) {
- List<ProcessorDefinition> retains = new ArrayList<ProcessorDefinition>();
-
- for (ProcessorDefinition output : route.getOutputs()) {
- if (output.isAbstract()) {
- abstracts.add(output);
- } else {
- retains.add(output);
+ upper.add(0, output);
}
}
-
- route.clearOutput();
- for (ProcessorDefinition retain : retains) {
- route.addOutput(retain);
- }
}
- private void initInterceptors(RouteDefinition route) {
+ private void initInterceptors(RouteDefinition route, List<ProcessorDefinition> upper) {
// configure intercept
for (InterceptDefinition intercept : getIntercepts()) {
intercept.afterPropertiesSet();
// add as first output so intercept is handled before the actual route and that gives
// us the needed head start to init and be able to intercept all the remaining processing steps
- route.getOutputs().add(0, intercept);
+ upper.add(0, intercept);
}
// configure intercept from
@@ -452,7 +459,7 @@
intercept.afterPropertiesSet();
// add as first output so intercept is handled before the actual route and that gives
// us the needed head start to init and be able to intercept all the remaining processing steps
- route.getOutputs().add(0, intercept);
+ upper.add(0, intercept);
}
}
@@ -461,12 +468,13 @@
intercept.afterPropertiesSet();
// add as first output so intercept is handled before the actual route and that gives
// us the needed head start to init and be able to intercept all the remaining processing steps
- route.getOutputs().add(0, intercept);
+ upper.add(0, intercept);
}
}
- private void initOnCompletions(RouteDefinition route, List<ProcessorDefinition> abstracts) {
+ private void initOnCompletions(List<ProcessorDefinition> abstracts, List<ProcessorDefinition> upper) {
+
List<OnCompletionDefinition> completions = new ArrayList<OnCompletionDefinition>();
// find the route scoped onCompletions
@@ -486,7 +494,9 @@
return;
}
- // add onCompletion *after* intercept, as its important intercept is first
+ upper.addAll(completions);
+
+/* // add onCompletion *after* intercept, as its important intercept is first
int index = 0;
for (int i = 0; i < route.getOutputs().size(); i++) {
index = i;
@@ -498,10 +508,11 @@
break;
}
}
- route.getOutputs().addAll(index, completions);
+ route.getOutputs().addAll(index, completions);*/
}
- private void initPolicies(RouteDefinition route, List<ProcessorDefinition> abstracts) {
+ private void initPolicies(List<ProcessorDefinition> abstracts, List<ProcessorDefinition> lower) {
+
// we need two types as transacted cannot extend policy due JAXB limitations
PolicyDefinition policy = null;
TransactedDefinition transacted = null;
@@ -517,16 +528,16 @@
if (policy != null) {
// the outputs should be moved to the policy
- policy.getOutputs().addAll(route.getOutputs());
+ policy.getOutputs().addAll(lower);
// and add it as the single output
- route.clearOutput();
- route.addOutput(policy);
+ lower.clear();
+ lower.add(policy);
} else if (transacted != null) {
// the outputs should be moved to the transacted policy
- transacted.getOutputs().addAll(route.getOutputs());
+ transacted.getOutputs().addAll(lower);
// and add it as the single output
- route.clearOutput();
- route.addOutput(transacted);
+ lower.clear();
+ lower.add(transacted);
}
}
Modified: camel/trunk/components/camel-spring/src/test/resources/log4j.properties
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/resources/log4j.properties?rev=896355&r1=896354&r2=896355&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/test/resources/log4j.properties (original)
+++ camel/trunk/components/camel-spring/src/test/resources/log4j.properties Wed Jan 6 08:56:25 2010
@@ -26,6 +26,7 @@
log4j.logger.org.apache.camel.impl.DefaultPackageScanClassResolver=WARN
#log4j.logger.org.apache.camel=DEBUG
+#log4j.logger.org.apache.camel.component.mock=DEBUG
#log4j.logger.org.apache.camel.spring.spi=DEBUG
# CONSOLE appender not used by default
Modified: camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringOnCompletionAndInterceptAndOnExceptionGlobalTest.xml
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringOnCompletionAndInterceptAndOnExceptionGlobalTest.xml?rev=896355&r1=896354&r2=896355&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringOnCompletionAndInterceptAndOnExceptionGlobalTest.xml (original)
+++ camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringOnCompletionAndInterceptAndOnExceptionGlobalTest.xml Wed Jan 6 08:56:25 2010
@@ -28,6 +28,8 @@
<onException>
<exception>java.lang.Exception</exception>
+ <to uri="mock:foo"/>
+ <to uri="mock:bar"/>
<to uri="mock:exception"/>
</onException>