Question/Discussion:

Do you think "functions" in the Camel DSL make sense?

Explanation:

Say you have to following route:

from("direct:a")
    .setHeader("myHeader", constant("test"))
    .to("direct:b");

And then you have a similar route:

from("direct:c")
    .setHeader("myHeader2", constant("test"))
    .to("direct:d");

As you are setting it more or less the same you could make a routeTemplate:

        routeTemplate("someFunction")
            // here we define the required input parameters (with a default
value)
             .templateParameter("headerName", "myHeader")
            .from("direct:a")
                 .setHeader("{{headerName}}", constant("test"))

And then you can:

from("direct:a")
    .to("direct:someFunction")
    .to("direct:b");

And for the second route:

from("direct:c")
    .to("direct:someFunction")
    .to("direct:d");


This however seems a bit cumbersome, because:

1. I must have a from statement in my subroute (which should be just a
function).
2. I need to know the component of the from statement and call it with a
"to" statement.
3. I need to create the route from routeTemplates before the route starts
and I need to do this everytime I use that 'function'.
4. If I want to use the same code then I need to call the same route
multiple times,
   but in certain cases this can become a bottle-neck (think of Seda of JMS
Queues).
   Especially when call it from hundreds of places, this maybe troublesome
(throughput or memory).


Would be easier and more direct to have like this:

function("someFunction")
.parameter("headerName", "myHeader")
.setHeader("{{headerName}}", constant("test"))

And then call it:

from("direct:a")
    .function("someFunction")
    .to("direct:b");

And:

from("direct:c")
    .function("someFunction")
.parameter("myHeader2")
    .to("direct:d");

On install the routes are exactly the same as the first and second route
(only reused).

What do think?

Raymond

Reply via email to