Thanks Hadrian Zbarcea:
..... it seems the discuss has stray away from my original question.
the original question is :
when execution logic of route cannot be expressed by camel's built in MEP.
Is there method which could be used to define a custom execution logic which
can invoke not only endpoint , but also other built in processors?
Here is a example:
there are some web services which could be used to query a person's
infomation; we need try them one by one, until one webservice has return a
given person's info.
pseudocode expressed as following:
Person queryinfo(String name){
String[] addresses = readFromCfg();
for(String address : addresses){
person = new webservice(address).queryInfo(name);
if(person != null)
return person;
}
}
But using camel, I dont know how to write a route do same things;
Although recipeint list could do likeness. but I dont know how to stop
execution when a person infomation is got. (although I could raise a exception
to force receipent list stop, but it's not reason-able);
So I am wonderring if camel could provide some mechanis which enable I write a
custom logic to schedule execution of camel processor. it may looks like:
<route>
<...>
<setHeader name="addresses> <bean "readAddress"></setHeader>
<customExecution ref="customExecution ">
<recipientList> <header>singleAddress</header> </recipientList>
</customExecution>
</route>
class customExecution {
void process(Exchange ex){
String[] addresses = ex.getIn().getHeader("addresses");
for(String address : addresses){
ex.getIn().setHeader("singleAddress", address);
getChildProcessor(0).process(ex);
if(containsPerson(ex.getOut().getBody())){
return;
}
}
}
----- Original Message -----
From: "Hadrian Zbarcea" <[email protected]>
To: <[email protected]>
Sent: Tuesday, November 08, 2011 12:53 PM
Subject: Re: Should camel extend the way of custom logical of camel route?
> Sure you can, there is also a loop [1] you could use for repetitive
> invocations. You can also define your own interceptor, which could also
> use a builder if you want to configure any kind of custom logic you
> might dream of. There's only so much we can provide out of the box.
>
> Cheers,
> Hadrian
>
> [1] http://camel.apache.org/loop.html
>
>
>
> On 11/07/2011 10:09 PM, xuhb wrote:
>> Thanks Willem:
>> It seems the intercept is a extension of interceptor which enable user
>> to define intercept logic with camel description language;
>> Although camel provide predefined control logic: stop route& skip ; But
>> if we need other executing logic, could I define it?
>>
>> for example: could I define how many times the processor will be executed
>> with intercept?
>>
>>
>> ----- Original Message -----
>> From: "Willem Jiang"<[email protected]>
>> To:<[email protected]>
>> Sent: Monday, November 07, 2011 6:44 PM
>> Subject: Re: Should camel extend the way of custom logical of camel route?
>>
>>
>>> I think you can do the same thing with Intercept[1].
>>>
>>> [1]http://camel.apache.org/intercept.html
>>>
>>> On 11/7/11 1:51 PM, xuhb wrote:
>>>> When the application's execution logic is sophisticate , we can using
>>>> endpoint and java bean to define a custom logic ;
>>>>
>>>> Here is a limitation: " only endpoint could be invoked in the custom
>>>> execution logic", so how about to support another mechanism which enable
>>>> user to define custom logical which could invoke processors defined in
>>>> route (also endpoint can be invoked)?
>>>>
>>>> Is this worth to do for camel?
>>>>
>>>> Following is a proto-type (which is not good, because the implementation
>>>> way violate the natural usage of camel's component);
>>>>
>>>> 1)extending a policy ,the policy enable user to retrieve the child
>>>> processor with index or processor id; and the end-user could invoke the
>>>> child processor as they want;
>>>> 2) change Pipeline , enable populate all child processors;
>>>
>>>
>>> --
>>> Willem
>>> ----------------------------------
>>> FuseSource
>>> Web: http://www.fusesource.com
>>> Blog: http://willemjiang.blogspot.com (English)
>>> http://jnn.javaeye.com (Chinese)
>>> Twitter: willemjiang
>>> Weibo: willemjiang
>>>
>