More succinctly:
parent.batch.cfg

children
parent.batch.dev.cfg
parent.batch.test.cfg
parent.batch.production.cfg

childeren
com.my.batch.transaction.cfg
com.my.batch.accountupdates.cfg


Would result in these files in the configuration bundle:

com.my.batch.transaction.dev.cfg
com.my.batch.accountupdates.dev.cfg

test and dev.

The features file would then be:

 <feature name="dev.someproject" version="${project.version}">


    <configfile finalname="/etc/com.my.batch.transactions.cfg"
 override="true">mvn:com.someproject/config/${project.
version}/cfg/com.my.batch.transactions.dev</configfile>
  <configfile finalname="/etc/com.my.batch.accountupdates.cfg"
override="true">mvn:com.someproject/config/${project.
version}/cfg/com.my.batch.accountupdates.dev</configfile>
...then call the feature to install the bundles...

I'd then have a compact way of specify shared properties in parents,
compiled into bundle and then installed via feature.

On Fri, Jul 8, 2016 at 9:22 AM, Brad Johnson <[email protected]>
wrote:

> After getting into these discussions I started thinking that perhaps I'd
> move all the configuration files into one bundle and install them from
> features file that way.  I could have dev/test/prod cfg files in that same
> bundle.
>
> Using a combination of filtered resources and some other mechanics then I
> can perhaps come up with a way so that
>
> com.my.batch.transaction.cfg
> com.my.batch.accountupdates.cfg
>
> have a com.my.batch.parent.cfg and during Maven build it is read into and
> made part of both the transaction and account updates.cfg files.  Those are
> then put into the configuration bundle. When that configuration bundle is
> installed the PIDs/properties match the bundles looking for them but
> contain the common information as already been flattened into them.
>
> That configuration bundle could also have test/dev/production cfg files
> and the features file could permit installing test, dev or production the
> only difference being which set of configuration files they installed
> before installing the bundles themselves.
>
>
> On Fri, Jul 8, 2016 at 9:12 AM, Brad Johnson <[email protected]
> > wrote:
>
>> Here's a small example.  The two batch processes do very different things
>> yet share some common configuration information pertaining to directories,
>> ftp and service endpoints.  That configuration information obviously also
>> varies between dev, test, and production.  This is one small part of the
>> project.  The connector project is already a crosscutting concern that
>> keeps its connection information separated from all the other business
>> processes/services that use it. Some of the properties have queue names
>> (SEDA or JMS) that are shared between bundles and use runtime substitution
>> in Camel.  But duplicating configuration information between the bundles
>> and hand massaging it is error prone and makes refactoring a pain.
>>
>>  <feature name="someproject" version="${project.version}">
>>
>>     <configfile finalname="/etc/com.litle.cfg"
>> override="false">mvn:com.my.connectors/litle/${project.version}/cfg/configuration</configfile>
>>     <configfile finalname="/etc/com.my.batch.transactions.cfg"
>> override="false">mvn:
>> com.my/batch.transactions/${project.version}/cfg/configuration
>> <http://com.my/batch.transactions/$%7Bproject.version%7D/cfg/configuration>
>> </configfile>
>>   <configfile finalname="/etc/com.my.batch.accountupdates.cfg"
>> override="false">mvn:
>> com.my/batch.accountupdates/${project.version}/cfg/configuration
>> <http://com.my/batch.accountupdates/$%7Bproject.version%7D/cfg/configuration>
>> </configfile>
>>     <feature>camel-core</feature>
>>     <feature>camel-blueprint</feature>
>>   snip
>>
>> And some route like:
>>
>> <to
>> uri="{{batch.local.outbox}}?fileExist=Append&amp;fileName=${header.outFile}"
>> />
>>
>> On Fri, Jul 8, 2016 at 8:33 AM, Christian Schneider <
>> [email protected]> wrote:
>>
>>> Can you give some examples of typical config properties that need to be
>>> shared between these bundles. Maybe they lead to an idea for a different
>>> design.
>>>
>>> Christian
>>>
>>> On 08.07.2016 15:09, Brad Johnson wrote:
>>>
>>>> Christian,
>>>>
>>>> Thanks for the feedback.  I'm actually looking for a bit more robust
>>>> solution.  Just the one small project I'm working on now has 12 business
>>>> processes with a number of OSGi services that provide cross-cutting
>>>> concerns.  In this case they are service like credit card authorization,
>>>> refunds, etc.   CXF front ends them with REST/SOAP and I use recipientList
>>>> to route them.  But each of those business processes use OSGi services that
>>>> might call out to banks, PayPal, analytics services, etc.  Keeping these
>>>> nicely segregated in their own bundles makes them very testable for the
>>>> routing, data transformation to/from canonical form, etc.  But
>>>> configuration management is a bit of a pain because of the PID pinning.  I
>>>> use update strategy reload on the bundles so that configurations can be
>>>> changed in different environments.
>>>>
>>>> Until now I've kept my configuration files in each bundle and pop them
>>>> out using the features install mechanism.  But I'm rethinking that based on
>>>> these discussions.  I don't know if the Maven properties plugin would do
>>>> what I'm thinking about but it might be a platform to develop such a
>>>> plugin.  In this case I'd have a separate configuration bundle with my PID
>>>> cfgs in them and N levels of parent cfg files.  The properties would just
>>>> be rolled up and written out into PID specific cfg files.  If I define a
>>>> port or directory in a parent then all the children would inherit or
>>>> override that property.  That would permit the use of profiles for dev,
>>>> test and production as well.  Modifying any of the cfg files and then
>>>> putting that through Jenkins would result in a nice configuration bundle
>>>> that once reinstalled would trigger a reload.  In the end the port or
>>>> directory or endpoint configuration information would be duplicated in each
>>>> cfg but it wouldn't require hand massaging of each cfg to change.
>>>>
>>>>
>>> --
>>> Christian Schneider
>>> http://www.liquid-reality.de
>>>
>>> Open Source Architect
>>> http://www.talend.com
>>>
>>>
>>
>

Reply via email to