Challenging indeed, and to be done well it would have to present an API that is 
coherent with the use of collections in config.

Perhaps I'll try to write a test case, and then if that goes well I'll worry 
about asking for new API. :grin:

ajs6f

> On Oct 19, 2018, at 9:50 AM, Anatole Tresch <[email protected]> wrote:
> 
> Injection of multiple instances based on configs may be a more challenging
> thing. Worth to try it...
> 
> ajs6f <[email protected]> schrieb am Fr., 19. Okt. 2018, 15:46:
> 
>> Cool. I will take a look at a test case / documentation PR sometime this
>> coming week.
>> 
>> From the point of view of a consistent API, what do you think of the idea
>> of deprecating the required= attribute and instead saying that every
>> optional injection should be written as Optional<T> myInjection; ? It has
>> the advantages of consistency and that it reuses Java API. It has the
>> disadvantage of being a bit more verbose in many cases, and potentially
>> burring the semantics...
>> 
>> I'm by no means the kind to slather Optional<> all over the place--
>> anywhere other than a return type, it's usually a bad idea in my
>> experience. I think injection is a bit special, however. In a sense, the
>> type of an injected value is both a received type (from the POV of the
>> injected code) for which Optional<> isn't a good idea, and a produced type
>> (from the POV of the framework) for which it is at least a reasonable
>> choice, so I don't think it's totally crazy to turn to Optional<> in this
>> circumstance, although I admit it's a bit strange. We see a similar pattern
>> in the javax.enterprise.inject.Instance<> type, but that pre-dates
>> Optional<> and is additionally responsible for providing access to multiple
>> potential values for injection. Maybe Tamaya should support @Inject
>> Instance<MyType> for optional config values in order to fit better with
>> extant API?
>> 
>> ajs6f
>> 
>>> On Oct 19, 2018, at 9:38 AM, Anatole Tresch <[email protected]> wrote:
>>> 
>>> yep.
>>> 
>>> ajs6f <[email protected]> schrieb am Fr., 19. Okt. 2018, 13:25:
>>> 
>>>> Thanks! To be clear, the behavior should be:
>>>> 
>>>> required=false does _not_ work for CDI, because of underlying
>> constraints.
>>>> 
>>>> Optional<T> _does_ work with CDI, as an alternative.
>>>> 
>>>> Correct?
>>>> 
>>>> ajs6f
>>>> 
>>>>> On Oct 19, 2018, at 4:02 AM, Anatole Tresch <[email protected]>
>> wrote:
>>>>> 
>>>>> Writing a test case would be awesome. Good travels! Anatole
>>>>> 
>>>>> ajs6f <[email protected]> schrieb am Fr., 19. Okt. 2018, 02:11:
>>>>> 
>>>>>> Glad to: https://issues.apache.org/jira/browse/TAMAYA-358
>>>>>> 
>>>>>> I hope that is clear-- let me know if not. I can try to write a test
>>>> case.
>>>>>> (Traveling for the next week or so, so after that.)
>>>>>> 
>>>>>> ajs6f
>>>>>> 
>>>>>>> On Oct 18, 2018, at 7:56 PM, Anatole Tresch <[email protected]>
>>>> wrote:
>>>>>>> 
>>>>>>> I consider this is a bug, can you file one ? Would be awesome !
>>>>>>> 
>>>>>>> Am Fr., 19. Okt. 2018 um 01:04 Uhr schrieb ajs6f <[email protected]>:
>>>>>>> 
>>>>>>>> I'm afraid that didn't quite work (no change in behavior).
>>>>>>>> 
>>>>>>>> Did I correctly understand you to mean this?
>>>>>>>> 
>>>>>>>> @Inject
>>>>>>>> @Config(value = { "trellis.configFile", "TRELLIS_CONFIG_FILE" })
>>>>>>>> private Optional<File> configFile;
>>>>>>>> 
>>>>>>>> I've also tried it with required=false:
>>>>>>>> 
>>>>>>>> @Inject
>>>>>>>> @Config(value = { "trellis.configFile", "TRELLIS_CONFIG_FILE" },
>>>>>>>> required = false)
>>>>>>>> private Optional<File> configFile;
>>>>>>>> 
>>>>>>>> with the same behavior...
>>>>>>>> 
>>>>>>>> ajs6f
>>>>>>>> 
>>>>>>>>> On Oct 18, 2018, at 6:02 PM, Anatole Tresch <[email protected]>
>>>>>> wrote:
>>>>>>>>> 
>>>>>>>>> the problem is that CDI dies not support optional values in this
>> way,
>>>>>>>> this
>>>>>>>>> works in a non cdi env e.g. Spring, osgi.... What should work is
>>>>>>>> injecting
>>>>>>>>> an Optional<File>.
>>>>>>>>> 
>>>>>>>>> ajs6f <[email protected]> schrieb am Do., 18. Okt. 2018, 17:51:
>>>>>>>>> 
>>>>>>>>>> Hi, Tamaya folks!
>>>>>>>>>> 
>>>>>>>>>> I just tried using the required=false attribute of
>>>>>>>>>> o.a.t.inject.api.Config, on a field, with a CDI project, a la:
>>>>>>>>>> 
>>>>>>>>>> @Inject
>>>>>>>>>> @Config(value = { "trellis.configFile", "TRELLIS_CONFIG_FILE" },
>>>>>>>> required
>>>>>>>>>> = false)
>>>>>>>>>> private File configFile;
>>>>>>>>>> 
>>>>>>>>>> Unfortunately, it didn't seem to make the value truly optional. I
>>>> got
>>>>>>>> the
>>>>>>>>>> expectable:
>>>>>>>>>> 
>>>>>>>>>> org.apache.tamaya.ConfigException: Cannot resolve any of the
>>>> possible
>>>>>>>>>> configuration keys: [trellis.configFile, TRELLIS_CONFIG_FILE].
>>>> Please
>>>>>>>>>> provide one of the given keys with a value in your configuration
>>>>>>>> sources.
>>>>>>>>>> 
>>>>>>>>>> Is required=false supported in that position, or am I
>>>> misunderstanding
>>>>>>>> its
>>>>>>>>>> semantics?
>>>>>>>>>> 
>>>>>>>>>> Thanks!
>>>>>>>>>> 
>>>>>>>>>> ajs6f
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>> 
>>>>>>> --
>>>>>>> *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*
>>>>>>> 
>>>>>>> *Speaking at:*
>>>>>>> 
>>>>>>> [image: JSD_Speaker_2017][image: J-Con 2017 logo][image: JVM Con]
>>>>>> 
>>>>>> 
>>>> 
>>>> 
>> 
>> 

Reply via email to