You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@camel.apache.org by Claus Ibsen <cl...@gmail.com> on 2021/03/05 14:04:01 UTC
[HEADS UP] - Optional property placeholders in Camel 3.9
Hi
In Camel 3.9 we are introducing optional property placeholders.
https://issues.apache.org/jira/browse/CAMEL-16302
The use-case is to allow configuring Camel endpoints (primarily) where
you can specify some options that may be configured or not (optional).
Currently all property placeholders are mandatory, unless a default
value is provided. So with the default value, you could do "optional"
but then you would need to know what the default value would be (if
there is any).
Optional placeholders is also a feature that we want to have with
route templates (aka Kamelets). So you can create kamelets with a
number of options (some are required, and others would be optional).
And others have default values etc.
The syntax for marking a property placeholder as option is to prefix
the key name with ?, eg
from("jms:cheese?concurrentConsumers={{?speedUp}}")
Here the concurrent consumers option is optional, as the placeholder
value starts with a ? in the key name.
Then the Camel end user can configure the property placeholder, such
as in application.properties
speedUp=5
Or if there are no configuration, then the option is not present and
the endpoint is resolved as:
from("jms:cheese")
The syntax with the ? mark was choose to keep it short. But we are
open for feedback.
Another alternative was to prefix with optional:
{{optional:speedUp}}
However the properties component in Camel then assume the key is named
optional, and the default value is speedUp. So it clashes with this.
But we could make "optional" a reserved word and do special handling
for this.
The only concern about using ? is that an endpoint uri already have ?
for query parameters. And if using more ? would be confusing?
from("jms:cheese?concurrentConsumers={{?speedUp}}&subscrtiptionName={{someName}}")
Any thoughts?
--
Claus Ibsen
-----------------
http://davsclaus.com @davsclaus
Camel in Action 2: https://www.manning.com/ibsen2
Re: [HEADS UP] - Optional property placeholders in Camel 3.9
Posted by Babak Vahdat <ba...@swissonline.ch>.
Hi
I think if we want to go with ‘?’ as a marker for the optional parameter then that question mark could be better put at the end of parameter name:
from("jms:cheese?concurrentConsumers={{speedUp?}}")
Like it’s the case in TS:
https://www.typescriptlang.org/docs/handbook/functions.html#optional-and-default-parameters <https://www.typescriptlang.org/docs/handbook/functions.html#optional-and-default-parameters>
It’s also the same syntax for optional chaining in JS itself:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining>
Babak
> On 5 Mar 2021, at 15:04, Claus Ibsen <cl...@gmail.com> wrote:
>
> Hi
>
> In Camel 3.9 we are introducing optional property placeholders.
> https://issues.apache.org/jira/browse/CAMEL-16302
>
> The use-case is to allow configuring Camel endpoints (primarily) where
> you can specify some options that may be configured or not (optional).
>
> Currently all property placeholders are mandatory, unless a default
> value is provided. So with the default value, you could do "optional"
> but then you would need to know what the default value would be (if
> there is any).
>
> Optional placeholders is also a feature that we want to have with
> route templates (aka Kamelets). So you can create kamelets with a
> number of options (some are required, and others would be optional).
> And others have default values etc.
>
> The syntax for marking a property placeholder as option is to prefix
> the key name with ?, eg
>
> from("jms:cheese?concurrentConsumers={{?speedUp}}")
>
> Here the concurrent consumers option is optional, as the placeholder
> value starts with a ? in the key name.
>
> Then the Camel end user can configure the property placeholder, such
> as in application.properties
>
> speedUp=5
>
> Or if there are no configuration, then the option is not present and
> the endpoint is resolved as:
>
> from("jms:cheese")
>
>
> The syntax with the ? mark was choose to keep it short. But we are
> open for feedback.
> Another alternative was to prefix with optional:
>
> {{optional:speedUp}}
>
> However the properties component in Camel then assume the key is named
> optional, and the default value is speedUp. So it clashes with this.
> But we could make "optional" a reserved word and do special handling
> for this.
>
> The only concern about using ? is that an endpoint uri already have ?
> for query parameters. And if using more ? would be confusing?
>
> from("jms:cheese?concurrentConsumers={{?speedUp}}&subscrtiptionName={{someName}}")
>
> Any thoughts?
>
>
> --
> Claus Ibsen
> -----------------
> http://davsclaus.com @davsclaus
> Camel in Action 2: https://www.manning.com/ibsen2
Re: [HEADS UP] - Optional property placeholders in Camel 3.9
Posted by Claus Ibsen <cl...@gmail.com>.
Hi
Thanks for all the feedback.
Yeah naming in IT is hard, and so is also which operator syntax to use.
{{?foo}} vs {{foo?}} vs {{optional:foo}} vs {{foo:-}}
I think the last one looks like a smiley ;)
And you can also think of using query parameters style:
{{foo?optional=true}}
On Tue, Mar 9, 2021 at 6:16 AM Tadayoshi Sato <sa...@gmail.com> wrote:
>
> Ah there is already the "?speedUp" notation to describe it as optional in
> camel-main. Then I'm fine with {{?speedUp}} syntax to maintain consistency
> within Camel.
> https://camel.apache.org/components/latest/others/main.html#_optional_parameters_on_beans
>
> On Mon, Mar 8, 2021 at 2:25 PM Tadayoshi Sato <sa...@gmail.com>
> wrote:
>
> > Hi Zoran,
> >
> > Just in case, Properties component already provide the feature of
> > specifying a default value with {{speedUp:other}} syntax:
> > https://camel.apache.org/components/3.7.x/properties-component.html#_syntax
> >
> > So what Claus proposes here is a feature that optionally can assign some
> > value but otherwise leaves it unassigned at all.
> > I see Claus' point that the syntax {{optional:speedUp}} is really
> > confusing as the properties component would then see it as the placeholder
> > "optional" with default value "speedUp".
> >
> > Personally, I second Babak's syntax of {{speedUp?}} as it aligns with JS
> > syntax and REST producer optional parameters Zoran introduced.
> >
> > Best regards,
> > Tadayoshi
> >
> > On Sat, Mar 6, 2021 at 4:41 AM Zoran Regvart <zo...@regvart.com> wrote:
> >
> >> Hi Claus,
> >> I like the bash shell parameter expansion[1], this allows for
> >> specifying the default value if parameter doesn't expand. Something
> >> like {{speedUp:-}} would be optional without a default value, whereas
> >> {{speedUp:-other}} would provide `other` as a default value.
> >>
> >> For the REST producer bits I introduced optional parameters with a
> >> trailing question mark, see[2]. Doing something consistent here would
> >> be good I think.
> >>
> >> zoran
> >>
> >> [1]
> >> https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html#Shell-Parameter-Expansion
> >> [2]
> >> https://github.com/apache/camel/blob/b040a056ddf1b8f0756516cd47c00f180f128c05/core/camel-core/src/test/java/org/apache/camel/component/rest/RestProducerTest.java#L84
> >>
> >> On Fri, Mar 5, 2021 at 3:04 PM Claus Ibsen <cl...@gmail.com> wrote:
> >> >
> >> > Hi
> >> >
> >> > In Camel 3.9 we are introducing optional property placeholders.
> >> > https://issues.apache.org/jira/browse/CAMEL-16302
> >> >
> >> > The use-case is to allow configuring Camel endpoints (primarily) where
> >> > you can specify some options that may be configured or not (optional).
> >> >
> >> > Currently all property placeholders are mandatory, unless a default
> >> > value is provided. So with the default value, you could do "optional"
> >> > but then you would need to know what the default value would be (if
> >> > there is any).
> >> >
> >> > Optional placeholders is also a feature that we want to have with
> >> > route templates (aka Kamelets). So you can create kamelets with a
> >> > number of options (some are required, and others would be optional).
> >> > And others have default values etc.
> >> >
> >> > The syntax for marking a property placeholder as option is to prefix
> >> > the key name with ?, eg
> >> >
> >> > from("jms:cheese?concurrentConsumers={{?speedUp}}")
> >> >
> >> > Here the concurrent consumers option is optional, as the placeholder
> >> > value starts with a ? in the key name.
> >> >
> >> > Then the Camel end user can configure the property placeholder, such
> >> > as in application.properties
> >> >
> >> > speedUp=5
> >> >
> >> > Or if there are no configuration, then the option is not present and
> >> > the endpoint is resolved as:
> >> >
> >> > from("jms:cheese")
> >> >
> >> >
> >> > The syntax with the ? mark was choose to keep it short. But we are
> >> > open for feedback.
> >> > Another alternative was to prefix with optional:
> >> >
> >> > {{optional:speedUp}}
> >> >
> >> > However the properties component in Camel then assume the key is named
> >> > optional, and the default value is speedUp. So it clashes with this.
> >> > But we could make "optional" a reserved word and do special handling
> >> > for this.
> >> >
> >> > The only concern about using ? is that an endpoint uri already have ?
> >> > for query parameters. And if using more ? would be confusing?
> >> >
> >> >
> >> from("jms:cheese?concurrentConsumers={{?speedUp}}&subscrtiptionName={{someName}}")
> >> >
> >> > Any thoughts?
> >> >
> >> >
> >> > --
> >> > Claus Ibsen
> >> > -----------------
> >> > http://davsclaus.com @davsclaus
> >> > Camel in Action 2: https://www.manning.com/ibsen2
> >>
> >>
> >>
> >> --
> >> Zoran Regvart
> >>
> >
> >
> > --
> > Tadayoshi Sato
> >
>
>
> --
> Tadayoshi Sato
--
Claus Ibsen
-----------------
http://davsclaus.com @davsclaus
Camel in Action 2: https://www.manning.com/ibsen2
Re: [HEADS UP] - Optional property placeholders in Camel 3.9
Posted by Tadayoshi Sato <sa...@gmail.com>.
Ah there is already the "?speedUp" notation to describe it as optional in
camel-main. Then I'm fine with {{?speedUp}} syntax to maintain consistency
within Camel.
https://camel.apache.org/components/latest/others/main.html#_optional_parameters_on_beans
On Mon, Mar 8, 2021 at 2:25 PM Tadayoshi Sato <sa...@gmail.com>
wrote:
> Hi Zoran,
>
> Just in case, Properties component already provide the feature of
> specifying a default value with {{speedUp:other}} syntax:
> https://camel.apache.org/components/3.7.x/properties-component.html#_syntax
>
> So what Claus proposes here is a feature that optionally can assign some
> value but otherwise leaves it unassigned at all.
> I see Claus' point that the syntax {{optional:speedUp}} is really
> confusing as the properties component would then see it as the placeholder
> "optional" with default value "speedUp".
>
> Personally, I second Babak's syntax of {{speedUp?}} as it aligns with JS
> syntax and REST producer optional parameters Zoran introduced.
>
> Best regards,
> Tadayoshi
>
> On Sat, Mar 6, 2021 at 4:41 AM Zoran Regvart <zo...@regvart.com> wrote:
>
>> Hi Claus,
>> I like the bash shell parameter expansion[1], this allows for
>> specifying the default value if parameter doesn't expand. Something
>> like {{speedUp:-}} would be optional without a default value, whereas
>> {{speedUp:-other}} would provide `other` as a default value.
>>
>> For the REST producer bits I introduced optional parameters with a
>> trailing question mark, see[2]. Doing something consistent here would
>> be good I think.
>>
>> zoran
>>
>> [1]
>> https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html#Shell-Parameter-Expansion
>> [2]
>> https://github.com/apache/camel/blob/b040a056ddf1b8f0756516cd47c00f180f128c05/core/camel-core/src/test/java/org/apache/camel/component/rest/RestProducerTest.java#L84
>>
>> On Fri, Mar 5, 2021 at 3:04 PM Claus Ibsen <cl...@gmail.com> wrote:
>> >
>> > Hi
>> >
>> > In Camel 3.9 we are introducing optional property placeholders.
>> > https://issues.apache.org/jira/browse/CAMEL-16302
>> >
>> > The use-case is to allow configuring Camel endpoints (primarily) where
>> > you can specify some options that may be configured or not (optional).
>> >
>> > Currently all property placeholders are mandatory, unless a default
>> > value is provided. So with the default value, you could do "optional"
>> > but then you would need to know what the default value would be (if
>> > there is any).
>> >
>> > Optional placeholders is also a feature that we want to have with
>> > route templates (aka Kamelets). So you can create kamelets with a
>> > number of options (some are required, and others would be optional).
>> > And others have default values etc.
>> >
>> > The syntax for marking a property placeholder as option is to prefix
>> > the key name with ?, eg
>> >
>> > from("jms:cheese?concurrentConsumers={{?speedUp}}")
>> >
>> > Here the concurrent consumers option is optional, as the placeholder
>> > value starts with a ? in the key name.
>> >
>> > Then the Camel end user can configure the property placeholder, such
>> > as in application.properties
>> >
>> > speedUp=5
>> >
>> > Or if there are no configuration, then the option is not present and
>> > the endpoint is resolved as:
>> >
>> > from("jms:cheese")
>> >
>> >
>> > The syntax with the ? mark was choose to keep it short. But we are
>> > open for feedback.
>> > Another alternative was to prefix with optional:
>> >
>> > {{optional:speedUp}}
>> >
>> > However the properties component in Camel then assume the key is named
>> > optional, and the default value is speedUp. So it clashes with this.
>> > But we could make "optional" a reserved word and do special handling
>> > for this.
>> >
>> > The only concern about using ? is that an endpoint uri already have ?
>> > for query parameters. And if using more ? would be confusing?
>> >
>> >
>> from("jms:cheese?concurrentConsumers={{?speedUp}}&subscrtiptionName={{someName}}")
>> >
>> > Any thoughts?
>> >
>> >
>> > --
>> > Claus Ibsen
>> > -----------------
>> > http://davsclaus.com @davsclaus
>> > Camel in Action 2: https://www.manning.com/ibsen2
>>
>>
>>
>> --
>> Zoran Regvart
>>
>
>
> --
> Tadayoshi Sato
>
--
Tadayoshi Sato
Re: [HEADS UP] - Optional property placeholders in Camel 3.9
Posted by Tadayoshi Sato <sa...@gmail.com>.
Hi Zoran,
Just in case, Properties component already provide the feature of
specifying a default value with {{speedUp:other}} syntax:
https://camel.apache.org/components/3.7.x/properties-component.html#_syntax
So what Claus proposes here is a feature that optionally can assign some
value but otherwise leaves it unassigned at all.
I see Claus' point that the syntax {{optional:speedUp}} is really confusing
as the properties component would then see it as the placeholder "optional"
with default value "speedUp".
Personally, I second Babak's syntax of {{speedUp?}} as it aligns with JS
syntax and REST producer optional parameters Zoran introduced.
Best regards,
Tadayoshi
On Sat, Mar 6, 2021 at 4:41 AM Zoran Regvart <zo...@regvart.com> wrote:
> Hi Claus,
> I like the bash shell parameter expansion[1], this allows for
> specifying the default value if parameter doesn't expand. Something
> like {{speedUp:-}} would be optional without a default value, whereas
> {{speedUp:-other}} would provide `other` as a default value.
>
> For the REST producer bits I introduced optional parameters with a
> trailing question mark, see[2]. Doing something consistent here would
> be good I think.
>
> zoran
>
> [1]
> https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html#Shell-Parameter-Expansion
> [2]
> https://github.com/apache/camel/blob/b040a056ddf1b8f0756516cd47c00f180f128c05/core/camel-core/src/test/java/org/apache/camel/component/rest/RestProducerTest.java#L84
>
> On Fri, Mar 5, 2021 at 3:04 PM Claus Ibsen <cl...@gmail.com> wrote:
> >
> > Hi
> >
> > In Camel 3.9 we are introducing optional property placeholders.
> > https://issues.apache.org/jira/browse/CAMEL-16302
> >
> > The use-case is to allow configuring Camel endpoints (primarily) where
> > you can specify some options that may be configured or not (optional).
> >
> > Currently all property placeholders are mandatory, unless a default
> > value is provided. So with the default value, you could do "optional"
> > but then you would need to know what the default value would be (if
> > there is any).
> >
> > Optional placeholders is also a feature that we want to have with
> > route templates (aka Kamelets). So you can create kamelets with a
> > number of options (some are required, and others would be optional).
> > And others have default values etc.
> >
> > The syntax for marking a property placeholder as option is to prefix
> > the key name with ?, eg
> >
> > from("jms:cheese?concurrentConsumers={{?speedUp}}")
> >
> > Here the concurrent consumers option is optional, as the placeholder
> > value starts with a ? in the key name.
> >
> > Then the Camel end user can configure the property placeholder, such
> > as in application.properties
> >
> > speedUp=5
> >
> > Or if there are no configuration, then the option is not present and
> > the endpoint is resolved as:
> >
> > from("jms:cheese")
> >
> >
> > The syntax with the ? mark was choose to keep it short. But we are
> > open for feedback.
> > Another alternative was to prefix with optional:
> >
> > {{optional:speedUp}}
> >
> > However the properties component in Camel then assume the key is named
> > optional, and the default value is speedUp. So it clashes with this.
> > But we could make "optional" a reserved word and do special handling
> > for this.
> >
> > The only concern about using ? is that an endpoint uri already have ?
> > for query parameters. And if using more ? would be confusing?
> >
> >
> from("jms:cheese?concurrentConsumers={{?speedUp}}&subscrtiptionName={{someName}}")
> >
> > Any thoughts?
> >
> >
> > --
> > Claus Ibsen
> > -----------------
> > http://davsclaus.com @davsclaus
> > Camel in Action 2: https://www.manning.com/ibsen2
>
>
>
> --
> Zoran Regvart
>
--
Tadayoshi Sato
Re: [HEADS UP] - Optional property placeholders in Camel 3.9
Posted by Zoran Regvart <zo...@regvart.com>.
Hi Claus,
I like the bash shell parameter expansion[1], this allows for
specifying the default value if parameter doesn't expand. Something
like {{speedUp:-}} would be optional without a default value, whereas
{{speedUp:-other}} would provide `other` as a default value.
For the REST producer bits I introduced optional parameters with a
trailing question mark, see[2]. Doing something consistent here would
be good I think.
zoran
[1] https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html#Shell-Parameter-Expansion
[2] https://github.com/apache/camel/blob/b040a056ddf1b8f0756516cd47c00f180f128c05/core/camel-core/src/test/java/org/apache/camel/component/rest/RestProducerTest.java#L84
On Fri, Mar 5, 2021 at 3:04 PM Claus Ibsen <cl...@gmail.com> wrote:
>
> Hi
>
> In Camel 3.9 we are introducing optional property placeholders.
> https://issues.apache.org/jira/browse/CAMEL-16302
>
> The use-case is to allow configuring Camel endpoints (primarily) where
> you can specify some options that may be configured or not (optional).
>
> Currently all property placeholders are mandatory, unless a default
> value is provided. So with the default value, you could do "optional"
> but then you would need to know what the default value would be (if
> there is any).
>
> Optional placeholders is also a feature that we want to have with
> route templates (aka Kamelets). So you can create kamelets with a
> number of options (some are required, and others would be optional).
> And others have default values etc.
>
> The syntax for marking a property placeholder as option is to prefix
> the key name with ?, eg
>
> from("jms:cheese?concurrentConsumers={{?speedUp}}")
>
> Here the concurrent consumers option is optional, as the placeholder
> value starts with a ? in the key name.
>
> Then the Camel end user can configure the property placeholder, such
> as in application.properties
>
> speedUp=5
>
> Or if there are no configuration, then the option is not present and
> the endpoint is resolved as:
>
> from("jms:cheese")
>
>
> The syntax with the ? mark was choose to keep it short. But we are
> open for feedback.
> Another alternative was to prefix with optional:
>
> {{optional:speedUp}}
>
> However the properties component in Camel then assume the key is named
> optional, and the default value is speedUp. So it clashes with this.
> But we could make "optional" a reserved word and do special handling
> for this.
>
> The only concern about using ? is that an endpoint uri already have ?
> for query parameters. And if using more ? would be confusing?
>
> from("jms:cheese?concurrentConsumers={{?speedUp}}&subscrtiptionName={{someName}}")
>
> Any thoughts?
>
>
> --
> Claus Ibsen
> -----------------
> http://davsclaus.com @davsclaus
> Camel in Action 2: https://www.manning.com/ibsen2
--
Zoran Regvart