camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Claus Ibsen" ...@silverbullet.dk>
Subject RE: route definition: component response routing
Date Fri, 11 Jul 2008 05:26:58 GMT
Hi Vlad

We have a discussion on the dev forum about the exchange patterns in Camel and what we should
do about it for e.g. Camel 2.0.

I agree they are confusing and as I understand it they were introduced because of JBI and
CXF containers needed this meta information.

The exchange patterns isn't strictly checked/forced in Camel in its components and other parts
of the framework. So basically you can send an exchange with the pattern InOut to a component
that's InOnly (such as the SEDA).

As a rule of thumb if you use the ProducerTemplate to send exchanges to Camel then you can
use the requestXXX to force the InOut pattern and thus you get the response from the OUT message.
The others methods uses the default exchange pattern that usually is InOnly.

However all this is hopefully changing for the better in Camel 2.0. I personally would love
to simply this much more and only have two patterns:
- sync (InOut)
- async (InOnly)
And then a more strickt ruling in Camel to force this behavior.

Well we should discuss this on the dev forum. You are welcome to join.


In your example the Object response is the response from "bean:xxx", because Camel will just
invoke your bean and not the full route path.

To do this you should put another route type as the from to invoke the chain such as direct:start.

from("direct:start")
  .pipeline("bean:xxx", "bean:yyy", "direct:z", "direct:x", "bean:result")



Med venlig hilsen
 
Claus Ibsen
......................................
Silverbullet
Skovsgårdsvænget 21
8362 Hørning
Tlf. +45 2962 7576
Web: www.silverbullet.dk
-----Original Message-----
From: Vlad Olenin [mailto:volenin@gmail.com] 
Sent: 10. juli 2008 21:29
To: camel-user@activemq.apache.org
Subject: Re: route definition: component response routing

Yes, I actually meant smth like this. For example, for a more complex route:

from("bean:xxx")
  .pipeline("bean:yyy", "direct:z", "direct:x", "bean:result")

when I call it with

       Object response = template.requestBody("bean:xxx", "Hello");
       assertEquals("Hello World", response);

what is the preferred way to retrieve a response: from the "bean:result"
request object, or from the result of evaluation of the initial call? In
case of the various pipelines and routers chained together, would the
response be propogated back? In which cases it woudn't? I'm assuming if
there is a 'seda' component in the chain, the only option to get the result
would be from the 'bean:result' (the last component in the chain), correct?

In other words, how to define / know the channel type: 'in-only', 'in-out',
'in-optional out', etc...

Thanks,

Vlad


On Tue, Jul 8, 2008 at 6:57 AM, Claus Ibsen <ci@silverbullet.dk> wrote:

> Hi
>
> Vladim could you give an example? I read your question a bit differently
> than Charles.
>
> If you mean what Camel does if you have a route like this?
>
> from("xxx")
>
> And you send an exchange to "xxx". Then Camel will process the exchange and
> return a response to the client.
>
> Eg: as this unit test demonstrates:
>
>    public void testNoToType() throws Exception {
>        Object response = template.requestBody("direct:in", "Hello");
>        assertEquals("Hello World", response);
>    }
>
>    protected RouteBuilder createRouteBuilder() throws Exception {
>        return new RouteBuilder() {
>            public void configure() throws Exception {
>                from("direct:in").process(new Processor() {
>                    public void process(Exchange exchange) throws Exception
> {
>                        String body =
> exchange.getIn().getBody(String.class);
>                        exchange.getOut(true).setBody(body + " World");
>                    }
>                });
>            }
>        };
>    }
>
>
> Med venlig hilsen
>
> Claus Ibsen
> ......................................
> Silverbullet
> Skovsgårdsvænget 21
> 8362 Hørning
> Tlf. +45 2962 7576
> Web: www.silverbullet.dk
>
> -----Original Message-----
> From: cmoulliard [mailto:cmoulliard@gmail.com]
> Sent: 8. juli 2008 09:05
> To: camel-user@activemq.apache.org
> Subject: Re: route definition: component response routing
>
>
> Hi Vlad,
>
> If the destination endpoint is not defined, an error will be generated when
> your message will be send. Different strategies exist to avoid to lost your
> message in this situation :
>
> - Implement a DeadLetterchannel,
> - Define your "from" endpoint as a transactional endpoint to provide a
> rollback
>
> Regards,
>
> Charles
>
>
> volenin wrote:
> >
> > Does anyone have any suggestion re: this question?...
> >
> >
> > On Sun, Jun 29, 2008 at 5:47 PM, Vlad Olenin <volenin@gmail.com> wrote:
> >
> >> Hi,
> >>
> >> I was browsing through the documentation recently trying to find the
> >> answer
> >> for the following question. If the outbound route from one of the
> >> endpoints
> >> is not defined, does it mean that the response that component is
> creating
> >> would be propagated back through the request chain? Or it would just
> >> terminate on that endpoint? In other words, does Camel behavior in this
> >> case
> >> resembles that of Mule or not? (From what I read, in Mule if the
> outbound
> >> route is not defined, the message would 'bounce back' along the
> >> invocation
> >> chain towards the original caller).
> >>
> >> Thanks,
> >>
> >> Vlad
> >>
> >
> >
>
> --
> View this message in context:
> http://www.nabble.com/route-definition%3A-component-response-routing-tp18185736s22882p18333101.html
> Sent from the Camel - Users mailing list archive at Nabble.com.
>
>

Mime
View raw message