Hi

I have created a ticket to track this
https://issues.apache.org/activemq/browse/CAMEL-1572

And I have attached a patch to address item #1, #2 and #4.

All unit tests passes (core, components, tests, etc.)


On Thu, Apr 30, 2009 at 7:32 AM, Claus Ibsen <claus.ib...@gmail.com> wrote:
> Hi
>
> You might remember my previous topic about the AsyncProcessor.
> http://www.nabble.com/-DISCUSS---Camel-2.0---Internal-API-reworkings----Channel-and--AsyncProcessor-td23210093.html
>
>
> I had some more time to thinker about it and I believe I have a
> roadmap for a solution that will work nicely for all.
>
> 1) Internal house cleaning in camel-core
> 2) Fix as much of the current broken AsyncCallback
> 3) Introduce new async API in Camel 2.0
> 4) Mark the current AsyncCallback as @deprecated in Camel 2.0m2
>
>
> Ad 1)
> The AsyncProcessing internally in Camel is overused and it just makes
> it much more complex. By doing a house cleaning the codebase is much
> easier to work with and it works as before.
> In fact it allows us to do fix the broken AsyncCallback also so we can
> get notification when the async exchange is done.
>
>
> Ad 2)
> The current notification in Camel is in fact broken. You never get the
> expected notification when the async exchange is done. The idea of
> this API was to get 2 notifications
> - the 1st is when the original synch thread is done (the boolean is
> true), eg when you submit the job.
> - and then the 2nd when the async thread is done (the boolean is
> false) but this is broken in Camel and you will not receive it.
>
> And of top of this there are 2 flaws in the current API
> - the current code requires that you manaully add seda steps in the
> route to turn the route from sync into async. There was no code that
> did this "under the covers for you". However its doable and the in
> fact its possible to route async. But an improve API would be better.
> - The result of the async operation is not possible to get easily. No
> you dont have access to the exchange that was done async. And no
> exchange.getOut() will not give the result. What was missing in the
> AsyncCallback API was to pass in the Exchange as well.
>
>
> Ad 3)
> I would like to introduce a new Async API that is more similar to the
> JDK Future API. So you can use the Future get() to get hold of the
> result.
> This still needs some thinking and experimenting to see how its
> doable. But an API that generally is like the Future would be much
> better.
>
> Ad 4)
> I would also suggest that we (in Camel 2.0m2) mark AsyncCallback as
> @deprecated with a note that we have planned a new Async API for Camel
> 2.0
>
>
> Conclusion
> ========
> I would like to go forward and get #1, (#2 and #4 would be great too)
> committed into the codebase so we have a codebase in Camel that is
> much easier to maintain and for new users to understand when they look
> into the internals in Camel. And especially debugging and stepping
> through the processing of Exchanges is much easier. As its just
> regular method calls. And we get rid of the confusing code with what
> to do in the AsyncCallbacks that was invading the internals in Camel.
>
>
> Then I would start experimenting with the new API and report findings.
> Feedback here is much welcome.
>
>
> Any thoughts?
>
>
> --
> Claus Ibsen
> Apache Camel Committer
>
> Open Source Integration: http://fusesource.com
> Blog: http://davsclaus.blogspot.com/
> Twitter: http://twitter.com/davsclaus
> Apache Camel Reference Card:
> http://refcardz.dzone.com/refcardz/enterprise-integration
>



-- 
Claus Ibsen
Apache Camel Committer

Open Source Integration: http://fusesource.com
Blog: http://davsclaus.blogspot.com/
Twitter: http://twitter.com/davsclaus
Apache Camel Reference Card:
http://refcardz.dzone.com/refcardz/enterprise-integration

Reply via email to