camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Willem Jiang <willem.ji...@gmail.com>
Subject Re: Should camel extend the way of custom logical of camel route?
Date Tue, 08 Nov 2011 08:02:23 GMT
On Tue Nov  8 14:37:59 2011, xuhb wrote:
> 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>
>
It is not good to let your business logical aware the low level of 
camel API.
It could be more handy if you let camel to call a customer bean.
Then you can do what you want with it :)

> 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"<hzbarcea@gmail.com>
> To:<users@camel.apache.org>
> 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"<willem.jiang@gmail.com>
>>> To:<users@camel.apache.org>
>>> 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
>>>>
> >



-- 
Willem
----------------------------------
FuseSource
Web: http://www.fusesource.com
Blog:    http://willemjiang.blogspot.com (English)
         http://jnn.javaeye.com (Chinese)
Twitter: willemjiang 
Weibo: willemjiang 


Mime
View raw message