Well this is not true since cfg4j contradicts spring on some coercing aspects but main point - cause we speak of all but the thread topic now - is that we need a way to get an aggregated entries accessor, this is Configuration. I think it is what is important for a core. Then other features will likely be built on top of provided by existing frameworks.
Romain Manni-Bucau @rmannibucau <https://twitter.com/rmannibucau> | Blog <https://blog-rmannibucau.rhcloud.com> | Old Wordpress Blog <http://rmannibucau.wordpress.com> | Github <https://github.com/rmannibucau> | LinkedIn <https://www.linkedin.com/in/rmannibucau> | Tomitriber <http://www.tomitribe.com> | JavaEE Factory <https://javaeefactory-rmannibucau.rhcloud.com> 2016-07-19 15:01 GMT+02:00 Werner Keil <[email protected]>: > Yes if you try to "slim the API down to the extreme" then it seems better > to either reuse Properties or skip it completely. > In DS Configuration is just a tagging interface, but has no method > signature. > The other types like *Provider or *Source match on a very high level what > both Spring Config or Cfg4J do. Spring Config probably works with Spring > only but Cfg4J works with Spring, Guice and other DI containers, so it > likely has a CDI option, too. > > > With a skeleton of what more mature and widely used Commons Config provides > plus a few aspects from DS Config or Cfg4J, Tamaya is at risk of simply > getting lost "in between" those. > > Werner > > > On Tue, Jul 19, 2016 at 2:46 PM, Romain Manni-Bucau <[email protected] > > > wrote: > > > And TomEE has SuperProperties subclass...not sure where you go with it. I > > suspect you think to the config as Properties which is fine but not what > > DS* family solves as issue (and also why it exists alongs with > > [configuration] which is great for your use case and not opposed or a > > concurrent to DS*). > > > > > > Romain Manni-Bucau > > @rmannibucau <https://twitter.com/rmannibucau> | Blog > > <https://blog-rmannibucau.rhcloud.com> | Old Wordpress Blog > > <http://rmannibucau.wordpress.com> | Github < > > https://github.com/rmannibucau> | > > LinkedIn <https://www.linkedin.com/in/rmannibucau> | Tomitriber > > <http://www.tomitribe.com> | JavaEE Factory > > <https://javaeefactory-rmannibucau.rhcloud.com> > > > > 2016-07-19 14:44 GMT+02:00 Werner Keil <[email protected]>: > > > > > Should be ... left to users, applications or extensions. > > > > > > A Configuration interface with pretty much nothing but get(String) > comes > > > back to a slightly "fancier" Properties class but that's about it. > > > There are tons of Properties extensions, e.g. > > > > > > > > > https://docs.jboss.org/jbossas/javadoc/4.0.4/common/org/jboss/util/property/PropertyMap.html > > > has Red Hat EC alternate Scott Stark among its authors;-) > > > > > > > > > > > > Werner > > > > > > > > > On Tue, Jul 19, 2016 at 2:34 PM, Werner Keil <[email protected]> > > > wrote: > > > > > > > If get(String) only returns a string, how do you imagine it should be > > > used > > > > by real apps. > > > > > > > > Configuration config = ... > > > > String minAsString = config.get("min.value"); > > > > int minValue = Integer.parseInt(minAsString); > > > > String maxAsString = config.get("max.value"); > > > > int maxValue = Integer.parseInt(maxAsString); > > > > ... > > > > > > > > If the rest is "sugar" as you say that boilerplate code is left to > > > > > > > > Archaius, btw. using Apache Commons Config in production already on > > > > https://github.com/Netflix/archaius has the top most feature > > > > > > > > - Dynamic, Typed Properties > > > > > > > > If the configuration was so crippled, then why not just scrap it > along > > > the > > > > lines of > > > > > > > > // Change this interface to whatever you want > > > > public interface SampleConfig { > > > > Integer birthYear(); > > > > List<String> friends(); > > > > URL homepage(); > > > > Map<String, Character> grades(); > > > > } > > > > > > > > public static void main(String... args) { > > > > ConfigurationSource source = new GitConfigurationSourceBuilder() > > > > .withRepositoryURI(" > > > https://github.com/cfg4j/cfg4j-git-sample-config.git") > > > > .build(); > > > > > > > > ConfigurationProvider provider = new > ConfigurationProviderBuilder() > > > > .withConfigurationSource(source) > > > > .build(); > > > > > > > > SampleConfig config = configurationProvider.bind("reksio", > > > SampleConfig.class); > > > > > > > > // Use it! > > > > System.out.println(config.homepage()); > > > > } > > > > > > > > That pretty much goes along the Option Pattern also found in .NET > > > > > > > > > > > > > > https://docs.asp.net/en/latest/fundamentals/configuration.html#options-config-objects > > > > > > > > Btw. believe it or not, a lot of that is also under Apache 2 now > coming > > > > from Microsoft;-) > > > > https://github.com/aspnet/Options > > > > > > > > Werner > > > > > > > > > > > > On Tue, Jul 19, 2016 at 1:57 PM, Mark Struberg > > <[email protected] > > > > > > > > wrote: > > > > > > > >> Thanks Anatole, It’s a start. > > > >> > > > >> But this only covers the consumer part, or did I miss something? > > > >> What about the SPI part? > > > >> > > > >> Do you think we can live without a way to declare where the > > > configuration > > > >> comes from? > > > >> Would this be totally up to the container vendor? > > > >> How to provide default configuration inside e.g. a jar? > > > >> > > > >> @Romain: yes, I also think get(String) is enough, rest is probably > > > sugar. > > > >> The getProperties() actually makes mostly sense on the ConfigSources > > > >> (e.g. for an admin/control page) but probably not on the final > > > >> Configuration instance. > > > >> > > > >> txs and LieGrue, > > > >> strub > > > >> > > > >> > > > >> > Am 19.07.2016 um 13:38 schrieb Romain Manni-Bucau < > > > >> [email protected]>: > > > >> > > > > >> > Ok for ConfigException, ConfigProvider with some rework (see end > of > > > the > > > >> > mail) is ok however I think that: > > > >> > > > > >> > - Configuration (as a core API) shouldn't get more than > get(String). > > > The > > > >> > "or default" is sugar we'll add on top of that anyway and > > > >> getProperties() > > > >> > implies you can list all entries which can not be possible so I > > > >> wouldn't do > > > >> > it in the main core part (DS did it for historical reasons and I > > think > > > >> > today it is not the best it could have done) > > > >> > - I tend to think Filter and Source can be part of the core cause > > > >> otherwise > > > >> > you have an entry supplier without any way to provide values. > > > >> > > > > >> > > > > >> > Then about provider: what about just applying bean validation > model > > > >> blindy > > > >> > first (provider to load a factory to create through a builder API > or > > > >> > through default loading mecanism an instance - of Configuration > for > > > >> us)? I > > > >> > don't think we can get rid of the provider layer cause it will > > likely > > > >> use > > > >> > ServiceLoader - even in OSGi since it will be part of the impl so > > > fine - > > > >> > and the provider will then use what is adapted to its env to load > > > other > > > >> SPI > > > >> > like sources/filters. > > > >> > > > > >> > So it would make a core of (feel free to change name): > > > >> > > > > >> > - Configuration { > > > >> > String get(String); > > > >> > static Configuration buildDefaultConfiguration() { > > > >> > > > > >> > > > > > > byProvider(...loadDefault()...).withSources(...loadDefaults()...).withDeciphers(...loadDefaults()...).build(); > > > >> > } > > > >> > static BootConfig byProvider(String); > > > >> > } > > > >> > - ConfigurationProvider { > > > >> > Configuration build(BootConfig) > > > >> > } > > > >> > - BootConfig { > > > >> > withSources(sources...); > > > >> > withDeciphers(filters...); > > > >> > Configuration build(); > > > >> > } > > > >> > - ConfigurationSource { String get(String); String name(); } // > but > > > >> don't > > > >> > impl Configuration for future > > > >> > - ConfigurationDecipher { String decipher(String); String name(); > } > > > >> > > > > >> > > > > >> > wdyt? > > > >> > > > > >> > > > > >> > > > > >> > Romain Manni-Bucau > > > >> > @rmannibucau <https://twitter.com/rmannibucau> | Blog > > > >> > <https://blog-rmannibucau.rhcloud.com> | Old Wordpress Blog > > > >> > <http://rmannibucau.wordpress.com> | Github < > > > >> https://github.com/rmannibucau> | > > > >> > LinkedIn <https://www.linkedin.com/in/rmannibucau> | Tomitriber > > > >> > <http://www.tomitribe.com> | JavaEE Factory > > > >> > <https://javaeefactory-rmannibucau.rhcloud.com> > > > >> > > > > >> > 2016-07-19 13:18 GMT+02:00 Werner Keil <[email protected]>: > > > >> > > > > >> >> Sounds like a plan. > > > >> >> > > > >> >> Not sure, if a "general" top level configuration type specialized > > for > > > >> >> String allows extending it in another model without some > > > restrictions, > > > >> but > > > >> >> if the java.util.Properties like get(String) is of minimalistic > > use, > > > >> e.g. > > > >> >> where it's backed by "good old Properties" anyway why not. > > Extending > > > >> it it > > > >> >> with a flexible type-system would still be possible. > > > >> >> > > > >> >> Supplier<String> sounds Java SE 8, so in an API that works both > in > > > >> Java SE > > > >> >> 6/7 or Java ME 8 that cannot exist. > > > >> >> > > > >> >> If a type like ConfigurationProvider is optional, then it would > be > > > >> better > > > >> >> to put it to another package. Makes building smaller modules > easier > > > >> IMHO, > > > >> >> otherwise you probably have to use filtering and "Maven magic" to > > > >> ensure > > > >> >> only the mandatory or core types are packaged for a "minimal" > > profile > > > >> or > > > >> >> situation while everything is built for a "full" scope. > > > >> >> > > > >> >> Werner > > > >> >> > > > >> >> > > > >> >> > > > >> >> On Tue, Jul 19, 2016 at 12:39 PM, Anatole Tresch < > > [email protected] > > > > > > > >> >> wrote: > > > >> >> > > > >> >>> For me a point is that I would like to see the API being > complete, > > > >> >> meaning > > > >> >>> all I need is the API to get a Configuration. Using Java 8 I > don't > > > >> need > > > >> >> it, > > > >> >>> so I can provide the ConfigurationProvider for Java 7 only. > > > >> >> ConfigOperator > > > >> >>> and -Query are only there for Java 7, they easily vould be > removed > > > >> from > > > >> >> the > > > >> >>> API as well. > > > >> >>> But talking about minimal: a*lso the idea of organizing > > > configuration > > > >> as > > > >> >>> property sources is already a design decision the API should not > > > care > > > >> >> about > > > >> >>> IMO*. So being really minimal, we need: > > > >> >>> > > > >> >>> - Configuration (interface) > > > >> >>> - ConfigException (exception) > > > >> >>> - ConfigurationProvider (optional) > > > >> >>> > > > >> >>> The key here is Configuration. We agree IMO to provide *single* > > key > > > >> >> access > > > >> >>> for String values. IMO people also expect access to non-String > > > values, > > > >> >> but > > > >> >>> this must not be part of the core Configuration interface since > it > > > >> could > > > >> >>> easily be added as a facade functionality for example, so it can > > be > > > >> >>> realized as an extension module! > > > >> >>> Accessing a Map<String,String> of properties IMO, and also from > > user > > > >> >>> feedback, is a wanted functionality. In most cases also the > result > > > >> can be > > > >> >>> well calculated and further functionality added on top that most > > > >> people > > > >> >>> expect from a Configuration solution. This is also what we have > > done > > > >> in > > > >> >> the > > > >> >>> current source tree (see tamaya-functions module). > > > >> >>> > > > >> >>> So my proposal would be: > > > >> >>> > > > >> >>> - reduce the API to these 3 artifacts (including > ConfigProvider > > - > > > it > > > >> >>> doesnt hurt and makes migration from Java 7 to 8 much easier). > > > >> >>> - Remove type support from Configuration, it can be added in a > > > >> >> separate > > > >> >>> module > > > >> >>> , which is not too much change needed). > > > >> >>> . > > > >> >>> - discuss how the ConfigurationProvider loads the > Configuration > > > >> >>> instance to be returned (service loader, OSGI service). > > > >> >>> - move all the rest of artifacts into separate modules. This > > also > > > >> >>> includes the DS inspired parts of PropertySource handling > > > currently > > > >> in > > > >> >>> the > > > >> >>> core module. > > > >> >>> > > > >> >>> > > > >> >>> People already using deltaspike can easily plugin in the DS > logic > > > >> without > > > >> >>> having to rewrite anything and start using the new API. In CDI > > > >> >>> Configuration can be determined from using the CDI context (os > > > >> something > > > >> >>> else in stages, where CDI is not yet loaded). Same story for > > Spring > > > >> and > > > >> >>> more. > > > >> >>> > > > >> >>> This is basically what I proposed in the* tamaya-next branch*: > So > > > our > > > >> >>> complete core API fits into half a page! > > > >> >>> > > > >> >>> public interface Configuration { > > > >> >>> String get(String key); > > > >> >>> default String getOrDefault(String key, final String > > > >> defaultValue){...} > > > >> >>> default String getOrDefault(String key, Supplier<String> > > > >> >>> defaultValueSupplier){...} > > > >> >>> Map<String,String> getProperties(); > > > >> >>> } > > > >> >>> public final class ConfigurationProvider { > > > >> >>> [...] > > > >> >>> Configuration getConfiguration(){ > > > >> >>> // tbd > > > >> >>> } > > > >> >>> } > > > >> >>> public class ConfigException extends RuntimeException{ > > > >> >>> private static final long serialVersionUID = > > > -5886094818057522680L; > > > >> >>> public ConfigException(String message){ > > > >> >>> super(message); > > > >> >>> } > > > >> >>> public ConfigException(String message, Throwable t){ > > > >> >>> super(message, t); > > > >> >>> } > > > >> >>> } > > > >> >>> > > > >> >>> J Anatole > > > >> >>> > > > >> >>> > > > >> >>> > > > >> >>> > > > >> >>> > > > >> >>> > > > >> >>> > > > >> >>> 2016-07-19 9:08 GMT+02:00 Werner Keil <[email protected]>: > > > >> >>> > > > >> >>>> tamaya-api-0.2-incubating.jar is just 30 kb right now. > > > >> >>>> While the exact set of methods is questionable in the "design > > > study" > > > >> >>> (just > > > >> >>>> leave it as that and thanks to EC members like myself or Ben > > > there's > > > >> no > > > >> >>>> further damage done by the way it was presented, we're not > > talking > > > >> >> about > > > >> >>>> JCP aspects here now ;-) a minimalistic approach may leave > > > >> >> Configuration > > > >> >>>> and ConfigException pretty much the only core elements. Not > even > > > sure > > > >> >>> about > > > >> >>>> the *Provider. As the name suggests it could be in an SPI, take > > > >> JCache > > > >> >>>> (where only its Caching static facade mixes the two and makes > > clean > > > >> >>>> separation impossible, CacheProvider is in an SPI package > though) > > > >> >>>> > > > >> >>>> *Operator and *Query feel a bit redundant and both can be seen > as > > > >> >>> optional. > > > >> >>>> Especially for implementations based on Java 8 one could > probably > > > >> stick > > > >> >>> to > > > >> >>>> Function<Configuration, Configuration> or similar to accomplish > > > that. > > > >> >> If > > > >> >>>> Tamaya needs a Java 7 compatibility layer (it'll take years > > before > > > >> >>>> especially the Enterprise sector will fully adopt even Java SE > > and > > > EE > > > >> >> 7, > > > >> >>> I > > > >> >>>> work there all the time and see what's used;-) then it could be > > in > > > a > > > >> >>>> different package/jar, but doesn't have to be in a core API. > > > >> >>>> > > > >> >>>> Cheers, > > > >> >>>> Werner > > > >> >>>> > > > >> >>>> > > > >> >>>> On Tue, Jul 19, 2016 at 3:57 AM, Mark Struberg > > > >> >> <[email protected] > > > >> >>>> > > > >> >>>> wrote: > > > >> >>>> > > > >> >>>>> Then see it as the smallest possible core. It has only 30 > kByte > > > >> >> (api+RI > > > >> >>>>> jars). > > > >> >>>>> It even works on ME or Android. > > > >> >>>>> > > > >> >>>>> LieGrue, > > > >> >>>>> Strub > > > >> >>>>> > > > >> >>>>>> Am 19.07.2016 um 01:00 schrieb Werner Keil < > > > [email protected] > > > >> >>> : > > > >> >>>>>> > > > >> >>>>>> We're not talking about the API when it comes to Spring, OSGi > > or > > > >> >> even > > > >> >>>> CDI > > > >> >>>>>> support. Same for say a YAML module, etc. > > > >> >>>>>> Those are implementation specific. > > > >> >>>>>> > > > >> >>>>>> The more modular and fine-grained the API (of Tamaya) can > get, > > > the > > > >> >>>>> better. > > > >> >>>>>> > > > >> >>>>>> CDI has to learn that with V2 only, but for relatively new > JSRs > > > or > > > >> >>>> modern > > > >> >>>>>> projects it should be considered right from the start. > > > >> >>>>>> The most basic core API may or may not work even on Java ME > > > >> >> Embedded. > > > >> >>>>>> JSR 363, which has a core of only 4 mandatory core types > plus 3 > > > >> >>>>> exceptions. > > > >> >>>>>> If put in a separate JAR those would only take around 5k. > Fits > > > even > > > >> >>> the > > > >> >>>>>> smallest Java ME device out there. You may not always be able > > to > > > >> >> cut > > > >> >>>>> things > > > >> >>>>>> as small in "Server Land" but getting the idea and trying to > be > > > >> >>> modular > > > >> >>>>>> even before the JDK starts to enforce that with Java 9 is the > > > right > > > >> >>>>>> approach. > > > >> >>>>>> > > > >> >>>>>> > > > >> >>>>>> On Mon, Jul 18, 2016 at 11:13 PM, Romain Manni-Bucau < > > > >> >>>>> [email protected]> > > > >> >>>>>> wrote: > > > >> >>>>>> > > > >> >>>>>>> Le 18 juil. 2016 23:04, "Werner Keil" < > [email protected]> > > a > > > >> >>>> écrit : > > > >> >>>>>>>> > > > >> >>>>>>>> Tamaya already works with e.g. Spring despite Spring > > Framework > > > >> >>>> offering > > > >> >>>>>>>> Config functionality of its own;-) > > > >> >>>>>>>> > > > >> >>>>>>> > > > >> >>>>>>> Yes but libs cant rely on spring config api without bringing > > > back > > > >> >>>> spring > > > >> >>>>>>> core > > > >> >>>>>>> > > > >> >>>>>>>> So as there are other config solutions at Apache like > Commons > > > >> >>> Config, > > > >> >>>>>>>> exclusing CDI because DeltaSpike already uses it sounds > odd. > > > >> >>>>>>>> > > > >> >>>>>>> > > > >> >>>>>>> Commons config has no link afaik since it provides nice low > > > level > > > >> >>> impl > > > >> >>>>> but > > > >> >>>>>>> no good end user api/integration. It is also too opiniated > to > > be > > > >> >>> good > > > >> >>>>> for a > > > >> >>>>>>> spec since it has a lot of core methods making it hard to > > > >> >> integrate > > > >> >>>> with > > > >> >>>>>>> all frameworks without limitations. > > > >> >>>>>>> > > > >> >>>>>>> That is why tamaya core should be minimal IMO. > > > >> >>>>>>> > > > >> >>>>>>>> There are even Apache projects like Tapestry that still > offer > > > >> >> their > > > >> >>>> own > > > >> >>>>>>> DI > > > >> >>>>>>>> mechanism beside a JSR 330/CDI one, so I hope you're not > > > >> >> suggesting > > > >> >>>>>>> Tamaya > > > >> >>>>>>>> should do the same just to "avoid" DeltaSpike?;-O > > > >> >>>>>>>> > > > >> >>>>>>> > > > >> >>>>>>> I'm saying that tamaya core should be light enough to work > > with > > > >> >> any > > > >> >>>>> context > > > >> >>>>>>> impl and never conflict with them, ie not implementing > another > > > >> >>>> context, > > > >> >>>>> ie > > > >> >>>>>>> providing built Config but not store them itself. > > > >> >>>>>>> > > > >> >>>>>>>> > > > >> >>>>>>>> On Mon, Jul 18, 2016 at 10:53 PM, Romain Manni-Bucau < > > > >> >>>>>>> [email protected]> > > > >> >>>>>>>> wrote: > > > >> >>>>>>>> > > > >> >>>>>>>>> Trying to get back on track... > > > >> >>>>>>>>> > > > >> >>>>>>>>> If Tamaya targets CDI it will compete in a useless manner > > with > > > >> >> DS > > > >> >>> or > > > >> >>>>>>> any > > > >> >>>>>>>>> specific config API, if it targets contextuality it will > > with > > > >> >> any > > > >> >>>> IoC, > > > >> >>>>>>> if > > > >> >>>>>>>>> it targets coercing it will as well with one or both of > > > previous > > > >> >>>>>>> points. > > > >> >>>>>>>>> > > > >> >>>>>>>>> So IMO Tamaya API should be as Mark explained about > handling > > > >> >>> sources > > > >> >>>>>>> and > > > >> >>>>>>>>> filters to build on Config which can provide string > access - > > > and > > > >> >>> not > > > >> >>>>>>>>> properties cause it shouldnt be listable by default IMO. > > > >> >>>>>>>>> > > > >> >>>>>>>>> In term of API design I would align it on bval - a factory > > > with > > > >> >> a > > > >> >>>>>>> builder > > > >> >>>>>>>>> or a default loading to get a Config. It is core for me. > > Mark > > > >> >>> likes > > > >> >>>> to > > > >> >>>>>>>>> count classes: factory + config + provider + source + > source > > > >> >>>> provider > > > >> >>>>> + > > > >> >>>>>>>>> filter (we can merge few of them using j8, not sure it is > > good > > > >> >> but > > > >> >>>>>>> would > > > >> >>>>>>>>> work). > > > >> >>>>>>>>> > > > >> >>>>>>>>> Once we agree on that we will have to discuss on top of > > that: > > > >> >>>>>>>>> > > > >> >>>>>>>>> - integrations > > > >> >>>>>>>>> - injections (injection points vs proxy Bean) > > > >> >>>>>>>>> - coercion > > > >> >>>>>>>>> - default impls > > > >> >>>>>>>>> - .... > > > >> >>>>>>>>> > > > >> >>>>>>>>> But making the API small, strong and usable by all is > > > important > > > >> >>> IMHO > > > >> >>>>>>>>> > > > >> >>>>>>>>> Le 18 juil. 2016 22:41, "Werner Keil" < > > [email protected]> > > > a > > > >> >>>> écrit > > > >> >>>>>>> : > > > >> >>>>>>>>> > > > >> >>>>>>>>>> Sorry to dissapoint you, but I was involved at least in > > > Tamaya > > > >> >>>> before > > > >> >>>>>>>>>> Anatole even proposed it. > > > >> >>>>>>>>>> I was nearly asked to give the presentation on what later > > > >> >> became > > > >> >>>>>>> Tamaya > > > >> >>>>>>>>> by > > > >> >>>>>>>>>> Mike Keith when he was stuck in heavy Monsoon rain at > GIDS > > > >> >>> 2011;-) > > > >> >>>>>>>>>> > > > >> >>>>>>>>>> I know what Commons Config, Tamaya or DeltaSpike can be > > used > > > >> >> for. > > > >> >>>> And > > > >> >>>>>>>>>> helped clients who found e.g. DeltaSpike too complex and > > > >> >>> overloaded > > > >> >>>>>>> by > > > >> >>>>>>>>>> contributing to their in-house CDI-based configuration > > > >> >> framework > > > >> >>>>>>>>> "inspired" > > > >> >>>>>>>>>> by it. So Tamaya isn't the only example of API that some > > find > > > >> >>> "too > > > >> >>>>>>>>> much"... > > > >> >>>>>>>>>> > > > >> >>>>>>>>>> Werner > > > >> >>>>>>>>>> > > > >> >>>>>>>>>> > > > >> >>>>>>>>>> On Mon, Jul 18, 2016 at 10:08 PM, Mark Struberg > > > >> >>>>>>>>> <[email protected] > > > >> >>>>>>>>>>> > > > >> >>>>>>>>>> wrote: > > > >> >>>>>>>>>> > > > >> >>>>>>>>>>> It seems you do not yet understand the mechanics behind > > > >> >>> DeltaSpike > > > >> >>>>>>> and > > > >> >>>>>>>>>>> Tamaya. Let me elaborate: Properties (and > > commons-config1&2 > > > as > > > >> >>>> well > > > >> >>>>>>> for > > > >> >>>>>>>>>>> that matter) only handle information from a SINGLE file. > > > >> >>>>>>>>>>> > > > >> >>>>>>>>>>> Whereas the ConfigSource approach abstracts that into an > > > >> >> ordered > > > >> >>>>>>> stack > > > >> >>>>>>>>> of > > > >> >>>>>>>>>>> _multiple_ such 'sources'. And such a > > > >> >>> ConfigSource/PropertySource > > > >> >>>>>>> also > > > >> >>>>>>>>>>> doesn't need to be a single property file. It can be > > > anything > > > >> >>>> which > > > >> >>>>>>>>> gives > > > >> >>>>>>>>>>> access to configuration information. > > > >> >>>>>>>>>>> > > > >> >>>>>>>>>>> So yes, it should imo be as easy as property files - > even > > > >> >>> easier. > > > >> >>>>>>> But > > > >> >>>>>>>>> it > > > >> >>>>>>>>>>> is not a _single_ file but many of them. And not only > > > property > > > >> >>>>>>> files > > > >> >>>>>>>>> but > > > >> >>>>>>>>>> a > > > >> >>>>>>>>>>> freely extensible bunch of different such configuration > > > >> >> sources! > > > >> >>>>>>>>>>> > > > >> >>>>>>>>>>> I hope you _now_ see the huge difference. > > > >> >>>>>>>>>>> Regarding type-safety: I already wrote that twice: check > > out > > > >> >>>>>>>>> ConfigValue. > > > >> >>>>>>>>>>> (copying the example again): > > > >> >>>>>>>>>>> > > > >> >>>>>>>>>>> --- > > > >> >>>>>>>>>>>> This allows for things like > > > >> >>>>>>>>>>> > > > >> >>>>>>>>>>>> ConfigValue<Integer> reloadAfterCfg = > > > >> >>>>>>>>>>>> > > > >> >> ConfigProvider.getConfig().access("myproject.mydb.reloadAfter") > > > >> >>>>>>>>>>>> .as(Integer.class) > > > >> >>>>>>>>>>>> .withDefault(1000) > > > >> >>>>>>>>>>>> .cacheFor(5, TimeUnit.MINUTES) > > > >> >>>>>>>>>>>> .evaluateVariables(true) > > > >> >>>>>>>>>>>> .withLookupPath(config.getValue("myproject.dbvendor"), > > > >> >>>>>>>>> projectStage); > > > >> >>>>>>>>>>>> > > > >> >>>>>>>>>>>> And later use > > > >> >>>>>>>>>>>> reloadAfterCfg.getValue()--- > > > >> >>>>>>>>>>> > > > >> >>>>>>>>>>> LieGrue, > > > >> >>>>>>>>>>> strub > > > >> >>>>>>>>>>> > > > >> >>>>>>>>>>> > > > >> >>>>>>>>>>> > > > >> >>>>>>>>>>> > > > >> >>>>>>>>>>> On Monday, 18 July 2016, 21:53, Werner Keil < > > > >> >>>> [email protected] > > > >> >>>>>>>> > > > >> >>>>>>>>>> wrote: > > > >> >>>>>>>>>>>> To consider possible simplification and common > > > denominators, > > > >> >> it > > > >> >>>>>>> seems > > > >> >>>>>>>>>>> good to have a look at Tamaya's base interface: > > > >> >>>>>>>>>>> > > > >> >>>>>>> > > > >> >>> > > > http://tamaya.apache.org/apidocs/org/apache/tamaya/Configuration.html > > > >> >>>>>>>>>>>> and > > > >> >>>>>>>>>>>> > > > >> >>>>>>>>>>> > > > >> >>>>>>>>>> > > > >> >>>>>>>>> > > > >> >>>>>>> > > > >> >>>>>>> > > > >> >>>>> > > > >> >>>> > > > >> >>> > > > >> >> > > > >> > > > > > > https://commons.apache.org/proper/commons-configuration/apidocs/org/apache/commons/configuration2/ImmutableConfiguration.html > > > >> >>>>>>>>>>>> > > > >> >>>>>>>>>>>> they have at least some very basic methods in common. > > > Leaving > > > >> >>> the > > > >> >>>>>>>>> order > > > >> >>>>>>>>>>> of key or type aside. > > > >> >>>>>>>>>>>> > > > >> >>>>>>>>>>>> > > > >> >>>>>>>>>>>> In your proposed Config interface I only saw a > > > >> >>>>>>>>>>>> String get(String) method, but for that sorry, we could > > > just > > > >> >>>> stick > > > >> >>>>>>> to > > > >> >>>>>>>>>> the > > > >> >>>>>>>>>>> good old Properties and forget about the whole thing ;-| > > > >> >>>>>>>>>>>> > > > >> >>>>>>>>>>>> > > > >> >>>>>>>>>>>> A default or convenience method (what Commons Config 2 > > > calls > > > >> >>>>>>>>>> getString()) > > > >> >>>>>>>>>>> why not, but without type-safe yet extensible getters, > > there > > > >> >> is > > > >> >>>>>>> little > > > >> >>>>>>>>>>> value to create a new API with more or less the same > value > > > >> >>>>>>> (literally) > > > >> >>>>>>>>>> than > > > >> >>>>>>>>>>> java.util.Properties. > > > >> >>>>>>>>>>>> > > > >> >>>>>>>>>>>> > > > >> >>>>>>>>>>>> I know you're on the CDI EG, other than that, not > sure, > > > >> >> which > > > >> >>>>>>> others > > > >> >>>>>>>>>>> (according to JCP.org, not mailing lists or other forms > of > > > >> >>>>>>>>> contribution) > > > >> >>>>>>>>>>>> Being on both sides (EG and EC) in many cases, I am > used > > to > > > >> >>>>>>> question > > > >> >>>>>>>>>> JSRs > > > >> >>>>>>>>>>> and their Spec Leads, so it's not bad if this happens > > before > > > >> >> any > > > >> >>>> of > > > >> >>>>>>>>> that > > > >> >>>>>>>>>>> was filed or sonsidered towards a JSR. > > > >> >>>>>>>>>>>> > > > >> >>>>>>>>>>>> > > > >> >>>>>>>>>>>> Although there had been 2 attempt (one even by Adam > Bien > > > at a > > > >> >>>> very > > > >> >>>>>>>>> early > > > >> >>>>>>>>>>> stage of his efforts in the JCP) JSR 377 is an example > > for a > > > >> >>>>>>> seemingly > > > >> >>>>>>>>>>> premature JSR proposal. And unless Andres does some > > > "miracle" > > > >> >> it > > > >> >>>>>>> may > > > >> >>>>>>>>>> likely > > > >> >>>>>>>>>>> be shut down by the EC with the next Renewal Ballot. > > > >> >>>>>>>>>>>> > > > >> >>>>>>>>>>>> > > > >> >>>>>>>>>>>> So JCP.next introduced a few measures to avoid > > "neverending > > > >> >>> JSRs" > > > >> >>>>>>> like > > > >> >>>>>>>>>>> 107 or 310 now, but sometimes it isn't a bad thing to > wait > > > or > > > >> >>> file > > > >> >>>>>>> it > > > >> >>>>>>>>>> based > > > >> >>>>>>>>>>> on experience by one or several Open Source projects. > > > >> >> Hibernate > > > >> >>>> was > > > >> >>>>>>>>> one, > > > >> >>>>>>>>>>> but considering the JPA RI is based on TopLink (now > > > >> >> EclipseLink) > > > >> >>>> it > > > >> >>>>>>>>>>> certainly isn't the only project behind what became JPA > > > >> >> either. > > > >> >>>>>>>>>>>> > > > >> >>>>>>>>>>>> > > > >> >>>>>>>>>>>> Cheers, > > > >> >>>>>>>>>>>> Werner > > > >> >>>>>>>>>>>> > > > >> >>>>>>>>>>>> > > > >> >>>>>>>>>>>> > > > >> >>>>>>>>>>>> On Mon, Jul 18, 2016 at 9:15 PM, Mark Struberg > > > >> >>>>>>>>>> <[email protected]> > > > >> >>>>>>>>>>> wrote: > > > >> >>>>>>>>>>>> > > > >> >>>>>>>>>>>> Yes Werner, we know. > > > >> >>>>>>>>>>>>> > > > >> >>>>>>>>>>>>> > > > >> >>>>>>>>>>>>> But nonetheless Hibernate managed to > > > >> >>>>>>>>>>>>> > > > >> >>>>>>>>>>>>> a.) get the spec on the ground pretty efficiently > > > >> >>>>>>>>>>>>> b.) implemented the JPA specification on top of their > > own > > > >> >>> logic > > > >> >>>>>>> in a > > > >> >>>>>>>>>>> timely fashion. > > > >> >>>>>>>>>>>>> > > > >> >>>>>>>>>>>>> > > > >> >>>>>>>>>>>>> As you know I'm contributing to a number of > > specifications > > > >> >> as > > > >> >>> an > > > >> >>>>>>>>>>> _active_ JCP EG member myself for many years now, so I > > > really > > > >> >>> know > > > >> >>>>>>> all > > > >> >>>>>>>>>> this > > > >> >>>>>>>>>>> stuff! > > > >> >>>>>>>>>>>>> > > > >> >>>>>>>>>>>>> On the original topic: if I say '5 interfaces' than > > those > > > >> >>> don't > > > >> >>>>>>> need > > > >> >>>>>>>>> to > > > >> >>>>>>>>>>> be exactly the ones I proposed. I also don't care > whether > > we > > > >> >>> call > > > >> >>>>>>> them > > > >> >>>>>>>>>>> ConfigSource or PropertySource (as example). All I like > to > > > do > > > >> >> is > > > >> >>>> to > > > >> >>>>>>>>>> review > > > >> >>>>>>>>>>> and clean up the API. After all this is a community > > > decision. > > > >> >>> If a > > > >> >>>>>>>>>> majority > > > >> >>>>>>>>>>> of Tamaya committers say I'm nuts and the current API is > > > fine, > > > >> >>>> then > > > >> >>>>>>> be > > > >> >>>>>>>>>> it. > > > >> >>>>>>>>>>> Otoh if the majority is to do the cleanup then we should > > do > > > it > > > >> >>>>>>>>> properly. > > > >> >>>>>>>>>>>>> > > > >> >>>>>>>>>>>>> LieGrue, > > > >> >>>>>>>>>>>>> strub > > > >> >>>>>>>>>>>>> > > > >> >>>>>>>>>>>>> > > > >> >>>>>>>>>>>>> > > > >> >>>>>>>>>>>>> > > > >> >>>>>>>>>>>>> > > > >> >>>>>>>>>>>>>> On Monday, 18 July 2016, 20:55, Werner Keil < > > > >> >>>>>>> [email protected] > > > >> >>>>>>>>>> > > > >> >>>>>>>>>>> wrote: > > > >> >>>>>>>>>>>>>>> Hibernate vs. JPA is also an interesting read: > > > >> >>>>>>>>>>>>>> > > > >> >>>>>>>>>>> > > > >> >>>>>>>>>> > > > >> >>>>>>>>> > > > >> >>>>>>> > > > >> >>>>>>> > > > >> >>>>> > > > >> >>>> > > > >> >>> > > > >> >> > > > >> > > > > > > http://stackoverflow.com/questions/9881611/whats-the-difference-between-jpa-and-hibernate > > > >> >>>>>>>>>>>>>> Like Tamaya, Apache Commons Config or other config > > > >> >> solutions, > > > >> >>>>>>>>>>> Hibernate was > > > >> >>>>>>>>>>>>>> there before JPA. Its creators were involved as well > as > > > >> >> many > > > >> >>>>>>> others > > > >> >>>>>>>>>>> (even > > > >> >>>>>>>>>>>>>> Apache or Novell;-) > > > >> >>>>>>>>>>>>>> > > > >> >>>>>>>>>>>>>> Werner > > > >> >>>>>>>>>>>>>> > > > >> >>>>>>>>>>>>>> > > > >> >>>>>>>>>>>>>> > > > >> >>>>>>>>>>>>>> On Mon, Jul 18, 2016 at 7:56 PM, Gerhard Petracek < > > > >> >>>>>>>>>>> [email protected]> > > > >> >>>>>>>>>>>>>> wrote: > > > >> >>>>>>>>>>>>>> > > > >> >>>>>>>>>>>>>>> before i vote, i would like to hear if there is a > real > > > >> >>>>>>> blocker > > > >> >>>>>>>>> for > > > >> >>>>>>>>>> a > > > >> >>>>>>>>>>>>>>> simpler api (besides collections). > > > >> >>>>>>>>>>>>>>> > > > >> >>>>>>>>>>>>>>> regards, > > > >> >>>>>>>>>>>>>>> gerhard > > > >> >>>>>>>>>>>>>>> > > > >> >>>>>>>>>>>>>>> > > > >> >>>>>>>>>>>>> > > > >> >>>>>>>>>>>> > > > >> >>>>>>>>>>>> > > > >> >>>>>>>>>>>> > > > >> >>>>>>>>>>> > > > >> >>>>>>>>>> > > > >> >>>>>>>>> > > > >> >>>>>>> > > > >> >>>>> > > > >> >>>>> > > > >> >>>> > > > >> >>> > > > >> >>> > > > >> >>> > > > >> >>> -- > > > >> >>> *Anatole Tresch* > > > >> >>> PPMC Member Apache Tamaya > > > >> >>> JCP Star Spec Lead > > > >> >>> *Switzerland, Europe Zurich, GMT+1* > > > >> >>> *maketechsimple.wordpress.com < > > http://maketechsimple.wordpress.com/ > > > > > > > >> * > > > >> >>> *Twitter: @atsticks, @tamayaconf* > > > >> >>> > > > >> >> > > > >> > > > >> > > > > > > > > > >
