Quantcast
Channel: Apache Timeline
Viewing all articles
Browse latest Browse all 5648

Recipient List Help -- Routes defined with Java DSL vs Spring XML

$
0
0
I'm trying to flesh out a prototype based on the Recipient List EIP. I've
got a number of routes that I want to be able to configure on the fly based
on various parameters stored in a database. My rough design is to store
<endpoint:uri> pairs in an in-memory map. This mapping will be kept in sync
as the database values change.

For my prototype, I'm attempting to set up a basic service that loads up a
couple of logging endpoints using the Java DSL. The Routebuilder is used to
generate the routes initially using the recipientList().method() notation
where the method contains a bean call to a method that accesses the
in-memory mapping based on the 'from endpoint'
(exchange.getFromEndpoint().getEndpointUri()).

The service is instantiated with a unit test suite and I've confirmed that
things get setup correct. I'm able to generate the logging routes via the
DSL and send a message to them directly as part of the unit test. Check.
However, I've run into trouble when I attempt to create a route that
subsequently calls to a logging route which was generated with the Java DSL.
(Through various combinations/trial and error, I've confirmed that when I
statically define the logging routes with Spring XML rather than Java DSL I
have no issue.)

Is there a difference in how routes are accessed depending on the method
used to define them (Java DSL vs Spring XML)?

Below is the behavior I see when using only the Java DSL which fails:

<route setup logging output -- everything looks ok>

014-07-14 14:15:47,383 DEBUG DirectProducer - Starting producer:
Producer[direct://route1]
2014-07-14 14:15:47,384 DEBUG ProducerCache - Adding to producer cache with
key: Endpoint[direct://route1] for producer: Producer[direct://route1]
2014-07-14 14:15:47,386 DEBUG ProducerCache - >>>> Endpoint[direct://route1]
Exchange[Message: test message 1]
2014-07-14 14:15:47,431 DEBUG ProtoService -
ProtoService.TestBean.testMethod
2014-07-14 14:15:47,432 DEBUG ProtoService - ...endpoint
value=direct:route1, target=direct:consumer1
2014-07-14 14:15:47,433 DEBUG BeanProcessor - Setting bean invocation result
on the OUT message: direct:consumer1
2014-07-14 14:15:47,438 DEBUG DirectProducer - Starting producer:
Producer[direct://consumer1]
2014-07-14 14:15:47,439 DEBUG ProducerCache - Adding to producer cache with
key: Endpoint[direct://consumer1] for producer: Producer[direct://consumer1]
2014-07-14 14:15:47,443 DEBUG DefaultErrorHandler - Redelivery enabled:
false on error handler: DefaultErrorHandler[Producer[direct://consumer1]]
2014-07-14 14:15:47,446 DEBUG ProtoService -
ProtoService.TestBean.testMethod
2014-07-14 14:15:47,448 DEBUG ProtoService - ...endpoint
value=direct:route1, target=direct:consumer1
2014-07-14 14:15:47,449 DEBUG BeanProcessor - Setting bean invocation result
on the OUT message: direct:consumer1
2014-07-14 14:15:47,450 DEBUG DirectProducer - Starting producer:
Producer[direct://consumer1]
2014-07-14 14:15:47,502 DEBUG ProducerCache - Adding to producer cache with
key: Endpoint[direct://consumer1] for producer: Producer[direct://consumer1]
2014-07-14 14:15:47,503 DEBUG DefaultErrorHandler - Redelivery enabled:
false on error handler: DefaultErrorHandler[Producer[direct://consumer1]]

<this continues looping like this for about 700 lines>

2014-07-14 14:15:50,625 DEBUG MulticastProcessor - Message exchange has
failed: Sequential processing failed for number 0 for exchange:
Exchange[Message: test message 1] Exception:
org.apache.camel.CamelExecutionException: Exception occurred during
execution on the exchange: Exchange[Message: test message 1]
2014-07-14 14:15:50,626 DEBUG MulticastProcessor - Done sequential
processing 1 exchanges
2014-07-14 14:15:50,628 DEBUG MulticastProcessor - Message exchange has
failed: Sequential processing failed for number 0 for exchange:
Exchange[Message: test message 1] Exception:
org.apache.camel.CamelExecutionException: Exception occurred during
execution on the exchange: Exchange[Message: test message 1]
2014-07-14 14:15:50,629 DEBUG MulticastProcessor - Done sequential
processing 1 exchanges
2014-07-14 14:15:50,630 DEBUG MulticastProcessor - Message exchange has
failed: Sequential processing failed for number 0 for exchange:
Exchange[Message: test message 1] Exception:
org.apache.camel.CamelExecutionException: Exception occurred during
execution on the exchange: Exchange[Message: test message 1]
2014-07-14 14:15:50,631 DEBUG MulticastProcessor - Done sequential
processing 1 exchanges
2014-07-14 14:15:50,632 DEBUG MulticastProcessor - Message exchange has
failed: Sequential processing failed for number 0 for exchange:
Exchange[Message: test message 1] Exception:
org.apache.camel.CamelExecutionException: Exception occurred during
execution on the exchange: Exchange[Message: test message 1]
2014-07-14 14:15:50,633 DEBUG MulticastProcessor - Done sequential
processing 1 exchanges
2014-07-14 14:15:50,634 DEBUG MulticastProcessor - Message exchange has
failed: Sequential processing failed for number 0 for exchange:
Exchange[Message: test message 1] Exception:
org.apache.camel.CamelExecutionException: Exception occurred during
execution on the exchange: Exchange[Message: test message 1]
2014-07-14 14:15:50,634 DEBUG MulticastProcessor - Done sequential
processing 1 exchanges

<also continues looping for the same number of attempts>

Ultimately, the exchange returns with isFailure() returning true and my test
exits in a failure.

Can anyone point out what might be going on here?

Thanks.

Viewing all articles
Browse latest Browse all 5648

Trending Articles