No Anatole, I DO get it, but I really think it is a bad idea. Because it adds
way too much complexity or a very limited benefit.
Think about it in an analogy to the ExpressionLanguage ELResolver chain. Of
course this is a sorted lookup chain. And this list is fixed!
And at runtime you cannot change the order and the user also does not care!
All he cares is that #{user.name} does the right thing. He does not have to
express an 'evaluator' and the chain ordering for each and every EL invocation.
It just does not make any sense from a users perspective.
LieGrue,
strub
On Saturday, 27 December 2014, 14:17, Anatole Tresch <[email protected]> wrote:
>
>
>Hi Mark
>
>
>2014-12-27 12:56 GMT+01:00 Mark Struberg <[email protected]>:
>
>> The mechanism is clumsy and implies
>>> constraints that are already known as of now not matching all use cases.
>>
>>Tell me some limitations. Never had one. So just enlist them here and now.
>>
>And I am working since decades as well in the industry. I will not argue
>about use cases. I gave you same examples. You have the stand my opinion,
>unless you feel your opinion counts more than mine.
>
>> On top of it the priority leaks into the PropertySource API
>>
>>
>>Because it IS part of the PropertySource!
>>
>
>But it shoud not. I want to have my property sources and I want to combine
>them they way I want it. I want the concern of assembly being separated from
>the source itself.
>It is like you write a Java program like this:
>
>
>2: {
>4: }
>
>3: System.out.println();
>1: for(int i=0;i<10;i11)
>
>
>
>Shows pretty much the nonsense of your argumentation. For priorizing the
>loading of components in CDI priorities are great and sufficient, here they
>are not.
>
>
>> Finally functions is the
>>
>>> modern way of modelling such an operation.
>>
>>If you have a hammer...
>>I'm not interested in style if it doesn't add any real benefit.
>>
>>
>If the hammer is more elegant and powerful but still easy than you outstyled
>solution, let it be a hammer!
>
>>> different or
>>
>>> partial overridings (common in complex environments)
>>
>>Never came across this need and I did very complex projects. It's always a
>>trade off between an easy straight forward algorigthm which are easy to
>>understand but sometimes you have to bend em a bit or program your own
>>(PropertySource). The other option is to have hugely complex base mechanism
>>which noone can use in practice because it is 'too flexible' - means not
>>clear and straight enough.
>>
>>
>>> you will never get one solution, which a special type of
>>
>>> overridings that matches all users.
>>Oh sure we do. By having the ConfigSource define their ordinal themselves and
>>it being really easy for a programmer to add own ConfigSources we have all of
>>that!
>>
>>
>>
>>> A solution should NEVER constraint users in doing the stuff
>>> they want!*
>>
>>Having the sorting via Ordinal doesn't impose any restriction on the user.
>>Because he can easily overwrite those values.
>>We are talking about a simple straight forward config mechanism and not about
>>alien rocket science and time travelling.
>>
>>
>>>You are not on green field here!
>>
>>
>>Oh boy, we are! We just need to fulfil user needs, that's all.
>I am not a boy. I am an adult with 44 years on track.... !
>And BTW you seem to have lost every kind of reality contact. Do you really
>think companies will change their internal systems completely because just a
>few guys think they know
>how the world is rouling...? NO!
>
>>
>>> *Of course not! (despite the fact that is trivial for the ones used the
>>> functional style of Java 8).
>>Of course I know Map#merge, but what do you use it for? To me it seems like
>>an overkill.
>Seems that your mindis still stick on Java 7.,,,
>
>> You can still provide a singleton with
>>> constants, where you*
>>> *provide the most common combinations, see AggregationPolicy in my the
>>> current tree.*
>>
>>Again: I don't see the benefit. If I'm in an EAR and like to get my
>>"documentarchive.endpoint.url" then WHY would I like to manually change the
>>aggregation? Makes no sense to me. And this increases the complexity quite
>>impressively.
>>
>
>
>Perhaps one day you realize that we are talking about a general configuration
>soultion. EE is a sepcial case, not the other way round. It is NOT like
>Deltaspike, which benefits the mechanism provided by CDI. It is not and if it
>will, it gets Deltaspike 2, which is useless. There is already one, which for
>its purposes on this level, I agree, works well. But for a general solution it
>lacks so much on functionality-
>
>
>I personally really think you still do not get the difference! It drives me
>crazy.
>
>LieGrue,
>>strub
>>
>>
>>
>>
>>> On Saturday, 27 December 2014, 12:28, Anatole Tresch <[email protected]>
>>> wrote:
>>> > *See inline...*
>>>
>>> 2014-12-27 11:42 GMT+01:00 Mark Struberg <[email protected]>:
>>>
>>>> Hi!
>>>>
>>>> 1.1)
>>>>
>>>> I think we agree that having a PropertySource/ConfigSource SPI with MANY
>>>> implementations is the way to go?
>>>> Any objections?
>>>>
>>> *+1 The way to go.*
>>>
>>>
>>> 1.2)
>>>>
>>>> Where should it belong to? Is it an API or rather an SPI?
>>>> I think it's more the later. A end user just likes to get the
>>> 'final'
>>>> configured values and does NOT deal with the PropertySources himself. It
>>>> is
>>>> really just for extending the system -> SPI.
>>>>
>>> *+1 for PropertySource being an SPI. Configuration must be the API.*
>>>
>>>
>>> 1.3)
>>>> Merging.
>>>> Option (1.3.a) Do we like to do 'implicit' merging (aka the
>>> ordinal
>>>> stuff).
>>>>
>>> *It's not a question of taste. The mechanism is clumsy and implies
>>> constraints that are already known as of now not matching all use cases. On
>>> top of it the priority leaks into the PropertySoiurce API (as an additional
>>> method, which is a very ugly mix of concerns), Finally functions is the
>>> modern way of modelling such an operation.*
>>>
>>>
>>>> Option (1.3.b) Or do we like 'explicit' (the merge function). What
>>> benefit
>>>> does this add in practice?
>>>>
>>>
>>> *See above and as outlined multiple times. Adding additional functionality
>>> for audit (e.g. logging of the configuration overriding), different or
>>> partial overridings (common in complex environments). Please stop
>>> discussion on this priority thing, it's simply not enough! By the way the
>>> priority thing can still be implemented, when the rest of the design is
>>> done in a modular way. My proposed solution gave you the abtrsaction of a
>>> ConfigProvider BTW, where you could do this easily, but also the other
>>> stuff. What you do depends on the use case, and to some extent your
>>> personal taste. A solution should NEVER constraint users in doing the stuff
>>> they want!*
>>>
>>> Ad 1.3.a 'explicit' merging: This is basically the DeltaSpike mode: EACH
>>>> ConfigSource (PropertySource) has an ordinal which it can set itself. The
>>>> higher the configuration ordinal of the ConfigSource, the more important
>>>> it
>>>> is and it will override values from ConfigSources with lower ordinal.
>>>>
>>>> That way it is possible to have a kind of 'default configuration'
>>> e.g. in
>>>> a property file inside your project and later overwrite it via -Dxxx=yyy,
>>>> JNDI, or some container provided MyCountainerAdminConfigSource etc later.
>>>>
>>> *No Mark. The fact of having a default configuration does not interconnect
>>> how this is evaluated and composed. You are wrong! And on top, when I look
>>> at your ideas: you will never get one solution, which a special type of
>>> overridings that matches all users. You have to provide building blocks
>>> (one more) that helps the users (companies) to model their functionality
>>> with it. You are not on green field here!*
>>>
>>> Ad 1.3.b 'implicit' merging: Well, actually I don't got this. There
>>> was
>>>> merge(String key, PropertySource s1, s2), but that would mean that every
>>>> user needs to deal with that himself? Could you please elaborate on that
>>>> option? I didn't get it..
>>>
>>> *Of course not! (despite the fact that is trivial for the ones used the
>>> functional style of Java 8). You can still provide a singleton with
>>> constants, where you*
>>> *provide the most common combinations, see AggregationPolicy in my the
>>> current tree.*
>>>
>>> *-Anatole*
>>>
>>>
>>>>
>>>>
>>>
>>>> LieGrue,
>>>> strub
>>>>
>>>
>>>
>>>
>>> --
>>> *Anatole Tresch*
>>> Java Engineer & Architect, JSR Spec Lead
>>> Glärnischweg 10
>>> CH - 8620 Wetzikon
>>>
>>> *Switzerland, Europe Zurich, GMT+1*
>>> *Twitter: @atsticks*
>>> *Blogs: **http://javaremarkables.blogspot.ch/
>>> <http://javaremarkables.blogspot.ch/>*
>>>
>>> *Google: atsticksMobile +41-76 344 62 79*
>>
>>>
>>
>
>
>
>
>--
>
>Anatole Tresch
>Java Engineer & Architect, JSR Spec Lead
>Glärnischweg 10
>CH - 8620 Wetzikon
>
>
>Switzerland, Europe Zurich, GMT+1
>Twitter: @atsticks
>Blogs: http://javaremarkables.blogspot.ch/
>Google: atsticks
>Mobile +41-76 344 62 79
>
>