Re: Functions in Camel

2024-01-09 Thread ski n
I believe that:

- (Sub) routes are around 40% of the solution (Cause put logic in a
separate route and call it from one or more other routes)
- RouteTemplate are around 60% of the solution (Adding parameters and
defaults that can be started multiple times)
- Kameletes are around 80% of the solution (Calling it directly from a
route by name and route and routeid are automatically started)

The suggestion I did was to get to 100% and make it a real "pattern" with
for newbies logical names and part of the core.

Raymond



On Mon, Jan 8, 2024 at 4:43 PM ski n  wrote:

> I also seem to recall that routeTemplates haven't all functionality from
> Kamelets, and you can't call all routeTemplates exactly the same from the
> Kamelet component, but maybe this is not a limitation anymore.
>
> btw In my own runtime (Assimbly) I do load all Kamelets by default, so
> they are straight to use.
>
> Raymond
>
> On Mon, Jan 8, 2024 at 4:24 PM ski n  wrote:
>
>> Yeah, calling a Kamelet has the advantage that the subroute is
>> dynamically created.
>>
>> - Still need the to, not a separate EIP.
>> - Beginners would not search for "Kamelet", but function would be more
>> common
>> - You still need a from statement within the Kamelet
>> - Kamelet is not really part of the route, but a separate (sub)route
>>
>> But yeah this comes close. Maybe just call it with
>> function("template").parameters() or routeTemplate("").parameters()in
>> the DSL would be enough for most.
>>
>> Raymond
>>
>>
>>
>>
>>
>>
>> On Mon, Jan 8, 2024 at 4:00 PM Andrea Cosentino 
>> wrote:
>>
>>> It really seems the Kamelets' mission
>>>
>>> Il lun 8 gen 2024, 15:59 Pasquale Congiusti <
>>> pasquale.congiu...@gmail.com>
>>> ha scritto:
>>>
>>> > Hi Raymond,
>>> > Can't be a Kamelet considered for such a feature? I think it's one of
>>> its
>>> > purposes as well.
>>> >
>>> > Pasquale.
>>> >
>>> > On Mon, Jan 8, 2024 at 3:21 PM ski n  wrote:
>>> >
>>> > > 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
>>> > >
>>> >
>>>
>>


Re: Functions in Camel

2024-01-08 Thread ski n
I also seem to recall that routeTemplates haven't all functionality from
Kamelets, and you can't call all routeTemplates exactly the same from the
Kamelet component, but maybe this is not a limitation anymore.

btw In my own runtime (Assimbly) I do load all Kamelets by default, so they
are straight to use.

Raymond

On Mon, Jan 8, 2024 at 4:24 PM ski n  wrote:

> Yeah, calling a Kamelet has the advantage that the subroute is dynamically
> created.
>
> - Still need the to, not a separate EIP.
> - Beginners would not search for "Kamelet", but function would be more
> common
> - You still need a from statement within the Kamelet
> - Kamelet is not really part of the route, but a separate (sub)route
>
> But yeah this comes close. Maybe just call it with
> function("template").parameters() or routeTemplate("").parameters()in
> the DSL would be enough for most.
>
> Raymond
>
>
>
>
>
>
> On Mon, Jan 8, 2024 at 4:00 PM Andrea Cosentino  wrote:
>
>> It really seems the Kamelets' mission
>>
>> Il lun 8 gen 2024, 15:59 Pasquale Congiusti > >
>> ha scritto:
>>
>> > Hi Raymond,
>> > Can't be a Kamelet considered for such a feature? I think it's one of
>> its
>> > purposes as well.
>> >
>> > Pasquale.
>> >
>> > On Mon, Jan 8, 2024 at 3:21 PM ski n  wrote:
>> >
>> > > 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
>> > >
>> >
>>
>


Re: Functions in Camel

2024-01-08 Thread ski n
Yeah, calling a Kamelet has the advantage that the subroute is dynamically
created.

- Still need the to, not a separate EIP.
- Beginners would not search for "Kamelet", but function would be more
common
- You still need a from statement within the Kamelet
- Kamelet is not really part of the route, but a separate (sub)route

But yeah this comes close. Maybe just call it with
function("template").parameters() or routeTemplate("").parameters()in
the DSL would be enough for most.

Raymond






On Mon, Jan 8, 2024 at 4:00 PM Andrea Cosentino  wrote:

> It really seems the Kamelets' mission
>
> Il lun 8 gen 2024, 15:59 Pasquale Congiusti 
> ha scritto:
>
> > Hi Raymond,
> > Can't be a Kamelet considered for such a feature? I think it's one of its
> > purposes as well.
> >
> > Pasquale.
> >
> > On Mon, Jan 8, 2024 at 3:21 PM ski n  wrote:
> >
> > > 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
> > >
> >
>


Re: Functions in Camel

2024-01-08 Thread Andrea Cosentino
It really seems the Kamelets' mission

Il lun 8 gen 2024, 15:59 Pasquale Congiusti 
ha scritto:

> Hi Raymond,
> Can't be a Kamelet considered for such a feature? I think it's one of its
> purposes as well.
>
> Pasquale.
>
> On Mon, Jan 8, 2024 at 3:21 PM ski n  wrote:
>
> > 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
> >
>


Re: Functions in Camel

2024-01-08 Thread Pasquale Congiusti
Hi Raymond,
Can't be a Kamelet considered for such a feature? I think it's one of its
purposes as well.

Pasquale.

On Mon, Jan 8, 2024 at 3:21 PM ski n  wrote:

> 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
>