You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@camel.apache.org by Luca Burgazzoli <lb...@gmail.com> on 2016/11/03 12:30:10 UTC

camel-properties enhancements

Hi everyone,

I've been working on a blueprint based applications for soem weeks and
I had to deal with a number of properties placeholders so I've used
camel-properties and I found some issues/limitation for which I've
raised the following JIRA:

1. CAMEL-10352: Optionally delegate to Aries PropertyEvaluator services
   in BlueprintPropertiesParser
2. CAMEL-10393: Add an option to disable using default value if a
   property does not exists
3. CAMEL-10417: Support adding location using child nodes of
   propertyPlaceholder element
4. CAMEL-10419: Allow to individually set whether to silently ignore a
   missing location


CAMEL-10352 and CAMEL-10393 have already been merged and I've just
completed the implementation of CAMEL-10417 and CAMEL-10419 which you
can find in my fork:

    https://github.com/lburgazzoli/apache-camel/tree/camel-properties


Before merge it I'd like to have your opinion as there are some small
changes about the XML configuration I'm going to highlight here:

1. As today, you can customize the property placeholders with the tag
   propertyPlaceholder where the attribute location is mandatory and
   that is fine untill you just want to register your own function in
   blueprint which lead to something like that:

   <propertyPlaceholder
     id="myPropertyPlaceholder"
     location="none"
     ignoreMissingLocation="true">

    <propertiesFunction ref="beerFunction"/>

   </propertyPlaceholder>

   So you may think that you have no locations set but that is not true
   because by default camel-blueprint detects OSGi blueprint property
   placeholders services and add them to the mix. Of course you can
   disable such behavior but I found this a little bit confusing so I
   made it not more mandatory (in fact that is the same behavior you'd
   have if you define a PropertiesComponent bean instead of using the
   propertyPlaceholder tag) and now you can now write it as:

   <propertyPlaceholder id="myPropertyPlaceholder">
    <propertiesFunction ref="beerFunction"/>
   </propertyPlaceholder>

2. As today to add new properties placeholder locations you need to set
   them with the location attribute using comma as separator and this
   work just fine but it may result confusing if you need to deal with a
   number of properties files. In addition you can't set which location
   is required and which may be missing as the option to ignore missing
   location is global so I've enhanced the propertyPlaceholder tag in a
   way you can add locations as:

   <propertyPlaceholder id="myPropertyPlaceholder">

    <propertiesLocation
      resolver = "classpath"
      path     = "com/my/company/something/my-properties-1.properties"
      optional = "false"/>

    <propertiesLocation
      resolver = "classpath"
      path     = "com/my/company/something/my-properties-2.properties"
      optional = "false"/>

    <propertiesLocation
      resolver = "file"
      path     = "${karaf.home}/etc/my-override.properties"
      optional = "true"/>

   </propertyPlaceholder>

   Note that the attribute resolver and optional are not mandatory and
   have classpath and false as default value respectivley.

   Of course setting locations via location attribute is still supported
   and it has been enhanced to support additional attributes, i.e.:

   <propertyPlaceholder
       id="myPropertyPlaceholder"
       location="file:${karaf.home}/etc/my.properties;optional=true"/>

   Note that the locations defined by the propertiesLocation tag are
   added to those defined in location attribute.


Any objection/suggestion on such implementation ?


Regards,
Luca

---
Luca Burgazzoli

Re: camel-properties enhancements

Posted by Andrea Cosentino <an...@yahoo.com.INVALID>.
+1.

It will need new documentation too I guess.
 --
Andrea Cosentino 
----------------------------------
Apache Camel PMC Member
Apache Karaf Committer
Apache Servicemix Committer
Email: ancosen1985@yahoo.com
Twitter: @oscerd2
Github: oscerd



On Friday, November 4, 2016 10:06 AM, Claus Ibsen <cl...@gmail.com> wrote:
Sounds fine for inclusion in Camel 2.19 onwards.


