camel-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Martin Krasser (JIRA)" <j...@apache.org>
Subject [jira] Commented: (CAMEL-2935) Broken failure reporting via DefaultProucerTemplate.asyncCallback and Synchronization.onFailure
Date Sat, 10 Jul 2010 13:11:51 GMT

    [ https://issues.apache.org/activemq/browse/CAMEL-2935?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=60577#action_60577
] 

Martin Krasser commented on CAMEL-2935:
---------------------------------------

Great, thanks!

> Broken failure reporting via DefaultProucerTemplate.asyncCallback and Synchronization.onFailure
> -----------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-2935
>                 URL: https://issues.apache.org/activemq/browse/CAMEL-2935
>             Project: Apache Camel
>          Issue Type: Bug
>          Components: camel-core
>    Affects Versions: 2.3.0
>            Reporter: Martin Krasser
>             Fix For: 2.4.0
>
>         Attachments: on-failure.patch
>
>
> The recent change in {{ProducerCache.send}}
> {code:java|title=ProducerCache.java}
>     public void send(Endpoint endpoint, Exchange exchange) {
>         try {
>             sendExchange(endpoint, null, null, exchange);
>             // RECENT CHANGE HERE:
>             // ensure that CamelExecutionException is always thrown
>             if (exchange.getException() != null) {
>                 exchange.setException(wrapCamelExecutionException(exchange, exchange.getException()));
>             }
>         } catch (Exception e) {
>             throw wrapCamelExecutionException(exchange, e);
>         }
>     }
> {code}
> that throws a {{CamelExecutionException}} if {{exchange.getException}} is not null, makes
it impossible for {{DefaultProducerTemplate.asyncCallback}} to report failures (other than
fault messages) asynchronously via {{Synchronization.onFailure}}
> {code:java|title=DefaultProducerTemplate.java}
>     public Future<Exchange> asyncCallback(final Endpoint endpoint, final Exchange
exchange, final Synchronization onCompletion) {
>         Callable<Exchange> task = new Callable<Exchange>() {
>             public Exchange call() throws Exception {
>                 // FIXME: exception is thrown in Camel 2.4 where a normal return with
answer.getException != null was done in Camel 2.3
>                 Exchange answer = send(endpoint, exchange);
>                 if (answer.isFailed()) {
>                     onCompletion.onFailure(answer);
>                 } else {
>                     // ...
>                 }
>                 return answer;
>             }
>         };
>         // ...
>     }
> {code}
> This was working in Camel 2.3 (but unfortunately there wasn't any test case for it).
I attached a patch for {{DefaultProducerTemplateAsyncTest}} that demonstrates the problem.
I didn't commit a fix yet because I'm unsure at the moment about the best way to fix that.
Of course I tried a naive fix in the DefaultProducerTemplate.asyncCallback methods which causes
the test (in the patch) to pass but I'd like to hear other opinions before I continue.

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


Mime
View raw message