<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"><!-- P {margin-top:0;margin-bottom:0;} --></style>
</head>
<body dir="ltr">
<div id="divtagdefaultwrapper" style="font-size:12pt;color:#000000;background-color:#FFFFFF;font-family:Calibri,Arial,Helvetica,sans-serif;">
<p>Tomas,</p>
<p><br>
</p>
<p>Yep, I'm not trying to say there is already inheritance. &nbsp;What I'm trying to say is that the produces annotation should be inherited, making it so that there is inheritance now.</p>
<p><br>
</p>
<p>John</p>
<br>
<br>
<div style="color: rgb(0, 0, 0);">
<div>
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="x_divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>From:</b> Tomas Remes &lt;tremes@redhat.com&gt;<br>
<b>Sent:</b> Tuesday, September 13, 2016 8:51 AM<br>
<b>To:</b> John Ament<br>
<b>Cc:</b> cdi-dev<br>
<b>Subject:</b> Re: [cdi-dev] Should javax.enterprise.inject.Produces be inherited?</font>
<div>&nbsp;</div>
</div>
</div>
<font size="2"><span style="font-size:10pt;">
<div class="PlainText"><br>
Hi John,<br>
<br>
Please note there is no such inheritance of scope for producer method in this case in the Weld. I added test
<a href="https://github.com/weld/core/commit/77f6916b55882a81d5fb33313d2e58806605bb17" id="LPlnk105940">
https://github.com/weld/core/commit/77f6916b55882a81d5fb33313d2e58806605bb17</a>
<div id="LPBorder_GT_14737725197680.659244223398163" style="margin-bottom: 20px; overflow: auto; width: 100%; text-indent: 0px;">
<table id="LPContainer_14737725197650.20730785919328643" cellspacing="0" style="width: 90%; background-color: rgb(255, 255, 255); position: relative; overflow: auto; padding-top: 20px; padding-bottom: 20px; margin-top: 20px; border-top: 1px dotted rgb(200, 200, 200); border-bottom: 1px dotted rgb(200, 200, 200);">
<tbody>
<tr valign="top" style="border-spacing: 0px;">
<td id="ImageCell_14737725197660.011874227534669712" colspan="1" style="width: 250px; position: relative; display: table-cell; padding-right: 20px;">
<div id="LPImageContainer_14737725197660.451526569040406" style="background-color: rgb(255, 255, 255); height: 250px; position: relative; margin: auto; display: table; width: 250px;">
<a id="LPImageAnchor_14737725197660.7908339249442389" href="https://github.com/weld/core/commit/77f6916b55882a81d5fb33313d2e58806605bb17" target="_blank" style="display: table-cell; text-align: center;"><img aria-label="Preview image with link selected. Double-tap to open the link." id="LPThumbnailImageID_14737725197670.6556514716124844" style="display: inline-block; max-width: 250px; max-height: 250px; height: 250px; width: 250px; border-width: 0px; vertical-align: bottom;" width="250" height="250" src="https://avatars2.githubusercontent.com/u/924640?v=3&amp;s=200"></a></div>
</td>
<td id="TextCell_14737725197670.20824250107952902" colspan="2" style="vertical-align: top; position: relative; padding: 0px; display: table-cell;">
<div id="LPRemovePreviewContainer_14737725197670.21749039496287792"></div>
<div id="LPTitle_14737725197670.3622489985133286" style="top: 0px; color: rgb(227, 30, 37); font-weight: normal; font-size: 21px; font-family: wf_segoe-ui_light, &quot;Segoe UI Light&quot;, &quot;Segoe WP Light&quot;, &quot;Segoe UI&quot;, &quot;Segoe WP&quot;, Tahoma, Arial, sans-serif; line-height: 21px;">
<a id="LPUrlAnchor_14737725197670.4667313496372112" href="https://github.com/weld/core/commit/77f6916b55882a81d5fb33313d2e58806605bb17" target="_blank" style="text-decoration: none;">Test scope of alternative producer is not inherited.  weld/core@77f6916</a></div>
<div id="LPMetadata_14737725197670.4163849135105757" style="margin: 10px 0px 16px; color: rgb(102, 102, 102); font-weight: normal; font-family: wf_segoe-ui_normal, &quot;Segoe UI&quot;, &quot;Segoe WP&quot;, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 14px;">
github.com</div>
<div id="LPDescription_14737725197680.6941888547123336" style="display: block; color: rgb(102, 102, 102); font-weight: normal; font-family: wf_segoe-ui_normal, &quot;Segoe UI&quot;, &quot;Segoe WP&quot;, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 20px; max-height: 100px; overflow: hidden;">
core - Weld, including integrations for Servlet containers and Java SE, examples and documentation</div>
</td>
</tr>
</tbody>
</table>
</div>
<br>
<br>
<br>
Thanks<br>
Tom<br>
<br>
----- Original Message -----<br>
From: &quot;John Ament&quot; &lt;john.ament@spartasystems.com&gt;<br>
To: &quot;Emily Jiang&quot; &lt;EMIJIANG@uk.ibm.com&gt;<br>
Cc: &quot;cdi-dev&quot; &lt;cdi-dev@lists.jboss.org&gt;<br>
Sent: Tuesday, September 13, 2016 12:33:33 PM<br>
Subject: Re: [cdi-dev] Should javax.enterprise.inject.Produces be inherited?<br>
<br>
<br>
<br>
Emily, <br>
<br>
<br>
<br>
<br>
Just want to make sure I follow. Are you saying this because right now it is required that you add @Produces to the overridden method?
<br>
<br>
<br>
<br>
<br>
I don't realistically see a scenario where you would override the method and not add produces. This method is intended to be called by the container.
<br>
<br>
<br>
<br>
<br>
John <br>
<br>
<br>
From: Emily Jiang &lt;EMIJIANG@uk.ibm.com&gt; <br>
Sent: Tuesday, September 13, 2016 4:37 AM <br>
To: John Ament <br>
Cc: Matej Novotny; Mark Struberg; cdi-dev <br>
Subject: Re: [cdi-dev] Should javax.enterprise.inject.Produces be inherited? <br>
First of all, the subject line suggests the produces should be inherited under all conditions. Anyway, after your explanation, I think this suggestion contradicts with spec and breaks backward compatibility. In the cdi 1.2/cdi 2.0 spec,
<br>
<br>
<br>
The only way one bean can completely override a second bean at all injection points is if it implements all the bean types and declares all the qualifiers of the second bean. However, if the second bean declares a producer method or observer method, then even
 this is not enough to ensure that the second bean is never called! <br>