On Thu, Nov 3, 2016 at 1:30 PM, Luca Burgazzoli <lb...@gmail.com> wrote:
> Hi everyone,
>
> I've been working on a blueprint based applications for soem weeks and
> I had to deal with a number of properties placeholders so I've used
> camel-properties and I found some issues/limitation for which I've
> raised the following JIRA:
>
> 1. CAMEL-10352: Optionally delegate to Aries PropertyEvaluator services
>    in BlueprintPropertiesParser
> 2. CAMEL-10393: Add an option to disable using default value if a
>    property does not exists
> 3. CAMEL-10417: Support adding location using child nodes of
>    propertyPlaceholder element
> 4. CAMEL-10419: Allow to individually set whether to silently ignore a
>    missing location
>
>
> CAMEL-10352 and CAMEL-10393 have already been merged and I've just
> completed the implementation of CAMEL-10417 and CAMEL-10419 which you
> can find in my fork:
>
>    https://github.com/lburgazzoli/apache-camel/tree/camel-properties
>
>
> Before merge it I'd like to have your opinion as there are some small
> changes about the XML configuration I'm going to highlight here:
>
> 1. As today, you can customize the property placeholders with the tag
>    propertyPlaceholder where the attribute location is mandatory and
>    that is fine untill you just want to register your own function in
>    blueprint which lead to something like that:
>
>    <propertyPlaceholder
>      id="myPropertyPlaceholder"
>      location="none"
>      ignoreMissingLocation="true">
>
>     <propertiesFunction ref="beerFunction"/>
>
>    </propertyPlaceholder>
>
>    So you may think that you have no locations set but that is not true
>    because by default camel-blueprint detects OSGi blueprint property
>    placeholders services and add them to the mix. Of course you can
>    disable such behavior but I found this a little bit confusing so I
>    made it not more mandatory (in fact that is the same behavior you'd
>    have if you define a PropertiesComponent bean instead of using the
>    propertyPlaceholder tag) and now you can now write it as:
>
>    <propertyPlaceholder id="myPropertyPlaceholder">
>     <propertiesFunction ref="beerFunction"/>
>    </propertyPlaceholder>
>
> 2. As today to add new properties placeholder locations you need to set
>    them with the location attribute using comma as separator and this
>    work just fine but it may result confusing if you need to deal with a
>    number of properties files. In addition you can't set which location
>    is required and which may be missing as the option to ignore missing
>    location is global so I've enhanced the propertyPlaceholder tag in a
>    way you can add locations as:
>
>    <propertyPlaceholder id="myPropertyPlaceholder">
>
>     <propertiesLocation
>       resolver = "classpath"
>       path     = "com/my/company/something/my-properties-1.properties"
>       optional = "false"/>
>
>     <propertiesLocation
>       resolver = "classpath"
>       path     = "com/my/company/something/my-properties-2.properties"
>       optional = "false"/>
>
>     <propertiesLocation
>       resolver = "file"
>       path     = "${karaf.home}/etc/my-override.properties"
>       optional = "true"/>
>
>    </propertyPlaceholder>
>
>    Note that the attribute resolver and optional are not mandatory and
>    have classpath and false as default value respectivley.
>
>    Of course setting locations via location attribute is still supported
>    and it has been enhanced to support additional attributes, i.e.:
>
>    <propertyPlaceholder
>        id="myPropertyPlaceholder"
>        location="file:${karaf.home}/etc/my.properties;optional=true"/>
>
>    Note that the locations defined by the propertiesLocation tag are
>    added to those defined in location attribute.
>
>
> Any objection/suggestion on such implementation ?
>
>
> Regards,
> Luca
>
> ---
> Luca Burgazzoli



-- 
Claus Ibsen
-----------------
http://davsclaus.com @davsclaus
Camel in Action 2: https://www.manning.com/ibsen2

