Thank you for the prompt replies.

In answer to your question. It is UiSnapshotData which gets injected under OWB.

Regards
Benjamin




From:        Martin Kouba <mkouba@redhat.com>
To:        Matej Novotny <manovotn@redhat.com>, Benjamin Confino/UK/IBM@IBMGB,
Cc:        Emily Jiang/UK/IBM@IBMGB, Tom Evans/UK/IBM@IBMGB, weld-dev@lists.jboss.org
Date:        29/11/2016 07:42
Subject:        Re: [weld-dev] Specializes bean in war causes unsatisfied resolution exception




Matej is correct. The specializing bean from the war disables the
specialized bean from ear/lib. And since the bean from war is not
visible to the bean from ear/lib (KinderzuschussKinderServiceImpl) an
unsatisfied dependency exists.

By the way, what instance of SnapshotData gets injected into
KinderzuschussKinderServiceImpl for OWB? Is it UiSnapshotData from the
war/lib?

Martin

Dne 29.11.2016 v 07:06 Matej Novotny napsal(a):
> Hello Benjamin
>
> Thanks for well written question!
>
>> (You can see the application at was_bugs/was_bug22 at master
>> thikade/was_bugs GitHub )
>
> Thanks! Took a glance and it looks like the infamous EAR visibility issue.
>
>> My first thought was that this application should not work
>
> I agree with that. Anything located in EAR/lib cannot really "see" into WAR.
> Hence the bean with @Specializes (in WAR) will disable the original bean (in EAR/lib) and the injection cannot be performed as
> the specialized bean is not visible to the archive in EAR/lib.
>
>> I confirmed that this application works fine on OpenWebBeans.
>
> The fact that it does NOT work should be in accord with Java EE spec and its visibility restrictions.
> Maybe you should be asking OWB guys why does it work at all?
>
> I am no EAR expert but I really think this is Java EE spec (not CDI) intended behavior.
>
> Matej
>
> ----- Original Message -----
>> From: "Benjamin Confino" <BENJAMIC@uk.ibm.com>
>> To: weld-dev@lists.jboss.org
>> Cc: "Tom Evans" <TEVANS@uk.ibm.com>, "Emily Jiang" <EMIJIANG@uk.ibm.com>
>> Sent: Monday, November 28, 2016 4:56:12 PM
>> Subject: [weld-dev] Specializes bean in war causes unsatisfied resolution                 exception
>>
>> Hello
>>
>> A customer of mine sent in a test application with the following structure:
>>
>> A war file inside ear
>> Two jar files inside ear/lib
>> One jar file inside ear/war/WEB-INF/lib
>>
>> There is a class inside one of the ear/lib jar files which @Injects a bean
>> from the other ear/lib jar file
>>
>> And there is a class inside the ear/war/WEB-INF/lib jar file that
>> @Specializes the bean inside an ear/lib jar file
>>
>> (You can see the application at was_bugs/was_bug22 at master
>> thikade/was_bugs GitHub )
>>
>> Attempting to run this application on Weld results in an Unsatisfied
>> Resolution Exception. When I remove the jar containing the @Specializes bean
>> the application works correctly.
>>
>>
>> My first thought was that this application should not work, because the war
>> file and it's internal jar would have a second classloader that would be
>> invisible to the application classloader. However the customer attested, and
>> I confirmed that this application works fine on OpenWebBeans.
>>
>> I do not think this is an integration issue, because I tested this on Wildfly
>> and got the same error.
>>
>>
>> So it seems that Weld throws an Unsatisfied Resolution Exception if
>> @specializes exists in a class that is loaded by a classloader which is not
>> visible .
>>
>> What do you think is the correct behaviour is in this instance? >From a
>> classloading perspective a class inside ear/lib should not be able to see a
>> class inside ear/war; but on the other hand the entire purpose of a
>> @Specializes bean is that you drop it into your application and it replaces
>> the original bean. It feels appropriate that you can drop in a war file
>> containing the @Specializes bean and it just works without you having to do
>> anything extra.
>>
>> Best regards
>> Benjamin
>>
>> Unless stated otherwise above:
>> IBM United Kingdom Limited - Registered in England and Wales with number
>> 741598.
>> Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU
>>
>> _______________________________________________
>> weld-dev mailing list
>> weld-dev@lists.jboss.org
>>
https://lists.jboss.org/mailman/listinfo/weld-dev
>
> _______________________________________________
> weld-dev mailing list
> weld-dev@lists.jboss.org
>
https://lists.jboss.org/mailman/listinfo/weld-dev
>



Unless stated otherwise above:
IBM United Kingdom Limited - Registered in England and Wales with number 741598.
Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU