Hi there,

I've got some seemingly working code based on your branch at 
https://github.com/ajs6f/trellis-cassandra-webapp/compare/TamayaConfig...peculater:TamayaConfig
 .  Take a look and tell me what you think.

The problems I noticed are in two areas.  The first one is the most frustrating 
to me, and is the one you alluded to in your most recent email.  Namely, 
balancing all of the CDI providers and consumers when spanning weld, 
jersey-cdi1x, JSF, the different -servlet packages, all their express and 
implied dependencies, and finally version conflicts, is really hard and often 
subtly broken.  For most of the tests that we run on CDI in managed contexts, 
we default to some pre-packaged combos with Arquillian. While that is somewhat 
heavier weight, it comes with the notable benefit of wiring up CDI with way 
fewer surprises and generally less work.   If you're not big on EE, the various 
"microprofile" servers do just CDI+JaxRS+Json which sounds like it might be 
useful if for no other reason than it's clear which versions of which maven 
artifacts work together.

The second place I spent some time was looking at why using the 
"cassandraHostAddy" variable at 
https://github.com/ajs6f/trellis-cassandra-webapp/blob/TamayaConfig/src/main/java/edu/si/trellis/cassandra/CassandraSession.java#L80
 wasn't actually providing any data, nor did it seem like dependency injection 
was ever getting called at all.  The answer there is in Weld's documentation at 
https://docs.jboss.org/weld/reference/latest/en-US/html/injection.html section 
4.1.  The important part is:

> Dependency injection always occurs when the bean instance is first 
> instantiated by the container. Simplifying just a little, things happen in 
> this order:
> 
> First, the container calls the bean constructor (the default constructor or 
> the one annotated @Inject), to obtain an instance of the bean.
> Next, the container initializes the values of all injected fields of the bean.

Note that any bean, including the @ApplicationScope CassandraSession from your 
example has to have its constructor called before any fields get injected.  
That means references to the injected fields in the constructor necessarily 
come back null, and if those fields are never referenced again it might look 
like the injection never took place at all.  I've got an example of how to get 
Configuration object out of CDI in the constructor in that diff, but it's more 
than an annotation.  Moving the call to cassandraHostAddy out of the 
constructor and giving it a default value made it work for me.

There is still some weirdness around missing Integer converters that I was 
never able to pin down, but I really think that has to do with problem one 
above. 

I hope this helps!

--William

________________________________________
From: ajs6f <[email protected]>
Sent: Wednesday, August 29, 2018 10:07 AM
To: [email protected]
Subject: Re: Tamaya CDI question

Just as an update, I was able to get tamaya-cdi working with Weld 3.0.5.Final 
in a setup driven by Pax Exam (no complications from JAX-RS or servlet 
containers), so I don't think it's a problem with that version of Weld. I will 
now try building back up towards my real problem to hopefully find the relevant 
condition that stops Tamaya's CDI extensions from loading.

ajs6f