Re: camel-properties enhancements

Posted by Claus Ibsen <cl...@gmail.com>.
Sounds fine for inclusion in Camel 2.19 onwards.

On Thu, Nov 3, 2016 at 1:30 PM, Luca Burgazzoli <lb...@gmail.com> wrote:
> Hi everyone,
>
> I've been working on a blueprint based applications for soem weeks and
> I had to deal with a number of properties placeholders so I've used
> camel-properties and I found some issues/limitation for which I've
> raised the following JIRA:
>
> 1. CAMEL-10352: Optionally delegate to Aries PropertyEvaluator services
>    in BlueprintPropertiesParser
> 2. CAMEL-10393: Add an option to disable using default value if a
>    property does not exists
> 3. CAMEL-10417: Support adding location using child nodes of
>    propertyPlaceholder element
> 4. CAMEL-10419: Allow to individually set whether to silently ignore a
>    missing location
>
>
> CAMEL-10352 and CAMEL-10393 have already been merged and I've just
> completed the implementation of CAMEL-10417 and CAMEL-10419 which you
> can find in my fork:
>
>     https://github.com/lburgazzoli/apache-camel/tree/camel-properties
>
>
> Before merge it I'd like to have your opinion as there are some small
> changes about the XML configuration I'm going to highlight here:
>
> 1. As today, you can customize the property placeholders with the tag
>    propertyPlaceholder where the attribute location is mandatory and
>    that is fine untill you just want to register your own function in
>    blueprint which lead to something like that:
>
>    <propertyPlaceholder
>      id="myPropertyPlaceholder"
>      location="none"
>      ignoreMissingLocation="true">
>
>     <propertiesFunction ref="beerFunction"/>
>
>    </propertyPlaceholder>
>
>    So you may think that you have no locations set but that is not true
>    because by default camel-blueprint detects OSGi blueprint property
>    placeholders services and add them to the mix. Of course you can
>    disable such behavior but I found this a little bit confusing so I
>    made it not more mandatory (in fact that is the same behavior you'd
>    have if you define a PropertiesComponent bean instead of using the
>    propertyPlaceholder tag) and now you can now write it as:
>
>    <propertyPlaceholder id="myPropertyPlaceholder">
>     <propertiesFunction ref="beerFunction"/>
>    </propertyPlaceholder>
>
> 2. As today to add new properties placeholder locations you need to set
>    them with the location attribute using comma as separator and this
>    work just fine but it may result confusing if you need to deal with a
>    number of properties files. In addition you can't set which location
>    is required and which may be missing as the option to ignore missing
>    location is global so I've enhanced the propertyPlaceholder tag in a
>    way you can add locations as:
>
>    <propertyPlaceholder id="myPropertyPlaceholder">
>
>     <propertiesLocation
>       resolver = "classpath"
>       path     = "com/my/company/something/my-properties-1.properties"
>       optional = "false"/>
>
>     <propertiesLocation
>       resolver = "classpath"
>       path     = "com/my/company/something/my-properties-2.properties"
>       optional = "false"/>
>
>     <propertiesLocation
>       resolver = "file"
>       path     = "${karaf.home}/etc/my-override.properties"
>       optional = "true"/>
>
>    </propertyPlaceholder>
>
>    Note that the attribute resolver and optional are not mandatory and
>    have classpath and false as default value respectivley.
>
>    Of course setting locations via location attribute is still supported
>    and it has been enhanced to support additional attributes, i.e.:
>
>    <propertyPlaceholder
>        id="myPropertyPlaceholder"
>        location="file:${karaf.home}/etc/my.properties;optional=true"/>
>
>    Note that the locations defined by the propertiesLocation tag are
>    added to those defined in location attribute.
>
>
> Any objection/suggestion on such implementation ?
>
>
> Regards,
> Luca
>
> ---
> Luca Burgazzoli



