@JB: thought about another option which can be almost hurtless for beam:

1. we ensure all "config" classes are public (would avoid nasty hacks)
2. while migrating to java 8 you activate the javac -parameters flag

does it sound better?



Romain Manni-Bucau
@rmannibucau <https://twitter.com/rmannibucau> |  Blog
<https://rmannibucau.metawerx.net/> | Old Blog
<http://rmannibucau.wordpress.com> | Github <https://github.com/rmannibucau> |
LinkedIn <https://www.linkedin.com/in/rmannibucau>

2018-01-14 19:25 GMT+01:00 Romain Manni-Bucau <rmannibu...@gmail.com>:

> Works for me but forbids the usage of the abstract class cause of final
> fields. That said if beam can get a Factory.createIO(clazz,
> configAsPrimitivesMap) Im happy whatever solution is used.
>
>
> Le 14 janv. 2018 17:19, "Jean-Baptiste Onofré" <j...@nanthrax.net> a écrit :
>
>> Hi Romain,
>>
>> I think the missing thing for automation projects is probably more around
>> "documentation" for the setters/getters.
>>
>> So, why not:
>> 1. we don't change the usage and AutoValue itself
>> 2. we can imagine to add a new set of annotations in IO Common with a
>> specific annotation processor that create another POJO class, not actually
>> used in the IO code, but "describing" the configuration for automation
>> projects. This POJO will be public, no final.
>>
>> WDYT ?
>>
>> 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/rmannibucau> | LinkedIn <
>>> https://www.linkedin.com/in/rmannibucau>
>>>
>>

Reply via email to