[weld-dev] Specializes bean in war causes unsatisfied resolution exception

Benjamin Confino BENJAMIC at uk.ibm.com
Wed Nov 30 12:01:38 EST 2016


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 at redhat.com>
To:     Matej Novotny <manovotn at redhat.com>, Benjamin 
Confino/UK/IBM at IBMGB, 
Cc:     Emily Jiang/UK/IBM at IBMGB, Tom Evans/UK/IBM at IBMGB, 
weld-dev at 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 at uk.ibm.com>
>> To: weld-dev at lists.jboss.org
>> Cc: "Tom Evans" <TEVANS at uk.ibm.com>, "Emily Jiang" 
<EMIJIANG at 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 at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/weld-dev
>
> _______________________________________________
> weld-dev mailing list
> weld-dev at 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/weld-dev/attachments/20161130/7937f8a6/attachment-0001.html 


More information about the weld-dev mailing list