Hi,

I'm working with a little proof of concept because I'm having trouble
managing exceptions in splitter when I combine stopOnException and the usage
of a threadPoolExecutor.

I have been working with documentation, and Camel In Action book and source
examples but I'm not able to solve this.

My route is this one:

//Error handling
onException(Throwable.class)
        .to(URI_STOP_WHEN_EXCEPTION);

from(URI_START_PROCESSING)

.split(body()).aggregationStrategy(myAggregationStrategy).executorService(threadPoolExecutor).stopOnException()
                .process(new Processor() {
                        @Override
                        public void process(Exchange exchange) throws Exception 
{
                                if( 
(":)".equals(exchange.getIn().getBody(String.class)))  ||  ("world
".equals(exchange.getIn().getBody(String.class))) ){
                                        throw new RuntimeCamelException();
                                }
                        }
                })
        .end()
                .to(URI_STOP_WITHOUT_EXCEPTION);


What I expected to happen is that, when an error occurs in the splitter,
only one (and no more) messages arrive to URI_STOP_WHEN_EXCEPTION.

If I send a body like: 
List<String> body = Arrays.asList("Hello ", "world ", ":)");

The result of this is that "world " and  ":)" arrive to
URI_STOP_WHEN_EXCEPTION (these are the bodies that the processor inside the
splitter will use to throw an exception).

If I don´t use a threadPoolExecutor only one error happens in the same
instant, so I have the expected behaviour, but using the threadPoolExecutor
(size 10) happens what I explained.

At this point I thought that maybe using the aggregationStrategy to
propagate back the exception was a good alternative. I removed the
stopOnException() and used the "MyPropagateFailureAggregationStrategy" that
appears in the book of Camel In Action (page 265, I don´t know if I'm
allowed to paste the source code). So my route now looks like:

//Error handling
onException(Throwable.class)
        .to(URI_STOP_WHEN_EXCEPTION);

from(URI_START_PROCESSING)

.split(body()).aggregationStrategy(myPropagateFailureAggregationStrategy).executorService(threadPoolExecutor)
                .process(new Processor() {
                        @Override
                        public void process(Exchange exchange) throws Exception 
{
                                if( 
(":)".equals(exchange.getIn().getBody(String.class)))  ||  ("world
".equals(exchange.getIn().getBody(String.class))) ){
                                        throw new RuntimeCamelException();
                                }
                        }
                })
        .end()
                .to(URI_STOP_WITHOUT_EXCEPTION);


Nevertheless the result is the same in this case ... I don´t know if the
paralellism could be a problem, I suppose that I'm missing something
important

I'm working with Camel 2.10.4

Thanks in advance for your time.

  Aida.



--
View this message in context: 
http://camel.465427.n5.nabble.com/Splitter-Problem-with-stopOnException-when-using-threadPoolExecutor-tp5737562.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Reply via email to