In my opinion, we should fail fast. Without a custom aggregation strategy, 
who's logic is application dependent and should have all the necessary 
information, there is not much you can do.

For me 2) ignore the exceptions is not a good idea
1) is a better option, although a bit tricky, because the 2nd exception may be 
a consequence of the first and environment/context dependent.

The best solution for me is to implement the custom aggregation strategy (as 
clumsy as it is), or add validation before the split, if such a scenario is 
likely. We cannot really compensate for low quality of input data, and imho the 
way it's implemented now is just fine.

My $0.02,
Hadrian


On Jan 6, 2011, at 8:57 AM, Claus Ibsen wrote:

> Hi
> 
> Give a scenario you use a splitter EIP to process sub messages.
> 
> from X
>  split body
>     process step 1
>     process step 2
>  end
>  to Y
> 
> process step 1 and 2 is part of the sub processing of the sub messages.
> For example if the current message contains A,B,C,D,E and we split by
> comma. We will get 5 sub messages.
> 
> Now suppose that this happens
> A = ok
> B = ok
> C = throws IOException
> D = ok
> E = throws UnknownOrderException
> 
> That leaves us with several scenarios.
> 
> Mind that all this can always be handled and 100% controlled by end
> user if you use your custom AggregationStrategy.
> In here you can control if exceptions should be ignored and whatnot.
> 
> But that is a bit clumsy to use as you need to code Java code. So we
> are talking about options and default values on the Splitter EIP.
> 
> Currently what happens today, is that the exception from C is
> propagated, which means that after the splitter EIP is finished.
> the IOException will be set on the current message (the input for the
> splitter), which again causes Camel to detect the exception
> and break out continue processing. Which means the message will not be
> send to Y.
> 
> 
> What we could do
> 1) Improve this so the splitter collects all the exceptions, so there
> is some BatchExecutionException which contains both IOException and
> UnknownOrderException.
> 2) Add new option to ignore those exceptions all together, so Camel
> will continue processing and send the message to Y.
> 
> 
> Mind that this scenario in fact also applies for some of the other EIP
> patterns such as
> - multicast
> - recipient list
> 
> 
> Also how far should we go to keep backwards compatibility?
> 
> 
> PS: In this example we could enable the stopOnException option which
> would cause the splitter to stop asap it detects an exception. Which
> means that it would only do
> A = ok
> B = ok
> C = throws IOException
> 
> 
> 
> 
> -- 
> Claus Ibsen
> -----------------
> FuseSource
> Email: cib...@fusesource.com
> Web: http://fusesource.com
> Twitter: davsclaus
> Blog: http://davsclaus.blogspot.com/
> Author of Camel in Action: http://www.manning.com/ibsen/

Reply via email to