-- 
Claus Ibsen
-----------------
http://davsclaus.com @davsclaus
Camel in Action 2: https://www.manning.com/ibsen2

AW: camel-properties enhancements

Posted by "Walzer, Thomas" <th...@integratix.net>.
Hi Luca,

sounds good to me.
I use them a lot but only basic stuff. So, I never ran into your issues.
Just make sure to update the docs. This is tough stuff without examples (yours are good).

Cheers, Thomas.


-----Ursprüngliche Nachricht-----
Von: Luca Burgazzoli [mailto:lburgazzoli@gmail.com] 
Gesendet: Donnerstag, 3. November 2016 13:30
An: dev@camel.apache.org
Betreff: camel-properties enhancements

Hi everyone,

I've been working on a blueprint based applications for soem weeks and I had to deal with a number of properties placeholders so I've used camel-properties and I found some issues/limitation for which I've raised the following JIRA:

1. CAMEL-10352: Optionally delegate to Aries PropertyEvaluator services
   in BlueprintPropertiesParser
2. CAMEL-10393: Add an option to disable using default value if a
   property does not exists
3. CAMEL-10417: Support adding location using child nodes of
   propertyPlaceholder element
4. CAMEL-10419: Allow to individually set whether to silently ignore a
   missing location


CAMEL-10352 and CAMEL-10393 have already been merged and I've just completed the implementation of CAMEL-10417 and CAMEL-10419 which you can find in my fork:

    https://github.com/lburgazzoli/apache-camel/tree/camel-properties


Before merge it I'd like to have your opinion as there are some small changes about the XML configuration I'm going to highlight here:

1. As today, you can customize the property placeholders with the tag
   propertyPlaceholder where the attribute location is mandatory and
   that is fine untill you just want to register your own function in
   blueprint which lead to something like that:

   <propertyPlaceholder
     id="myPropertyPlaceholder"
     location="none"
     ignoreMissingLocation="true">

    <propertiesFunction ref="beerFunction"/>

   </propertyPlaceholder>

   So you may think that you have no locations set but that is not true
   because by default camel-blueprint detects OSGi blueprint property
   placeholders services and add them to the mix. Of course you can
   disable such behavior but I found this a little bit confusing so I
   made it not more mandatory (in fact that is the same behavior you'd
   have if you define a PropertiesComponent bean instead of using the
   propertyPlaceholder tag) and now you can now write it as:

   <propertyPlaceholder id="myPropertyPlaceholder">
    <propertiesFunction ref="beerFunction"/>
   </propertyPlaceholder>

2. As today to add new properties placeholder locations you need to set
   them with the location attribute using comma as separator and this
   work just fine but it may result confusing if you need to deal with a
   number of properties files. In addition you can't set which location
   is required and which may be missing as the option to ignore missing
   location is global so I've enhanced the propertyPlaceholder tag in a
   way you can add locations as:

   <propertyPlaceholder id="myPropertyPlaceholder">

    <propertiesLocation
      resolver = "classpath"
      path     = "com/my/company/something/my-properties-1.properties"
      optional = "false"/>

    <propertiesLocation
      resolver = "classpath"
      path     = "com/my/company/something/my-properties-2.properties"
      optional = "false"/>

    <propertiesLocation
      resolver = "file"
      path     = "${karaf.home}/etc/my-override.properties"
      optional = "true"/>

   </propertyPlaceholder>

   Note that the attribute resolver and optional are not mandatory and
   have classpath and false as default value respectivley.

   Of course setting locations via location attribute is still supported
   and it has been enhanced to support additional attributes, i.e.:

   <propertyPlaceholder
       id="myPropertyPlaceholder"
       location="file:${karaf.home}/etc/my.properties;optional=true"/>

   Note that the locations defined by the propertiesLocation tag are
   added to those defined in location attribute.


Any objection/suggestion on such implementation ?


Regards,
Luca

---
Luca Burgazzoli