> On Aug 28, 2018, at 2:28 PM, Anatole Tresch <[email protected]> wrote:
>
> Awesome👍
>
> <[email protected]> schrieb am Di., 28. Aug. 2018, 19:56:
>
>> More than ok-- I am really grateful. You are surely correct that it is a
>> very simple project, but I will keep tinkering and see if I can set up a
>> more minimal example that could evolve into a test case if needed.
>>
>> Thanks!
>>
>> ajs6f
>>
>> On Mon, Aug 27, 2018, 3:36 PM Anatole Tresch <[email protected]> wrote:
>>
>>> OK. somehow sounds a it tricky. Good thing is, your example is really
>>> pretty simple. I am happy to look into further and play around with it as
>>> well, but I will not have a chance to do so before end of week, because I
>>> am completely absorbed with education and work...
>>> If someone else can have a look a it beforehand, I would be pretty happy
>> as
>>> well ;-)
>>>
>>> OK for you?
>>>
>>> Best Anatole
>>>
>>> Am Mo., 27. Aug. 2018 um 20:23 Uhr schrieb ajs6f <[email protected]>:
>>>
>>>> Okay, it doesn't seem to be a version problem, or at least I could get
>> no
>>>> different result working with Weld 3.0.1.Final.
>>>>
>>>> I also tried adding an org.apache.tamaya.spi.ServiceContext file in
>>>> META-INF/services containing just:
>>>>
>>>> org.apache.tamaya.cdi.CDIAwareServiceContext
>>>>
>>>> because I saw that done in the Tamaya CDI module code, as well as every
>>>> possible combination of different entries in
>>>> javax.enterprise.inject.spi.Extension. No change-- in every single
>>>> case,TamayaCDIAccessor get registered as an extension, whether or not
>> it
>>> is
>>>> mentioned in j.e.inject.spi.Extension, and neither
>>>> TamayaCDIInjectionExtension nor
>>>> TamayaSEInjectionExtension do, whether or not they are mentioned. I've
>>>> triplechecked the assembly of the web-app, and it is correctly putting
>>> the
>>>> service files into META-INF/services, so I'm a bit flummoxed. I suspect
>>>> that the reason that TamayaCDIAccessor is getting registered is
>> connected
>>>> ot the reason the other extensions aren't getting registered, but I
>> don't
>>>> know what that is… CDI's extension lifecycle is really well-defined.
>>>>
>>>> ajs6f
>>>>
>>>>> On Aug 27, 2018, at 12:33 PM, John D. Ament <[email protected]>
>>>> wrote:
>>>>>
>>>>> On Mon, Aug 27, 2018, 10:32 ajs6f <[email protected]> wrote:
>>>>>
>>>>>> I'm afraid not-- I changed javax.enterprise.inject.spi.Extension to:
>>>>>>
>>>>>> # Register Tamaya to perform injection
>>>>>> org.apache.tamaya.cdi.TamayaCDIInjectionExtension
>>>>>> org.apache.tamaya.cdi.TamayaSEInjectionExtension
>>>>>>
>>>>>> and now no extension from Tamaya is registered at all! I _do_ see
>>>> various
>>>>>> beans being registered, e.g.
>>>>>>
>>>>>> Aug 27, 2018 10:27:23 AM org.apache.catalina.core.ApplicationContext
>>> log
>>>>>> INFO: 10:27:23.024 [main] DEBUG org.jboss.weld.Bootstrap -
>>> WELD-000106:
>>>>>> Bean: Producer Method [Object] with qualifiers [@Config @Any]
>> declared
>>>> as
>>>>>> [[BackedAnnotatedMethod] @Produces @Config public
>>>>>>
>>>>
>>>
>> org.apache.tamaya.cdi.ConfigurationProducer.resolveAndConvert(InjectionPoint)]
>>>>>>
>>>>>> It looks like the Tamaya example is using Weld 3.0.1.Final as
>> opposed
>>> to
>>>>>> my Weld 3.0.5.Final, but I can't imagine that would make any
>>> difference.
>>>>>>
>>>>>
>>>>>
>>>>> It very well could.  Weld had some major changes in classloading to
>>>> support
>>>>> Java 9 and up.  There could be a regression issue there.
>>>>>
>>>>> John
>>>>>
>>>>>
>>>>>> ajs6f
>>>>>>
>>>>>>> On Aug 24, 2018, at 6:04 PM, Anatole Tresch <[email protected]>
>>>> wrote:
>>>>>>>
>>>>>>> Hi!
>>>>>>>
>>>>>>> As far as I see there is no registration for the CDI extension
>>> present.
>>>>>>> Look at our test case for an example:
>>>>>>>
>>>>>>
>>>>
>>>
>> https://github.com/apache/incubator-tamaya-extensions/blob/master/modules/injection/cdi/src/test/resources/META-INF/services/javax.enterprise.inject.spi.Extension
>>>>>>>
>>>>>>>
>>>>>>> Give ad a hint if that solved your problem...😊
>>>>>>>
>>>>>>> Best, Anatole
>>>>>>>
>>>>>>> ajs6f <[email protected]> schrieb am Fr., 24. Aug. 2018, 17:39:
>>>>>>>
>>>>>>>> Hi, Anatole--
>>>>>>>>
>>>>>>>> Thank you very much! Please find my branch here:
>>>>>>>>
>>>>>>>>
>> https://github.com/ajs6f/trellis-cassandra-webapp/tree/TamayaConfig
>>>>>>>>
>>>>>>>> and the bean field where I'm using @Config is here:
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>
>>>>
>>>
>> https://github.com/ajs6f/trellis-cassandra-webapp/blob/TamayaConfig/src/main/java/edu/si/trellis/cassandra/CassandraSession.java#L47
>>>>>>>>
>>>>>>>> I'm sorry for the somewhat chaotic code-- this is a very
>>> experimental
>>>>>>>> project, although of course CDI and JAX-RS are not the
>> experimental
>>>>>> part.
>>>>>>>>
>>>>>>>> Please let me know what more info would be useful, and thank you
>> for
>>>>>> your
>>>>>>>> help!  (If you would like some log output, I can certainly package
>>>> that
>>>>>> up
>>>>>>>> somewhere for you.)
>>>>>>>>
>>>>>>>> ajs6f
>>>>>>>>
>>>>>>>>> On Aug 24, 2018, at 2:34 AM, Anatole Tresch <[email protected]>
>>>>>> wrote:
>>>>>>>>>
>>>>>>>>> Thanks for your mail. Basically the extension must load properly
>>> for
>>>>>>>> Tamaya
>>>>>>>>> CDI to work. If you can provide some kind of sample project it
>>> would
>>>> be
>>>>>>>>> perfect and I am happy to help.
>>>>>>>>>
>>>>>>>>> J Anatole
>>>>>>>>>
>>>>>>>>> ajs6f <[email protected]> schrieb am Do., 23. Aug. 2018, 22:00:
>>>>>>>>>
>>>>>>>>>> Hi, Tamaya-folks!
>>>>>>>>>>
>>>>>>>>>> I'm tinkering with Tamaya (0.3-incubating) for a webapp I'm
>>> writing
>>>>>>>>>> (deployed as a WAR in a servlet container). I'm using JAX-RS
>>> (Jersey
>>>>>>>> 2.27)
>>>>>>>>>> and CDI (Weld 3.0.5.Final) and I would love to use tamaya-cdi,
>> but
>>>> I'm
>>>>>>>>>> running into an odd problem.
>>>>>>>>>>
>>>>>>>>>> I'm not seeing TamayaCDIInjectionExtension properly initialized
>>> as a
>>>>>> CDI
>>>>>>>>>> extension, but oddly, I _am_ seeing the TamayaCDIAccessor
>>> extension
>>>>>>>> show up
>>>>>>>>>> and get initialized. So when my bean wirings are validated,
>>>> injection
>>>>>>>>>> points with a @Config @Inject are failing because CDI doesn't
>> know
>>>> to
>>>>>>>> go to
>>>>>>>>>> Tamaya for such injections.
>>>>>>>>>>
>>>>>>>>>> Has anyone seen anything like this? I can certainly put my
>> current
>>>>>>>> branch
>>>>>>>>>> up somewhere if that would be useful. My
>>>>>>>>>> javax.enterprise.inject.spi.Extension is as simple as:
>>>>>>>>>>
>>>>>>>>>> # Register Tamaya to perform injection
>>>>>>>>>> org.apache.tamaya.cdi.TamayaCDIAccessor
>>>>>>>>>> org.apache.tamaya.cdi.TamayaCDIInjectionExtension
>>>>>>>>>>
>>>>>>>>>> but only one of those guys seems to come to life! :grin:
>>>>>>>>>>
>>>>>>>>>> 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