camel-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Claus Ibsen <claus.ib...@gmail.com>
Subject Re: Camel 2.0 Async Findings - Roadmap to a solution
Date Thu, 30 Apr 2009 12:03:36 GMT
Hi

Just another update on #3. I had some more fun with Camel and
introduced a async() DSL in the route, to turn the route into async
from the point forward.
The unit test code explains it, and gives a hint how we can leverage this.

Any thoughts?



public class AsyncRouteTest extends ContextTestSupport {

    public void testAsyncRoute() throws Exception {
        MockEndpoint mock = getMockEndpoint("mock:result");
        mock.expectedBodiesReceived("Bye World");

        // send a request reply to the direct start endpoint
        Object out = template.requestBody("direct:start", "Hello");
        // as it turns into a async route later we get a Future as response
        assertIsInstanceOf(Future.class, out);

        // cast to future
        Future future = (Future) out;

        System.out.println("Look ma I can do other stuff while the async runs");

        // and use future to get the response
        Exchange response = (Exchange) future.get();

        // get the response from the OUT message
        // TODO: add type converters so we can leverage them with
Future to get the
        // body response more easily
        assertEquals("Bye World", response.getOut().getBody());

        assertMockEndpointsSatisfied();
    }

    @Override
    protected RouteBuilder createRouteBuilder() throws Exception {
        return new RouteBuilder() {
            @Override
            public void configure() throws Exception {
                // we start this route async
                from("direct:start")
                    // we play a bit with the message
                    .transform(body().append(" World"))
                    // now turn the route into async from this point forward
                    // the caller will have a Future<Exchange>
returned as response in OUT
                    // to be used to grap the async response when he
fell like it
                    .async()
                    // from this point forward this is the async route
doing its work
                    // so we do a bit of delay to simulate heavy work
that takes time
                    .delay(1000)
                    // and we also play with the message so we can
prepare a response
                    .process(new Processor() {
                        public void process(Exchange exchange) throws
Exception {
                            assertEquals("Hello World",
exchange.getIn().getBody());
                            exchange.getOut().setBody("Bye World");
                        }
                    // and we use mocks for unit testing
                    }).to("mock:result");
            }
        };
    }



-- 
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

Mime
View raw message