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
<javier.ari...@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: cib...@fusesource.com
Web: http://fusesource.com
Twitter: davsclaus, fusenews
Blog: http://davsclaus.blogspot.com/
Author of Camel in Action: http://www.manning.com/ibsen/

Reply via email to