👍🙂 ajs6f <[email protected]> schrieb am Fr., 19. Okt. 2018, 15:52:
> 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] > >>>>>> > >>>>>> > >>>> > >>>> > >> > >> > >