<br>
To help prevent developer error, the first bean may: <br>
<br>
&nbsp;&nbsp;&nbsp; * directly extend the bean class of the second bean, or <br>
&nbsp;&nbsp;&nbsp; * directly override the producer method, in the case that the second bean is a producer method, and then
<br>
explicitly declare that it specializes the second bean. <br>
<br>
<br>
<br>
After this suggestion, the above sentence is not true any more. <br>
<br>
Many thanks, <br>
Emily <br>
=========================== <br>
Emily Jiang <br>
WebSphere Application Server, CDI Development Lead <br>
<br>
MP 211, DE3A20, Winchester, Hampshire, England, SO21 2JN <br>
Phone: &#43;44 (0)1962 816278 Internal: 246278 <br>
<br>
Email: emijiang@uk.ibm.com <br>
Lotus Notes: Emily Jiang/UK/IBM@IBMGB <br>
<br>
<br>
<br>
<br>
From: John Ament &lt;john.ament@spartasystems.com&gt; <br>
To: Matej Novotny &lt;manovotn@redhat.com&gt;, Mark Struberg &lt;struberg@yahoo.de&gt; <br>
Cc: Emily Jiang/UK/IBM@IBMGB, cdi-dev &lt;cdi-dev@lists.jboss.org&gt; <br>
Date: 12/09/2016 13:31 <br>
Subject: Re: [cdi-dev] Should javax.enterprise.inject.Produces be inherited? <br>
Sent by: cdi-dev-bounces@lists.jboss.org <br>
<br>
<br>
<br>
<br>
@Matej - Yes, that would be consistent with what I was seeing as well. <br>
<br>
@Mark - Are you thinking about decorators and not alternatives? See also [1] <br>
Really the goal here is to substitute the bean, but not just the provided bean the producer method that it exposes. It seems to work as I would expect it in weld (as mentioned), when I add @Produces to the method, it overrides the base class's producer method.
 No ambiguous resolutions, it just works properly. <br>
