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*
> >> >>>
> >> >>
> >>
> >>
> >
>

Reply via email to