You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by Javier Arias Losada <ja...@gmail.com> on 2011/06/02 23:44:32 UTC

wrong processordefinitions in InterceptStrategy.wrapProcessorInInterceptors - choice+when+otherwise

Hello all,

I am working on a full traceability solution on my camel routes, for that, I
am using a custom interceptor.

The problem is that the parent-child relation is not correctly set when
InterceptStrategy.wrapProcessorInInterceptors() is called.

I am working with a patched camel 2.2.0, to include ticket 3928
https://issues.apache.org/jira/browse/CAMEL-3928
Also, I repeated the tests with the last snapshot: revision 1130773, with
same results.

For example, in the following route:

from("direct:start").routeId("route")
        .choice().id("choice")
            .when(new XPathExpression("/x")).id("when")
                .log(" A").id("task1")
                .log(" B").id("task2")
            .otherwise().id("otherwise")
                .log(" C").id("task3")
            .end()
        .to("mock:done");

I use a custom interceptor to show each processor and its parent:

getContext().addInterceptStrategy(new InterceptStrategy() {
            @Override
            public Processor wrapProcessorInInterceptors(CamelContext
context, ProcessorDefinition<?> definition, final Processor target,
Processor nextTarget) throws Exception {
                String targetId = definition.hasCustomIdAssigned() ?
definition.getId() : definition.getLabel();
                ProcessorDefinition<?> parentDefinition =
definition.getParent();

                String parentId = null;

                if(parentDefinition != null){
                    parentId = parentDefinition.hasCustomIdAssigned() ?
parentDefinition.getId() : parentDefinition.getLabel();
                }

                logger.info(">>>>>>>>> parentId="+parentId+"
targetId="+targetId);

                return new Processor() {//return mock-empty processor.
                    @Override
                    public void process(Exchange exchange) throws Exception
{
                        // mock processor
                        target.process(exchange);
                    }
                };
            }
        });


I was expecting the following output:

parent: when targetid: task1
parent: when targetid: task2
parent: otherwise targetid: task3

Also, as you can notice, each processorDefinition is handled twice, anybody
knows why?

The output is:
INFO: >>>>>>>>> parentId=otherwise targetId=task1
INFO: >>>>>>>>> parentId=otherwise targetId=task1
INFO: >>>>>>>>> parentId=otherwise targetId=task2
INFO: >>>>>>>>> parentId=otherwise targetId=task2
INFO: >>>>>>>>> parentId=otherwise targetId=task3
INFO: >>>>>>>>> parentId=otherwise targetId=task3
INFO: >>>>>>>>> parentId=route targetId=otherwise
INFO: >>>>>>>>> parentId=route targetId=otherwise
INFO: >>>>>>>>> parentId=route targetId=mock:done
INFO: >>>>>>>>> parentId=route targetId=mock:done

Thank you very much.
Javier Arias.

Re: wrong processordefinitions in InterceptStrategy.wrapProcessorInInterceptors - choice+when+otherwise

Posted by Claus Ibsen <cl...@gmail.com>.
Hi

I have created a ticket to improve the CBR to be more fine grained
(its a very often used EIP and it would be nice to have a fine grained
insight, this helps the tracer as well)

https://issues.apache.org/jira/browse/CAMEL-4050


On Sat, Jun 4, 2011 at 11:58 AM, Claus Ibsen <cl...@gmail.com> wrote:
> Hi
>
> The child-parent relationship is based on a per EIP principle. So they
> get assigned the ChoiceDefinition (= the CBR EIP) as their parent. So
> you will have to drill down in the CBR if you want to pin point more
> fine grained where the child is associated.
>
> However setting the id on the .otherwise() will currently set it on
> the ChoiceDefinition. We ought to set the id on the
> OtherwiseDefinition. I will get that fixed.
>
> On Thu, Jun 2, 2011 at 11:44 PM, Javier Arias Losada
> <ja...@gmail.com> wrote:
>> Hello all,
>>
>> I am working on a full traceability solution on my camel routes, for that, I
>> am using a custom interceptor.
>>
>> The problem is that the parent-child relation is not correctly set when
>> InterceptStrategy.wrapProcessorInInterceptors() is called.
>>
>> I am working with a patched camel 2.2.0, to include ticket 3928
>> https://issues.apache.org/jira/browse/CAMEL-3928
>> Also, I repeated the tests with the last snapshot: revision 1130773, with
>> same results.
>>
>> For example, in the following route:
>>
>> from("direct:start").routeId("route")
>>        .choice().id("choice")
>>            .when(new XPathExpression("/x")).id("when")
>>                .log(" A").id("task1")
>>                .log(" B").id("task2")
>>            .otherwise().id("otherwise")
>>                .log(" C").id("task3")
>>            .end()
>>        .to("mock:done");
>>
>> I use a custom interceptor to show each processor and its parent:
>>
>> getContext().addInterceptStrategy(new InterceptStrategy() {
>>            @Override
>>            public Processor wrapProcessorInInterceptors(CamelContext
>> context, ProcessorDefinition<?> definition, final Processor target,
>> Processor nextTarget) throws Exception {
>>                String targetId = definition.hasCustomIdAssigned() ?
>> definition.getId() : definition.getLabel();
>>                ProcessorDefinition<?> parentDefinition =
>> definition.getParent();
>>
>>                String parentId = null;
>>
>>                if(parentDefinition != null){
>>                    parentId = parentDefinition.hasCustomIdAssigned() ?
>> parentDefinition.getId() : parentDefinition.getLabel();
>>                }
>>
>>                logger.info(">>>>>>>>> parentId="+parentId+"
>> targetId="+targetId);
>>
>>                return new Processor() {//return mock-empty processor.
>>                    @Override
>>                    public void process(Exchange exchange) throws Exception
>> {
>>                        // mock processor
>>                        target.process(exchange);
>>                    }
>>                };
>>            }
>>        });
>>
>>
>> I was expecting the following output:
>>
>> parent: when targetid: task1
>> parent: when targetid: task2
>> parent: otherwise targetid: task3
>>
>> Also, as you can notice, each processorDefinition is handled twice, anybody
>> knows why?
>>
>> The output is:
>> INFO: >>>>>>>>> parentId=otherwise targetId=task1
>> INFO: >>>>>>>>> parentId=otherwise targetId=task1
>> INFO: >>>>>>>>> parentId=otherwise targetId=task2
>> INFO: >>>>>>>>> parentId=otherwise targetId=task2
>> INFO: >>>>>>>>> parentId=otherwise targetId=task3
>> INFO: >>>>>>>>> parentId=otherwise targetId=task3
>> INFO: >>>>>>>>> parentId=route targetId=otherwise
>> INFO: >>>>>>>>> parentId=route targetId=otherwise
>> INFO: >>>>>>>>> parentId=route targetId=mock:done
>> INFO: >>>>>>>>> parentId=route targetId=mock:done
>>
>> Thank you very much.
>> Javier Arias.
>>
>
>
>
> --
> Claus Ibsen
> -----------------
> FuseSource
> Email: cibsen@fusesource.com
> Web: http://fusesource.com
> Twitter: davsclaus, fusenews
> Blog: http://davsclaus.blogspot.com/
> Author of Camel in Action: http://www.manning.com/ibsen/
>



-- 
Claus Ibsen
-----------------
FuseSource
Email: cibsen@fusesource.com
Web: http://fusesource.com
Twitter: davsclaus, fusenews
Blog: http://davsclaus.blogspot.com/
Author of Camel in Action: http://www.manning.com/ibsen/

Re: wrong processordefinitions in InterceptStrategy.wrapProcessorInInterceptors - choice+when+otherwise

Posted by Claus Ibsen <cl...@gmail.com>.
Hi

The child-parent relationship is based on a per EIP principle. So they
get assigned the ChoiceDefinition (= the CBR EIP) as their parent. So
you will have to drill down in the CBR if you want to pin point more
fine grained where the child is associated.

However setting the id on the .otherwise() will currently set it on
the ChoiceDefinition. We ought to set the id on the
OtherwiseDefinition. I will get that fixed.

On Thu, Jun 2, 2011 at 11:44 PM, Javier Arias Losada
<ja...@gmail.com> wrote:
> Hello all,
>
> I am working on a full traceability solution on my camel routes, for that, I
> am using a custom interceptor.
>
> The problem is that the parent-child relation is not correctly set when
> InterceptStrategy.wrapProcessorInInterceptors() is called.
>
> I am working with a patched camel 2.2.0, to include ticket 3928
> https://issues.apache.org/jira/browse/CAMEL-3928
> Also, I repeated the tests with the last snapshot: revision 1130773, with
> same results.
>
> For example, in the following route:
>
> from("direct:start").routeId("route")
>        .choice().id("choice")
>            .when(new XPathExpression("/x")).id("when")
>                .log(" A").id("task1")
>                .log(" B").id("task2")
>            .otherwise().id("otherwise")
>                .log(" C").id("task3")
>            .end()
>        .to("mock:done");
>
> I use a custom interceptor to show each processor and its parent:
>
> getContext().addInterceptStrategy(new InterceptStrategy() {
>            @Override
>            public Processor wrapProcessorInInterceptors(CamelContext
> context, ProcessorDefinition<?> definition, final Processor target,
> Processor nextTarget) throws Exception {
>                String targetId = definition.hasCustomIdAssigned() ?
> definition.getId() : definition.getLabel();
>                ProcessorDefinition<?> parentDefinition =
> definition.getParent();
>
>                String parentId = null;
>
>                if(parentDefinition != null){
>                    parentId = parentDefinition.hasCustomIdAssigned() ?
> parentDefinition.getId() : parentDefinition.getLabel();
>                }
>
>                logger.info(">>>>>>>>> parentId="+parentId+"
> targetId="+targetId);
>
>                return new Processor() {//return mock-empty processor.
>                    @Override
>                    public void process(Exchange exchange) throws Exception
> {
>                        // mock processor
>                        target.process(exchange);
>                    }
>                };
>            }
>        });
>
>
> I was expecting the following output:
>
> parent: when targetid: task1
> parent: when targetid: task2
> parent: otherwise targetid: task3
>
> Also, as you can notice, each processorDefinition is handled twice, anybody
> knows why?
>
> The output is:
> INFO: >>>>>>>>> parentId=otherwise targetId=task1
> INFO: >>>>>>>>> parentId=otherwise targetId=task1
> INFO: >>>>>>>>> parentId=otherwise targetId=task2
> INFO: >>>>>>>>> parentId=otherwise targetId=task2
> INFO: >>>>>>>>> parentId=otherwise targetId=task3
> INFO: >>>>>>>>> parentId=otherwise targetId=task3
> INFO: >>>>>>>>> parentId=route targetId=otherwise
> INFO: >>>>>>>>> parentId=route targetId=otherwise
> INFO: >>>>>>>>> parentId=route targetId=mock:done
> INFO: >>>>>>>>> parentId=route targetId=mock:done
>
> Thank you very much.
> Javier Arias.
>



-- 
Claus Ibsen
-----------------
FuseSource
Email: cibsen@fusesource.com
Web: http://fusesource.com
Twitter: davsclaus, fusenews
Blog: http://davsclaus.blogspot.com/
Author of Camel in Action: http://www.manning.com/ibsen/