<div dir="ltr">Antoine,<div><br></div><div>I don&#39;t think we have vastly differing opinions here.  My main concern is that the CDI Impls wait for the spec to say something should be done before implementing.  There is very little innovation that happens within the implementations, as a result its very hard for the EG to decide how something should work - you have anywhere from 0 to 1 capabilities existing in the wild to see how it should behave.</div><div><br></div><div>And actually I&#39;ll disagree pretty heavily about how CDI came to be.  Most of what was Seam 2 went into WebBeans.  The CDI behaviors were adapted from Seam 2 from a DI stand point, with some clean up with where there were gaps, things that didn&#39;t make sense, and things that just didn&#39;t belong.</div><div><br></div><div>John<br><br><div class="gmail_quote"><div dir="ltr">On Mon, Mar 7, 2016 at 5:33 AM Antoine Sabot-Durand &lt;<a href="mailto:antoine@sabot-durand.net">antoine@sabot-durand.net</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">







<p><span>John, I partially disagree with you here.</span></p><p><span>CDI innovated from the beginning. When the project started in 2007 there wasn&#39;t any strong typed DI framework around. No spec proposed a SPI like CDI and eventing system in DI framework were inexistant or nearly unused (Who eared of event bus in Spring ?). Following your definition of what is a specification CDI wouldn&#39;t be here today.</span></p><p>The challenge is to find a real balance between innovating (but not to much and without breaking backward compatibility) and take working ideas around in impl or other framework (like builders from DeltaSpike or Weld bootstrap API that we are about to propose to complete SE API)</p><p>The problem with CDI, is that it&#39;s still limited to Java EE so you&#39;ll only have very few user giving you feedback on impl specific features. It will probably change when we&#39;ll add SE support but in the meantime we should try to deliver something useful for our users and something they asked (like async events).</p><p>As I said in my previous mail, Spec annexe can be used to put features that didn&#39;t gather enough truct from the EG to be specified. It&#39;s a step between spec and impl. Bean validation already done that in 1.0 with method validation</p><p><a href="http://beanvalidation.org/1.0/spec/#appendix-methodlevelvalidation" target="_blank">http://beanvalidation.org/1.0/spec/#appendix-methodlevelvalidation</a><br></p><p>And standardize it in 1.1 after having gathered users feedback:</p><p><a href="http://beanvalidation.org/1.1/spec/#d0e267" target="_blank">http://beanvalidation.org/1.1/spec/#d0e267</a><br></p></div><div dir="ltr"><p><br></p><p>Antoine</p></div><div dir="ltr"><div class="gmail_quote"><div dir="ltr">Le dim. 6 mars 2016 à 18:41, John D. Ament &lt;<a href="mailto:john.d.ament@gmail.com" target="_blank">john.d.ament@gmail.com</a>&gt; a écrit :<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Sun, Mar 6, 2016 at 12:25 PM Romain Manni-Bucau &lt;<a href="mailto:rmannibucau@gmail.com" target="_blank">rmannibucau@gmail.com</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">2016-03-06 18:02 GMT+01:00 John D. Ament <span dir="ltr">&lt;<a href="mailto:john.d.ament@gmail.com" target="_blank">john.d.ament@gmail.com</a>&gt;</span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">What I think would be even better is to see this implemented in the impls (Weld &amp; OWB) and see how users use it, in a release that&#39;s not plastered with Alpha or Experimental all over it.  While I think we were all wary about it, we need real end user input from the impl standpoint to figure out what makes sense to standardize on.<span><font color="#888888"><div><br></div></font></span></div></blockquote><div><br></div></div></div></div><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div>Or just do the opposite and *standardize* it. We can use Rx* feedbacks but it doesnt&#39; match event case at all which is a real small subset of the reactive programming so I guess easiness should be what drives us there and integration at least with the JVM so CFuture version sounds more natural than CStage one. Difference is very small at method level but at utility level it is.</div><div><br></div><div>Side note: a Weld or OWB release without experimental/alpha sounds worse if the spec changes later. A compromise can be an extension doing it already you can drop in any of these containers.</div></div></div></div></blockquote><div><br></div></div></div><div dir="ltr"><div class="gmail_quote"><div>There seems to be a general misunderstanding about how the specs are intended to work.  You standardize on things that as a group everyone has agreed would work in a specific way.  Right now, the CDI EG is innovating and standardizing on those innovations instead of standardizing on the features already available in the various impls.  Lets take a few examples of where impls deviate from the specs.</div><div><br></div><div>- Bean Validation: Hibernate Validator has a suite of built in validations <a href="https://github.com/hibernate/hibernate-validator/tree/master/engine/src/main/java/org/hibernate/validator/constraints" target="_blank">https://github.com/hibernate/hibernate-validator/tree/master/engine/src/main/java/org/hibernate/validator/constraints</a> - these constraints can in theory work in any pluggable environment, but come with their core engine built in, for people to leverage.  These are good targets to leverage in the core spec when its seen as being very useful.</div><div><br></div><div>- JAX-RS : All of the implementations had client impls paired up with their 1.1 compliant releases, even though it wasn&#39;t required.  Why? Because it made a ton of sense.  Then see what happened afterwards, the EG came together and standardized on a Client API that took a lot of the great features in each impl and made them consistent.</div><div><br></div><div>- EJB: Lets not forget that the removal of home/remote/local interfaces came from a combination of xdoclet and spring.  The EG came together, saw that what was in use and figured out how to standardize on it once the language features were available.</div><div><br></div><div>- Singleton EJBs: An extension of EJB 3, most vendors supported a form of singleton in their EJBs, and the EJB EG agreed upon it in addition to some concurrency issues that had to be addressed.</div><div><br></div><div>- CDI: Lets not forget about the hard work people like strub have put into making CDI work well.  Scoped Beans only? Awesome idea.  <a href="https://github.com/apache/openwebbeans/commit/3b3640e17c88e7c095563337194ba23c6f9e1689" target="_blank">https://github.com/apache/openwebbeans/commit/3b3640e17c88e7c095563337194ba23c6f9e1689</a>  He didn&#39;t wait for the EG to standardize on anything before implementing.</div><div><br></div><div>- JPA: Lets not forget that HIbernate supports in dual hierarchies the EntityManager and Session interfaces concurrently.  Want to use HQL in your @NamedQuery? Sure, it works fine.  </div><div><br></div><div>Bottom line, we need to get these features out into the wild, let people play and come back with input on the various impls.  There&#39;s nothing stopping the weld team from introducing org.jboss.weld.events.api.AsyncEvent that supports CompletableFuture and CompletionStage, allowing app developers to consume this via an injection point just like Event works today, @Inject AsyncEvent&lt;Foo&gt;.  Even if thats not the spec compliant way to do it long term, it makes it clear that you&#39;re using a provider specific API.</div><div><br></div><div>In addition, there would be nothing stopping either team from introducing support for @Priority on observer methods.  There&#39;s no API change, no spec change required.  The spec doesn&#39;t mandate that it works, but there&#39;s nothing stopping your impl from allowing it.  The spec doesn&#39;t say you absolutely cannot leverage it.</div></div></div><div dir="ltr"><div class="gmail_quote"><div><br></div><div>John</div></div></div><div dir="ltr"><div class="gmail_quote"><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><span><font color="#888888"><div></div></font></span><div><span><font color="#888888">John</font></span><div><div><br><br><div class="gmail_quote"><div dir="ltr">On Sun, Mar 6, 2016 at 10:37 AM Reza Rahman &lt;<a href="mailto:reza_rahman@lycos.com" target="_blank">reza_rahman@lycos.com</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="auto"><div>How much end user feedback has there been on this? I have to be honest that it surprises me to find this out now.</div><div><br></div><div>This to me stands out as an obvious usability problem. CompletableFuture is the obvious top level end user API, not CompletionStage. Not going with CompletableFuture is very likely to confuse most people. The last thing we need is more potential usability problems in Java EE APIs.</div></div><div dir="auto"><div><br>On Mar 6, 2016, at 9:39 AM, Romain Manni-Bucau &lt;<a href="mailto:rmannibucau@gmail.com" target="_blank">rmannibucau@gmail.com</a>&gt; wrote:<br><br></div><blockquote type="cite"><div><div dir="ltr">Hi guys,<div><br></div><div>as a user having a ComlpetionStage makes me loose some JDK utilities, can we move back to CompletionFuture?</div><div><br></div><div>It would allow for instance:</div><div><br></div><div>// doesn&#39;t work with CompletionStage</div><div>CompletionFuture.allOf(event1.fireAsync(...), event2.fireAsync(...))</div><div>      .then(...)<br clear="all"><div><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><br><span style="font-size:small">Romain Manni-Bucau</span><br><a href="https://twitter.com/rmannibucau" target="_blank">@rmannibucau</a> |  <a href="http://rmannibucau.wordpress.com" target="_blank">Blog</a> | <a href="https://github.com/rmannibucau" target="_blank">Github</a> | <a href="https://www.linkedin.com/in/rmannibucau" target="_blank">LinkedIn</a> | <a href="http://www.tomitribe.com" target="_blank">Tomitriber</a></div></div></div></div></div></div></div></div></div></div>
</div></div>
</div></blockquote><blockquote type="cite"><div><span>_______________________________________________</span><br><span>cdi-dev mailing list</span><br><span><a href="mailto:cdi-dev@lists.jboss.org" target="_blank">cdi-dev@lists.jboss.org</a></span><br><span><a href="https://lists.jboss.org/mailman/listinfo/cdi-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/cdi-dev</a></span><br><span></span><br><span>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" target="_blank">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.</span></div></blockquote></div>_______________________________________________<br>
cdi-dev mailing list<br>
<a href="mailto:cdi-dev@lists.jboss.org" target="_blank">cdi-dev@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/cdi-dev" rel="noreferrer" target="_blank">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" rel="noreferrer" target="_blank">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.</blockquote></div></div></div></div></div>
<br>_______________________________________________<br>
cdi-dev mailing list<br>
<a href="mailto:cdi-dev@lists.jboss.org" target="_blank">cdi-dev@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/cdi-dev" rel="noreferrer" target="_blank">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" rel="noreferrer" target="_blank">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></blockquote></div></div></div></blockquote></div></div>
_______________________________________________<br>
cdi-dev mailing list<br>
<a href="mailto:cdi-dev@lists.jboss.org" target="_blank">cdi-dev@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/cdi-dev" rel="noreferrer" target="_blank">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" rel="noreferrer" target="_blank">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.</blockquote></div></div></blockquote></div></div></div>