> I m fully ok to remove PropertySource from the API

I think we've lost each other. 

Tamaya PropertySource == DeltaSpike ConfigSource basically.
You just cannot remove this without ditching the whole project.

The point is that a USER never operates directly with the ConfigSources. They 
are a hidden detail. IF you manually manage them in your application then you 
end up with exactly your problem - you are doomed and cannot simply enhance 
your system but you really need to rework all the applications.

If you just say ConfigResolver#getPropertyValue("mykey") and rely on the 
ordinal mechanism then you can just add such a FilteringConfigSource as JAR 
without having to touch any of your code. If you did manage/merge/etc your 
PropertySources manually then you are doomed. That's why I don't like that 
approach.



LieGrue,
strub





> On Sunday, 28 December 2014, 12:22, Romain Manni-Bucau 
> <[email protected]> wrote:
> > Would have been the same since the app is PropertySource aware. Can also
> mean we dont have PropertySource in a default impl and then it is true it
> is easy. I m fully ok to remove PropertySource from the API and make it an
> impl detail.
> Le 28 déc. 2014 11:59, "Mark Struberg" <[email protected]> a 
> écrit :
> 
>>  But if you would have had this container wide 'AdminConfigSource' 
> with the
>>  nice gui, or a installation wide DatabaesConfigSource then it would not
>>  have been a problem, right?
>> 
>>  I mean you would have to add this filter to all the 100 apps in the 1 day
>>  as well, right? So it would be the exact same effort to just add 1
>>  FilteringConfigSource (hacky but works) with a high priority either, right?
>>  That would be just adding a single jar to all your lib folders...
>> 
>> 
>>  Sometimes we tend to add new mechanisms out of blindness. But the problem
>>  often can be solved easily with existing tools - we just often don't 
> see
>>  them. This happens to me as well, but I'm glad to have really brilliant
>>  co-workers which often stop me from doing overly complicated crazy things.
>>  Happens more often than I like it ;)
>> 
>> 
>>  Of course sometimes we really need to add a new mechanism. But this should
>>  only be the (almost) last resort if there is no other acceptable way.
>> 
>>  There are just sooo many weirdo cases out there. Of course they are often
>>  needed in production. But for such huge installations you will barely find
>>  2 companies with the exact same situation...
>> 
>> 
>> 
>>  Maybe I'm alone here but my goal is to make the 90-95% 
> 'standard' use
>>  cases as easy as possible out of the box. And _additionally_ have an SPI
>>  layer which is very deep down to the metal and as flexible as possible to
>>  allow solving more complex edge cases.
>> 
>>  And I honestly don't care if a programmer does need to write 50 lines 
> more
>>  for such a seldom case. It's just impossible to solve every problem out 
> of
>>  the box. That would blow up Tamaya 10x times (or even more). And that would
>>  make it unfriendly (if not even 'unusable') for the 95% standard 
> cases...
>> 
>> 
>>  LieGrue,
>>  strub
>> 
>> 
>> 
>> 
>>  > On Sunday, 28 December 2014, 11:41, Romain Manni-Bucau <
>>  [email protected]> wrote:
>>  > >T hat is exactly the difference between real life and theory. You 
> cant
>>  ask
>>  > to change 100 apps in 1 day...you have to live with
>>  >
>>  > Le 28 déc. 2014 10:33, "Mark Struberg" 
> <[email protected]> a
>>  > écrit :
>>  >
>>  >>  I don't get your samples Romain.
>>  >>
>>  >>  In v1 you have configured keys A,B,C
>>  >>  In v2 you have D. So what?
>>  >>
>>  >>  Just remove A,B,C and use D instead. That's exactly the same 
> like
>>  > changing
>>  >>  a table structure.
>>  >>
>>  >>  Doing some 'translation' just because the ops guys 
> don't want
>>  > to change
>>  >>  configuration is a total dead end and will end up being a 
> maintenance
>>  >>  nightmare in v3++. Your filter mechanism is just an utter ugly 
> hack
>>  and if
>>  >>  I would be the manager of this project then I'd call you 
> names ;)
>>  >>
>>  >>  That's like arguing that maven is not usable because it makes 
> scripting
>>  >>  hard. This is a FEATURE and not a bug!. People should not script
>>  builds! If
>>  >>  they like to do complicated stuff then it's very easy to 
> write plugins.
>>  > In
>>  >>  our case it's very easy to write ConfigSources.
>>  >>
>>  >>
>>  >>  Remember the old saying "dirty remains, while quick is long
>>  > forgotten"
>>  >>
>>  >>
>>  >>  > Some config can conflict
>>  >>
>>  >>  No. That's the same like with JNDI, JMX etc. Just tell them 
> to use
>>  > their
>>  >>  own namespaces and you are done.
>>  >>  That's like saying Java is not good because if I have 
> multiple JARs
>>  > which
>>  >>  contain the same ClassName then it doesn't work. JUST USE 
> NAMESPACES.
>>  > You
>>  >>  don't need any explicit merging.
>>  >>
>>  >>
>>  >>
>>  >>  Oki, that was 2 arguments and both of them are actually 
> non-problems.
>>  >>
>>  >>  Cmon folks, give me more use cases and examples. I'm ready to 
> solve
>>  > them ;)
>>  >>
>>  >>
>>  >>  LieGrue,
>>  >>  strub
>>  >>
>>  >>  On Sunday, 28 December 2014, 9:54, Romain Manni-Bucau <
>>  >>  [email protected]> wrote:
>>  >>  >Well more I read more I think there is a real need but we are 
> all
>>  wrong
>>  >>  so instead of fighting please help us finding a solution.
>>  >>  >@Mark: priorities or ordinal are great while you completely 
> own the
>>  app
>>  >>  and its config + it is a single technical version. I guess you 
> know it
>>  is
>>  >>  not always (rarely?) The case in medium and big projects.
>>  >>  >A sample can be: v1 you configure an url with host, port 
> propertkes
>>  and
>>  >>  in v2 it is directly the url cause you added a path. Can be the 
> same
>>  for
>>  >>  datasource and business config etc...
>>  >>  >What I did in practise was to use a filter mecanism but it 
> was an ugly
>>  >>  hack.
>>  >>  >For such cases you can maybe use PropertySource translators 
> or things
>>  >>  like that to ensure the config is in the right format and then 
> merge
>>  with
>>  >>  ordinal.
>>  >>  >Now let take the case where you package together several sub 
> apps
>>  > coming
>>  >>  with their config. How do you do? Some config can conflict and 
> the
>>  >>  selection is not ordinal based - let me guess it will be the 
> same.
>>  Best is
>>  >>  to have both property sources and merge them into a single one. 
> Kind of
>>  >>  Properties merge(Properties current, PropertySource next).
>>  >>  >I am not happy with these solutions but the needs are here 
> and not
>>  >>  something thought but really met - even if I dont have your
>>  experiences.
>>  >>  >Point is we cant assume config will be perfect so let our 
> future users
>>  >>  make errors and be able to fix it easily.
>>  >>  >Le 27 déc. 2014 14:50, "Mark Struberg"
>>  > <[email protected]> a écrit :
>>  >>  >>
>>  >>  >> 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
>>  >>  >> >
>>  >>  >> >
>>  >>  >
>>  >>  >
>>  >>  >
>>  >>
>>  >
>> 
>

Reply via email to