<div dir="ltr">I would recommend that at least some of these comments make their way into the google doc.  Things like BeanManager come from there.<div><br></div><div>I simply dropped a huge code snippet in here since there was no easy way to include it in the doc.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Dec 18, 2014 at 5:57 AM, José Paumard <span dir="ltr">&lt;<a href="mailto:jose.paumard@gmail.com" target="_blank">jose.paumard@gmail.com</a>&gt;</span> wrote:<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Yes, there are good use cases for letting the user provide his own ES to have async calls executed in them. They are the same kind of use cases we have for CompletionStage. <span class="HOEnZb"><font color="#888888"><div><br></div><div>José</div></font></span></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">2014-12-18 10:18 GMT+01:00 Romain Manni-Bucau <span dir="ltr">&lt;<a href="mailto:rmannibucau@gmail.com" target="_blank">rmannibucau@gmail.com</a>&gt;</span>:<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span>2014-12-18 9:58 GMT+01:00 José Paumard &lt;<a href="mailto:jose.paumard@gmail.com" target="_blank">jose.paumard@gmail.com</a>&gt;:<br>
&gt; From what we wrote about async events, ES can be submitted through the<br>
&gt; fireAsync call, following the patterns of CompletionStage. We can also<br>
&gt; submit a default ES while building a CDI container (a you wrote), and if we<br>
&gt; dont the default ES will probably be the default ForkJoinPool.<br>
&gt;<br>
&gt; So we may have more than one ES, making things more complicated than the<br>
&gt; pattern you wrote. I think that having the user to close all the ESes will<br>
&gt; lead to the same pattern again and again :<br>
&gt; for (ES es : cdi.getESes()) {<br>
&gt;     myShutdown(es) ;<br>
&gt; }<br>
&gt;<br>
<br>
</span>Sorry I missed something here: how can we get multiple ES? Basically<br>
if CDI needs a ES behing the scene I expect it expose few config like<br>
potential concurrent calls number etc...In such a case I&#39;m not sure if<br>
having multiple ES would be a good idea.<br>
<div><div><br>
&gt; I&#39;d prefer to have a cdi.shutdown(), cdi.shudownNow() or<br>
&gt; cdi.awaitTermination(...) or whatever we call those methods, to encapsulate<br>
&gt; this code. Seems cleaner to me. It might look like CDI is becoming an ES<br>
&gt; itself, but it&#39;s delegation, not inheritance.<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; 2014-12-18 9:28 GMT+01:00 Romain Manni-Bucau &lt;<a href="mailto:rmannibucau@gmail.com" target="_blank">rmannibucau@gmail.com</a>&gt;:<br>
&gt;&gt;<br>
&gt;&gt; Why exposing them? When not simply exposing the executor service (in<br>
&gt;&gt; &quot;init&quot; method).<br>
&gt;&gt;<br>
&gt;&gt; CDIContainer cdi = CDIContainer.init(singletonMap(ExecutorService.class,<br>
&gt;&gt; myEs));<br>
&gt;&gt; // do something awesome<br>
&gt;&gt; shutdownAsIwant(myEs);<br>
&gt;&gt; cdi.close();<br>
&gt;&gt;<br>
&gt;&gt; Would avoid to have a lot of method several users will not care about.<br>
&gt;&gt;<br>
&gt;&gt; By default it would do a if (timeout &lt;= 0 ||<br>
&gt;&gt; !defaultEs.awaitTermination(timeout, MILLISECONDS)) { for (Runnable r<br>
&gt;&gt; : defaultEs.shutdownNow()) { try { r.cancel(); } catch(e) { log(e); }<br>
&gt;&gt; } } with timeout a property of the init map with a default in<br>
&gt;&gt; CDIContainer (constant)<br>
&gt;&gt;<br>
&gt;&gt; wdyt?<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; Romain Manni-Bucau<br>
&gt;&gt; @rmannibucau<br>
&gt;&gt; <a href="http://www.tomitribe.com" target="_blank">http://www.tomitribe.com</a><br>
&gt;&gt; <a href="http://rmannibucau.wordpress.com" target="_blank">http://rmannibucau.wordpress.com</a><br>
&gt;&gt; <a href="https://github.com/rmannibucau" target="_blank">https://github.com/rmannibucau</a><br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; 2014-12-18 9:19 GMT+01:00 José Paumard &lt;<a href="mailto:jose.paumard@gmail.com" target="_blank">jose.paumard@gmail.com</a>&gt;:<br>
&gt;&gt; &gt; I think we need to think more about how to close the Container.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; We need to take into account the fact that there wil be async process<br>
&gt;&gt; &gt; running in ExecutorServices (SE) or ManagedExecutorServices (EE). So the<br>
&gt;&gt; &gt; shutting down the container will mean shutting down these ES too.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; So I think we should need to carefully look at the way ES are closed.<br>
&gt;&gt; &gt; The<br>
&gt;&gt; &gt; question being : what do we do with async tasks that are still running :<br>
&gt;&gt; &gt; should we abruptely interrupt them ? give them a chance to complete ?<br>
&gt;&gt; &gt; All<br>
&gt;&gt; &gt; these are exposed in different methods of ES : shutdown(), shutdownNow()<br>
&gt;&gt; &gt; and<br>
&gt;&gt; &gt; awaitTermination(timeout). Since the container will have to call one of<br>
&gt;&gt; &gt; these methods per ES it will manage, I think we should also expose them.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; José<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; 2014-12-18 9:14 GMT+01:00 Romain Manni-Bucau &lt;<a href="mailto:rmannibucau@gmail.com" target="_blank">rmannibucau@gmail.com</a>&gt;:<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; ServiceLoader.load(&lt;api&gt;) = ServiceLoader.load(&lt;api&gt;, tccl)<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; I was thinking to a plain servlet engine (tomcat to not say any name)<br>
&gt;&gt; &gt;&gt; and CDI container API to boot in webapps. Having cdi API in tomcat<br>
&gt;&gt; &gt;&gt; itself and CDI impl in webapps (Weld in webapp1, OWB in webapp2 for<br>
&gt;&gt; &gt;&gt; instance). This would mean using one webapp classloader to find the<br>
&gt;&gt; &gt;&gt; booter/container. This is fine excepted if the instance is cached.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; Same thought in more complicated about OSGi but I guess it is not yet<br>
&gt;&gt; &gt;&gt; the target.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; Romain Manni-Bucau<br>
&gt;&gt; &gt;&gt; @rmannibucau<br>
&gt;&gt; &gt;&gt; <a href="http://www.tomitribe.com" target="_blank">http://www.tomitribe.com</a><br>
&gt;&gt; &gt;&gt; <a href="http://rmannibucau.wordpress.com" target="_blank">http://rmannibucau.wordpress.com</a><br>
&gt;&gt; &gt;&gt; <a href="https://github.com/rmannibucau" target="_blank">https://github.com/rmannibucau</a><br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; 2014-12-18 8:58 GMT+01:00 Jozef Hartinger &lt;<a href="mailto:jharting@redhat.com" target="_blank">jharting@redhat.com</a>&gt;:<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; On 12/18/2014 08:48 AM, Romain Manni-Bucau wrote:<br>
&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt; Hi guys,<br>
&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt; - why shutdown and not AutoClosable?<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; I like this idea.<br>
&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt; - about instance: it uses TCCL to load the impls, not sure it is<br>
&gt;&gt; &gt;&gt; &gt;&gt; intended but depending the deployment it can be an issue (is this<br>
&gt;&gt; &gt;&gt; &gt;&gt; api<br>
&gt;&gt; &gt;&gt; &gt;&gt; 100% JavaSE + flat classpath - ie more constrained than JavaSE?) +<br>
&gt;&gt; &gt;&gt; &gt;&gt; most of javax SPI creates a new instance each time &quot;creator&quot; is<br>
&gt;&gt; &gt;&gt; &gt;&gt; called.<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; I don&#39;t follow. Who uses TCCL?<br>
&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt; - Why Booter and not Container (better than factory IMO)? 1) for<br>
&gt;&gt; &gt;&gt; &gt;&gt; consistency with other spec, 2) why can I shutdown a booter ;)?<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; Exactly<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt; Romain Manni-Bucau<br>
&gt;&gt; &gt;&gt; &gt;&gt; @rmannibucau<br>
&gt;&gt; &gt;&gt; &gt;&gt; <a href="http://www.tomitribe.com" target="_blank">http://www.tomitribe.com</a><br>
&gt;&gt; &gt;&gt; &gt;&gt; <a href="http://rmannibucau.wordpress.com" target="_blank">http://rmannibucau.wordpress.com</a><br>
&gt;&gt; &gt;&gt; &gt;&gt; <a href="https://github.com/rmannibucau" target="_blank">https://github.com/rmannibucau</a><br>
&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt; 2014-12-18 8:37 GMT+01:00 Jozef Hartinger &lt;<a href="mailto:jharting@redhat.com" target="_blank">jharting@redhat.com</a>&gt;:<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; On 12/18/2014 04:33 AM, John D. Ament wrote:<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; I thought today&#39;s meeting was pretty good.  Based on one of the<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; discussion<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; points, I wanted to try putting together an interface that<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; described<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; the<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; boot paradigm.  Unfortunately even in Java 8 it doesn&#39;t work too<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; well,<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; I<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; cannot assign a static variable in an interface the way I can in an<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; abstract<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; class.  More importantly, it doesn&#39;t give us the private level<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; expectation I<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; would look for in this case.  I best I could come up with using an<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; interface<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; is:<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; public interface CDIBooter {<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;      default BeanManager initialize() {<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;          return initialize(new HashMap&lt;&gt;());<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;      }<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;      BeanManager initialize(Map&lt;?,?&gt; properties);<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; Why BeanManager? I think it would be better to return CDI or its<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; subclass<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; rather than this low-level SPI. With the CDI class we get more<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; user-friendly<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; Instance&lt;T&gt; for free. We could also expose Event&lt;T&gt; similarly.<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;      void shutdown();<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;      class BootHolder {<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;          static CDIBooter instance = null;<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;      }<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;      static CDIBooter instance() {<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;          if(BootHolder.instance == null) {<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;              ServiceLoader&lt;CDIBooter&gt; serviceLoader =<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; ServiceLoader.load(CDIBooter.class);<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;              for(CDIBooter booter : serviceLoader) {<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;                  BootHolder.instance = booter;<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;                  break;<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;              }<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;          }<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;          return BootHolder.instance;<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;      }<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; }<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; where as the abstract class is a bit briefer, while also being<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; private.<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; public abstract class CDIBooter {<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;      public BeanManager initialize() {<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;          return initialize(new HashMap&lt;&gt;());<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;      }<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;      public abstract BeanManager initialize(Map&lt;?,?&gt; properties);<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;      public abstract void shutdown();<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;      private static CDIBooter instance = null;<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;      public static CDIBooter instance() {<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;          if(instance == null) {<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;              ServiceLoader&lt;CDIBooter&gt; serviceLoader =<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; ServiceLoader.load(CDIBooter.class);<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;              for(CDIBooter booter : serviceLoader) {<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;                  instance = booter;<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;                  break;<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;              }<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;          }<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;          return instance;<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;      }<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; }<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; Obviously ignore concurrency issues, etc.  It does look to be safer<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; to<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; do<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; an<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; abstract class, rather than a factory-interface.<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; John<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; On Wed Dec 17 2014 at 10:40:44 AM Antoine Sabot-Durand<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; &lt;<a href="mailto:antoine@sabot-durand.net" target="_blank">antoine@sabot-durand.net</a>&gt; wrote:<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; Hi all,<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; I have business matter and will have to shorten the meeting<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; tonight<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; (half<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; an hour instead of 1h).<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; I updated the SE doc and Antonio added useful annexes :<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; <a href="https://docs.google.com/document/d/1LgsGT-AAlrF72Z5pW4xNQiVjUHGUME46ZmB-wwF35Yw/edit?usp=sharing" target="_blank">https://docs.google.com/document/d/1LgsGT-AAlrF72Z5pW4xNQiVjUHGUME46ZmB-wwF35Yw/edit?usp=sharing</a><br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; I propose we focus on this in these 30 mn<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; regards,<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; Antoine<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; cdi-dev mailing list<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; <a href="mailto:cdi-dev@lists.jboss.org" target="_blank">cdi-dev@lists.jboss.org</a><br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; <a href="https://lists.jboss.org/mailman/listinfo/cdi-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/cdi-dev</a><br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; Note that for all code provided on this list, the provider<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; licenses<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; the<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; code under the Apache License, Version 2<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; (<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<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; ideas<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; provided on this list, the provider waives all patent and other<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; intellectual<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;&gt; property rights inherent in such information.<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; _______________________________________________<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; cdi-dev mailing list<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; <a href="mailto:cdi-dev@lists.jboss.org" target="_blank">cdi-dev@lists.jboss.org</a><br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; <a href="https://lists.jboss.org/mailman/listinfo/cdi-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/cdi-dev</a><br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; Note that for all code provided on this list, the provider licenses<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; the<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; code<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; under the Apache License, Version 2<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; (<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<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; ideas<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; provided on this list, the provider waives all patent and other<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; intellectual<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; property rights inherent in such information.<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; _______________________________________________<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; cdi-dev mailing list<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; <a href="mailto:cdi-dev@lists.jboss.org" target="_blank">cdi-dev@lists.jboss.org</a><br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; <a href="https://lists.jboss.org/mailman/listinfo/cdi-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/cdi-dev</a><br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; Note that for all code provided on this list, the provider licenses<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; the<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; code<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; under the Apache License, Version 2<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; (<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<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; ideas<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; provided on this list, the provider waives all patent and other<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; intellectual<br>
&gt;&gt; &gt;&gt; &gt;&gt;&gt; property rights inherent in such information.<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; _______________________________________________<br>
&gt;&gt; &gt;&gt; cdi-dev mailing list<br>
&gt;&gt; &gt;&gt; <a href="mailto:cdi-dev@lists.jboss.org" target="_blank">cdi-dev@lists.jboss.org</a><br>
&gt;&gt; &gt;&gt; <a href="https://lists.jboss.org/mailman/listinfo/cdi-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/cdi-dev</a><br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; Note that for all code provided on this list, the provider licenses the<br>
&gt;&gt; &gt;&gt; code under the Apache License, Version 2<br>
&gt;&gt; &gt;&gt; (<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<br>
&gt;&gt; &gt;&gt; provided on this list, the provider waives all patent and other<br>
&gt;&gt; &gt;&gt; intellectual<br>
&gt;&gt; &gt;&gt; property rights inherent in such information.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; --<br>
&gt;&gt; &gt; Java le soir Cours Java en ligne<br>
&gt;&gt; &gt; Twitter Paris JUG Devoxx France<br>
&gt;&gt; &gt; M : <a href="tel:%2B33%206%2076%2082%2091%2047" value="+33676829147" target="_blank">+33 6 76 82 91 47</a><br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; --<br>
&gt; Java le soir Cours Java en ligne<br>
&gt; Twitter Paris JUG Devoxx France<br>
&gt; M : <a href="tel:%2B33%206%2076%2082%2091%2047" value="+33676829147" target="_blank">+33 6 76 82 91 47</a><br>
</div></div></blockquote></div><br clear="all"><div><br></div>-- <br><div><div><a href="http://blog.paumard.org" target="_blank">Java le soir</a> <a href="http://blog.paumard.org/cours-tutoriaux/" target="_blank">Cours Java en ligne</a></div><div><a href="http://twitter.com/#!/JosePaumard" target="_blank">Twitter</a> <a href="http://www.parisjug.org" target="_blank">Paris JUG</a> <a href="http://www.devoxx.fr" target="_blank">Devoxx France</a></div><div>M : <a href="tel:%2B33%206%2076%2082%2091%2047" value="+33676829147" target="_blank">+33 6 76 82 91 47</a></div></div>
</div>
</div></div><br>_______________________________________________<br>
cdi-dev mailing list<br>
<a href="mailto:cdi-dev@lists.jboss.org">cdi-dev@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/cdi-dev" 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" 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>