camel-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Michael Chen (JIRA)" <>
Subject [jira] Commented: (CAMEL-1366) EndpointMessageListener should respect ExchangePattern
Date Wed, 25 Feb 2009 17:32:00 GMT


Michael Chen commented on CAMEL-1366:

exchange.isOutCapable() is always true downstream due to the logic in method EndpointMessageListener.createExchange().
 That method forces the MEP to be InOut if JMSReplyTo is present in the original request.

If your reason for forcing a reply is to honor the JMS spec, I can't argue otherwise. Please
close this bug.

However, I believe the camel.component.jms implementation should offer the option of not replying
the original request and give that job to other components or processors downstream.  This
does not break the JMS spec, but just a matter of which Camel component is replying.

> EndpointMessageListener should respect ExchangePattern
> ------------------------------------------------------
>                 Key: CAMEL-1366
>                 URL:
>             Project: Apache Camel
>          Issue Type: Bug
>          Components: camel-jms
>    Affects Versions: 1.6.0
>         Environment: ActiveMQ/Camel
>            Reporter: Michael Chen
> In all current releases, org.apache.camel.component.jms.EndpointMessageListener.onMessage()
has the following logic (line 90 in 1.6.0 code):
> {code}
> // send the reply
> if (rce == null && body != null && !disableReplyTo) {
>     sendReply(replyDestination, message, exchange, body);
> }
> {code}
> This logic should also respect ExchangePattern of the exchange, so I propose a change
> {code}
> // send the reply
> if (rce == null && body != null && exchange.isOutCapable()) {
>     sendReply(replyDestination, message, exchange, body);
> }
> {code}
> This change allows a processing pattern where the route may change the ExchangePattern
using methods like RouteBuilder.inOnly() to switch the MEP at will so that the reply is send
at a later time (true asynchronous exchange).  This processing pattern is particularly useful
for integrating long running services. For example,
> {code}
> // Java DSL
> from("activemq:my_queue?exchangePattern=InOnly").to("predict_weather://?reply_later=true");
> // or
> from("activemq:my_queue2").inOnly().to("predict_weather://?reply_later=true");
> {code}
> The flaw of the current logic makes it impossible to do true asynchronous exchange, because
1) it does not respect the ExchangePattern; 2) if property "disableReplyTo" is used, the "org.apache.camel.jms.replyDestination"
property will not be set (see method createExchange in the same file), thus downstream cannot
find the reply destination.
> The proposed change can also deprecate the disableReplyTo property and put the MEP concept
into good use.

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

View raw message