Hi JB 2018-01-13 7:51 GMT+01:00 Jean-Baptiste Onofré <j...@nanthrax.net>:
> Hi Romain, > > Clearly AutoValue is really convenient for developer. It reduces the > boilerplate of getter/setter for configuration. > > I'm not a big fan of an IOOptions, because it's a breaking change and I > think we gonna loose some flexibility for developers. > > POJO is basically what we did before using AutoValue. > > A potential new option would be to do an improvement in AutoValue (on the > annotations or the way it does the fields generation). > Preventing to chain them can be nice too, so would be enforcing a single ConfigPojo for IO configuration. Would that work? > > Regards > JB > > On 12/01/2018 19:26, Romain Manni-Bucau wrote: > >> Hi guys >> >> I'd like to discuss the IO configuration. >> >> My goal is to be able to instrospect (or equivalent) the IO to >> instantiate them programmatically in a generic manner from a generic config >> - this is not yet linked to the system property topic but can benefit beam >> on this other topic too. >> >> Auto value loosing the final fields ordering is impossible to use until >> you parse sources. >> >> In other words: auto value is nice for programmatic usage but is blocking >> for any automotion on top of it - even using unsafe is not an option ATM :(. >> >> Can we try to get something to solve that need please? >> >> Here are the solutions I see (pick just one ;)): >> >> 1. migrate IO to IOOptions (based on pipeline options kind of design). >> This is a breaking change - but I'm sure we can mitigate it in term of user >> compatibility - but it unifies the beam config and enables to not have IO >> specific configurations which can vary between the IO if not developped by >> the same guy. >> 2. Add an extension to @AutoValue to also generate the field names order >> in the create() (@Fields({"address","username","password"}). Cheap but >> the way to instantiate an IO from a config is still a pain (think >> Factory.createIO(clazz, properties)) >> 3. Also generate a plain pojo from the abstract @AutoValue class - this >> requires to modify the source class to make it working but is feasible with >> a processor >> 4. drop autovalue and use plain pojo - writing it cause it is a technical >> option but it leads to break as much as 1 without getting all the benefit >> to have an agnostic config and the tooling we can build on top of it >> 5. probably others >> >> >> Wdyt? >> >> Personally I really like 1 cause it starts to create a clean programming >> model we can then build other features on. >> >> >> Romain Manni-Bucau >> @rmannibucau <https://twitter.com/rmannibucau> | Blog < >> https://rmannibucau.metawerx.net/> | Old Blog < >> http://rmannibucau.wordpress.com> | Github <https://github.com/rmannibuca >> u> | LinkedIn <https://www.linkedin.com/in/rmannibucau> >> >