<br>
Realistically, this is all an experiment to see if I can provide spring boot like default configurations (beans, config values, etc) in a framework, and override them as an application developer.
<br>
<br>
<br>
[1]: <a href="http://docs.jboss.org/cdi/spec/2.0.EDR2/cdi-spec.html#alternatives">
http://docs.jboss.org/cdi/spec/2.0.EDR2/cdi-spec.html#alternatives</a> <br>
<br>
<br>
<br>
<br>
<br>
From: Matej Novotny &lt;manovotn@redhat.com&gt; <br>
Sent: Monday, September 12, 2016 3:28 AM <br>
To: Mark Struberg <br>
Cc: John Ament; Emily Jiang; cdi-dev <br>
Subject: Re: [cdi-dev] Should javax.enterprise.inject.Produces be inherited? <br>
<br>
Hi all, <br>
<br>
I did some testing (with Weld) and it seems the scope IS inherited when you use @Alternative.
<br>
However it IS NOT inherited when you use @Specialized. <br>
<br>
Not yet sure if this is intended or anyhow spec-defined, just stating facts. <br>
<br>
Matej <br>
<br>
----- Original Message ----- <br>
&gt; From: &quot;Mark Struberg&quot; &lt;struberg@yahoo.de&gt; <br>
&gt; To: &quot;John Ament&quot; &lt;john.ament@spartasystems.com&gt;, &quot;Emily Jiang&quot; &lt;EMIJIANG@uk.ibm.com&gt;
<br>
&gt; Cc: &quot;cdi-dev&quot; &lt;cdi-dev@lists.jboss.org&gt; <br>
&gt; Sent: Monday, September 12, 2016 8:00:55 AM <br>
&gt; Subject: Re: [cdi-dev] Should javax.enterprise.inject.Produces be inherited? <br>
&gt; <br>
&gt; <br>
&gt; <br>
&gt; &gt; Right now inheritance of managed beans is itself problematic, as <br>
&gt; <br>
&gt; &gt; injecting the base class can cause these ambiguous resolutions. <br>
&gt; <br>
&gt; Yes, that's why we originally introduced @Typed. <br>
&gt; <br>
&gt; <br>
&gt; <br>
&gt; Your sample wont work as an Alternative as it extends a concrete class and <br>
&gt; doesn't implement any interface. <br>
&gt; Did you mean @Specializes? <br>
&gt; Note that with @Alternative you won't make the original producer go away.You <br>
&gt; would also need to add @Alternative to the producer method imo. The rules <br>
&gt; for making an alternative producer method are really a bit confusing ;) I <br>
&gt; think the most portable way is to annotate both the class and the producer <br>
&gt; method with @Alternative. <br>
&gt; <br>
&gt; <br>
&gt; LieGrue, <br>
&gt; strub <br>
&gt; <br>
&gt; <br>
&gt; On Monday, 12 September 2016, 0:57, John Ament &lt;john.ament@spartasystems.com&gt; <br>
&gt; wrote: <br>
&gt; &gt; <br>
&gt; &gt;Hi Emily, <br>
&gt; &gt; <br>
&gt; &gt; <br>
&gt; &gt;I disagree, at least it doesn't add any new ambiguous injections. The <br>
&gt; &gt;use-case is specifically to Specialized/Alternative beans. Right now <br>
&gt; &gt;inheritance of managed beans is itself problematic, as injecting the base <br>
&gt; &gt;class can cause these ambiguous resolutions. <br>
&gt; &gt; <br>
&gt; &gt; <br>
&gt; &gt;The example I sent out actually works correctly (in weld at least), really <br>
&gt; &gt;my propose is to remove the need to have Produces a second time and update <br>
&gt; &gt;the spec to clarify what happens here (FWIW, I don't believe the case is <br>
&gt; &gt;currently described in the spec), hopefully to say that qualifiers and <br>
&gt; &gt;scopes from the base method remain in effect, unless explicitly overridden. <br>
&gt; &gt; <br>
&gt; &gt; <br>
&gt; &gt;John <br>
&gt; &gt; <br>
&gt; &gt; <br>
&gt; &gt; <br>
&gt; &gt;________________________________ <br>
&gt; &gt; <br>
&gt; &gt;From: Emily Jiang &lt;EMIJIANG@uk.ibm.com&gt; <br>
&gt; &gt;Sent: Sunday, September 11, 2016 5:59 PM <br>
&gt; &gt;To: John Ament <br>
&gt; &gt;Cc: cdi-dev <br>
&gt; &gt;Subject: Re: [cdi-dev] Should javax.enterprise.inject.Produces be inherited? <br>
&gt; &gt; <br>
&gt; &gt;I think this is very problematic as you will get <br>
&gt; &gt;AmbiguousResolutionException all the time once we introduce this <br>
&gt; &gt;inheritance. <br>
&gt; &gt; <br>
&gt; &gt;Many thanks, <br>
&gt; &gt;Emily <br>
&gt; &gt;=========================== <br>
&gt; &gt;Emily Jiang <br>
&gt; &gt;WebSphere Application Server, CDI Development Lead <br>
&gt; &gt; <br>
&gt; &gt;MP 211, DE3A20, Winchester, Hampshire, England, SO21 2JN <br>
&gt; &gt;Phone: &#43;44 (0)1962 816278 Internal: 246278 <br>
&gt; &gt; <br>
&gt; &gt;Email: emijiang@uk.ibm.com <br>
&gt; &gt;Lotus Notes: Emily Jiang/UK/IBM@IBMGB <br>
&gt; &gt; <br>
&gt; &gt; <br>
&gt; &gt; <br>
&gt; &gt; <br>
&gt; &gt;From: John Ament &lt;john.ament@spartasystems.com&gt; <br>
&gt; &gt;To: cdi-dev &lt;cdi-dev@lists.jboss.org&gt; <br>
&gt; &gt;Date: 11/09/2016 20:04 <br>
&gt; &gt;Subject: [cdi-dev] Should javax.enterprise.inject.Produces be <br>
&gt; &gt;inherited? <br>
&gt; &gt;Sent by: cdi-dev-bounces@lists.jboss.org <br>
&gt; &gt;&gt;________________________________ <br>
&gt; &gt; <br>
&gt; &gt; <br>
&gt; &gt; <br>
&gt; &gt;All, <br>
&gt; &gt; <br>
&gt; &gt;I was just thinking about alternatives and producer methods. Suppose I have <br>
&gt; &gt;the following bean: <br>
&gt; &gt; <br>
&gt; &gt;@ApplicationScoped <br>
&gt; &gt;public class Boop { <br>
&gt; &gt; <br>
&gt; &gt; @Produces <br>
&gt; &gt; @ApplicationScoped <br>
&gt; &gt; public Simpler makeSimpler() { <br>
&gt; &gt; return new Simpler(&quot;Boop&quot;); <br>
&gt; &gt; } <br>
&gt; &gt;} <br>
&gt; &gt; <br>
&gt; &gt;If I want to override the producer method, I need to declare fully: <br>
&gt; &gt; <br>
&gt; &gt;@Alternative <br>
&gt; &gt;@Priority(100) <br>
&gt; &gt;@ApplicationScoped <br>
&gt; &gt;public class BoopAlternative extends Boop{ <br>
&gt; &gt; @Override <br>
&gt; &gt; @Produces <br>
&gt; &gt; public Simpler makeSimpler() { <br>
&gt; &gt; return new Simpler(&quot;Boop2&quot;); <br>
&gt; &gt; } <br>
&gt; &gt;} <br>
&gt; &gt; <br>
&gt; &gt;For some reason, scopes are inherited, but the produces annotation is not. <br>
&gt; &gt;At least in the case of a producer method, it seems like it would be <br>
&gt; &gt;useful for @Produces to be inherited as well. <br>
&gt; &gt; <br>
&gt; &gt;John <br>
&gt; &gt; <br>
&gt; &gt;________________________________ <br>
&gt; &gt; NOTICE: This e-mail message and any attachments may contain confidential, <br>
&gt; &gt; proprietary, and/or privileged information which should be treated <br>
&gt; &gt; accordingly. If you are not the intended recipient, please notify the <br>
&gt; &gt; sender immediately by return e-mail, delete this message, and destroy all <br>
&gt; &gt; physical and electronic copies. Thank you. <br>
&gt; &gt; _______________________________________________ <br>
&gt; &gt;cdi-dev mailing list <br>
&gt; &gt;cdi-dev@lists.jboss.org <br>
&gt; &gt; <a href="https://lists.jboss.org/mailman/listinfo/cdi-dev">https://lists.jboss.org/mailman/listinfo/cdi-dev</a>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cdi-dev Info Page - JBoss Developer <br>
lists.jboss.org <br>
List to discuss the development of CDI (the specification) To see the collection of prior postings to the list, visit the cdi-dev Archives.
<br>
<br>
<br>
&gt; &gt; <br>
&gt; &gt;Note that for all code provided on this list, the provider licenses the code <br>
&gt; &gt;under the Apache License, Version 2 <br>
&gt; &gt;( <a href="http://www.apache.org/licenses/LICENSE-2.0.html">http://www.apache.org/licenses/LICENSE-2.0.html</a> ). For all other ideas
<br>
&gt; &gt;provided on this list, the provider waives all patent and other <br>
&gt; &gt;intellectual property rights inherent in such information. <br>
&gt; &gt;cdi-dev Info Page - JBoss Developer <br>
&gt; &gt;lists.jboss.org <br>
&gt; &gt;List to discuss the development of CDI (the specification) To see the <br>
&gt; &gt;collection of prior postings to the list, visit the cdi-dev Archives. <br>
&gt; &gt; <br>
&gt; &gt; <br>
&gt; &gt;Unless stated otherwise above: <br>
&gt; &gt;IBM United Kingdom Limited - Registered in England and Wales with number <br>
&gt; &gt;741598. <br>
&gt; &gt;Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU <br>
&gt; &gt; <br>
&gt; &gt; <br>
&gt; &gt; <br>
&gt; &gt;________________________________ <br>
&gt; &gt; NOTICE: This e-mail message and any attachments may contain confidential, <br>
&gt; &gt; proprietary, and/or privileged information which should be treated <br>
&gt; &gt; accordingly. If you are not the intended recipient, please notify the <br>
&gt; &gt; sender immediately by return e-mail, delete this message, and destroy all <br>
&gt; &gt; physical and electronic copies. Thank you. <br>
&gt; &gt; <br>
&gt; &gt;_______________________________________________ <br>
&gt; &gt;cdi-dev mailing list <br>
&gt; &gt;cdi-dev@lists.jboss.org <br>
&gt; &gt; <a href="https://lists.jboss.org/mailman/listinfo/cdi-dev">https://lists.jboss.org/mailman/listinfo/cdi-dev</a>
<br>
&gt; &gt; <br>
&gt; &gt;Note that for all code provided on this list, the provider licenses the code <br>
&gt; &gt;under the Apache License, Version 2 <br>
&gt; &gt;( <a href="http://www.apache.org/licenses/LICENSE-2.0.html">http://www.apache.org/licenses/LICENSE-2.0.html</a> ). For all other ideas
<br>
&gt; &gt;provided on this list, the provider waives all patent and other <br>
&gt; &gt;intellectual property rights inherent in such information. <br>
&gt; &gt; <br>
&gt; &gt; <br>
&gt; _______________________________________________ <br>
&gt; cdi-dev mailing list <br>
&gt; cdi-dev@lists.jboss.org <br>
&gt; <a href="https://lists.jboss.org/mailman/listinfo/cdi-dev">https://lists.jboss.org/mailman/listinfo/cdi-dev</a>
<br>
&gt; <br>
&gt; Note that for all code provided on this list, the provider licenses the code <br>
&gt; under the Apache License, Version 2 <br>
&gt; ( <a href="http://www.apache.org/licenses/LICENSE-2.0.html">http://www.apache.org/licenses/LICENSE-2.0.html</a> ). For all other ideas
<br>
&gt; provided on this list, the provider waives all patent and other intellectual <br>
&gt; property rights inherent in such information. <br>
&gt; <br>
<br>
NOTICE: This e-mail message and any attachments may contain confidential, proprietary, and/or privileged information which should be treated accordingly. If you are not the intended recipient, please notify the sender immediately by return e-mail, delete this
 message, and destroy all physical and electronic copies. Thank you. _______________________________________________
<br>
cdi-dev mailing list <br>
cdi-dev@lists.jboss.org <br>
<a href="https://lists.jboss.org/mailman/listinfo/cdi-dev">https://lists.jboss.org/mailman/listinfo/cdi-dev</a>
<br>
<br>
Note that for all code provided on this list, the provider licenses the code under the Apache License, Version 2 (
<a href="http://www.apache.org/licenses/LICENSE-2.0.html">http://www.apache.org/licenses/LICENSE-2.0.html</a> ). For all other ideas provided on this list, the provider waives all patent and other intellectual property rights inherent in such information.
<br>
<br>
Unless stated otherwise above: <br>
IBM United Kingdom Limited - Registered in England and Wales with number 741598. <br>
Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU <br>
<br>
NOTICE: This e-mail message and any attachments may contain confidential, proprietary, and/or privileged information which should be treated accordingly. If you are not the intended recipient, please notify the sender immediately by return e-mail, delete this
 message, and destroy all physical and electronic copies. Thank you. <br>
<br>
_______________________________________________<br>
cdi-dev mailing list<br>
cdi-dev@lists.jboss.org<br>
<a href="https://lists.jboss.org/mailman/listinfo/cdi-dev">https://lists.jboss.org/mailman/listinfo/cdi-dev</a><br>
<br>
Note that for all code provided on this list, the provider licenses the code under the Apache License, Version 2 (<a href="http://www.apache.org/licenses/LICENSE-2.0.html">http://www.apache.org/licenses/LICENSE-2.0.html</a>). For all other ideas provided on
 this list, the provider waives all patent and other intellectual property rights inherent in such information.<br>
<br>
-- <br>
Tomas Remes<br>
<br>
<br>
</div>
</span></font></div>
</div>
<hr>
NOTICE: This e-mail message and any attachments may contain confidential, proprietary, and/or privileged information which should be treated accordingly. If you are not the intended recipient, please notify the sender immediately by return e-mail, delete this
 message, and destroy all physical and electronic copies. Thank you.
</body>
</html>