<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
<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;font-family:Calibri,Arial,Helvetica,sans-serif;" dir="ltr">
<p>For me, that still doesn't discover. &nbsp;The only thing I can think of is that the JAR that includes&nbsp;<span>StringSearchModelInterpolator may have a beans.xml (does it?) &nbsp;Also, what bean are you checking for, producers or&nbsp;<span>ModelInterpolator ?</span></span></p>
<p><span><span><br>
</span></span></p>
<p>Also, I like your idea of explicitly allowing extensions to have producer methods. &nbsp;We treat extensions as app scoped beans, so why not add that support? &nbsp;Do you want to create a JIRA for that?</p>
<p><span><span><br>
</span></span></p>
<p><span><span>John</span></span></p>
<div id="Signature">
<div id="divtagdefaultwrapper" dir="ltr" style="font-size:12pt; color:#000000; background-color:#FFFFFF; font-family:Calibri,Arial,Helvetica,sans-serif">
<div style="color:rgb(33,33,33); font-size:15px; margin:0px"><br>
</div>
<p></p>
</div>
</div>
<br>
<br>
<div style="color: rgb(0, 0, 0);">
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>From:</b> Laird Nelson &lt;ljnelson@gmail.com&gt;<br>
<b>Sent:</b> Monday, March 20, 2017 1:50 PM<br>
<b>To:</b> John Ament; Martin Kouba; cdi-dev<br>
<b>Subject:</b> Re: [cdi-dev] Bean discovery question</font>
<div>&nbsp;</div>
</div>
<div>
<div dir="ltr">Very odd.&nbsp; OK.&nbsp; Here's my <font face="monospace">META-INF/beans.xml</font>:
<div><br>
</div>
<div>
<div><font face="monospace">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</font></div>
<div><font face="monospace">&lt;beans xmlns=&quot;<a href="http://xmlns.jcp.org/xml/ns/javaee" id="LPlnk381346">http://xmlns.jcp.org/xml/ns/javaee</a>&quot;</font></div>
<div><font face="monospace">&nbsp; &nbsp; &nbsp; &nbsp;xmlns:xsi=&quot;<a href="http://www.w3.org/2001/XMLSchema-instance">http://www.w3.org/2001/XMLSchema-instance</a>&quot;</font></div>
<div><font face="monospace">&nbsp; &nbsp; &nbsp; &nbsp;xsi:schemaLocation=&quot;<a href="http://xmlns.jcp.org/xml/ns/javaee">http://xmlns.jcp.org/xml/ns/javaee</a></font></div>
<div><font face="monospace">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<a href="http://xmlns.jcp.org/xml/ns/javaee/beans_2_0.xsd">http://xmlns.jcp.org/xml/ns/javaee/beans_2_0.xsd</a>&quot;</font></div>
<div><font face="monospace">&nbsp; &nbsp; &nbsp; &nbsp;version=&quot;2.0&quot;</font></div>
<div><font face="monospace">&nbsp; &nbsp; &nbsp; &nbsp;bean-discovery-mode=&quot;annotated&quot;&gt;</font></div>
<div><font face="monospace">&lt;/beans&gt;</font></div>
</div>
<div><br>
</div>
<div>…and here is a cut down, won't-compile gist of my extension class:</div>
<div><br>
</div>
<div>
<div><font face="monospace">public class MavenExtension implements Extension {</font></div>
<div><font face="monospace"><br>
</font></div>
<div><font face="monospace">&nbsp; public MavenExtension() {</font></div>
<div><font face="monospace">&nbsp; &nbsp; super();</font></div>
<div><font face="monospace">&nbsp; }</font></div>
</div>
<div><font face="monospace"><br>
</font></div>
<div><font face="monospace">&nbsp; &nbsp;private final void beforeBeanDiscovery(@Observes final BeforeBeanDiscovery event) {</font></div>
<div><font face="monospace">&nbsp; &nbsp; if (event != null) {</font></div>
<div><font face="monospace"><br>
</font></div>
<div><font face="monospace">&nbsp; &nbsp; &nbsp; //</font></div>
<div><font face="monospace">&nbsp; &nbsp; &nbsp; // Types effectively bound by DefaultServiceLocator</font></div>
<div><font face="monospace">&nbsp; &nbsp; &nbsp; //</font></div>
<div><font face="monospace">&nbsp; &nbsp; &nbsp;&nbsp;</font></div>
<div><font face="monospace">&nbsp; &nbsp; &nbsp; event.addAnnotatedType(DefaultArtifactResolver.class, &quot;maven&quot;).add(SingletonLiteral.INSTANCE);</font></div>
<div><font face="monospace"><br>
</font></div>
<div><font face="monospace">&nbsp; &nbsp; &nbsp; // and so on</font></div>
<div><font face="monospace">&nbsp; }</font></div>
<div><font face="monospace"><br>
</font></div>
<div><font face="monospace">&nbsp; private static final class Producers {<br>
</font></div>
<div><font face="monospace"><br>
</font></div>
<div><font face="monospace">&nbsp; &nbsp; @Produces</font></div>
<div><font face="monospace">&nbsp; &nbsp; @Singleton</font></div>
<div><font face="monospace">&nbsp; &nbsp; private static final ModelInterpolator produceModelInterpolator(final UrlNormalizer normalizer, final PathTranslator pathTranslator) {</font></div>
<div><font face="monospace">&nbsp; &nbsp; &nbsp; return new StringSearchModelInterpolator().setPathTranslator(pathTranslator).setUrlNormalizer(normalizer);</font></div>
<div><font face="monospace">&nbsp; &nbsp; }</font></div>
<div><font face="monospace"><br>
</font></div>
<div><font face="monospace">&nbsp; }</font></div>
<div><font face="monospace"><br>
</font></div>
<div><font face="monospace">}</font></div>
<div><br>
</div>
<div>Also if it matters my main loop does nothing.&nbsp; In other words, the test starts the container and closes it—which boots the extension of course, whereupon I notice that my
<font face="monospace">Producers</font> class gets picked up.&nbsp; I would have expected that I would have to programmatically add my
<font face="monospace">Producers</font> class for its producer methods to be &quot;seen&quot;, but I don't have to.&nbsp; That seems odd to me.</div>
<div><br>
</div>
<div>(Frankly, what I <i>really</i>&nbsp;want is for those producer methods, all of which are
<font face="monospace">static</font>, to just be members of my extension class, but they are not seen in this case.)</div>
<div><br>
</div>
<div>Best,</div>
<div>Laird</div>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr">On Mon, Mar 20, 2017 at 10:42 AM John Ament &lt;<a href="mailto:john.ament@spartasystems.com">john.ament@spartasystems.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" class="gmail_msg">
<div id="m_2560997016784671564divtagdefaultwrapper" dir="ltr" class="gmail_msg" style="font-size:12pt; color:#000000; font-family:Calibri,Arial,Helvetica,sans-serif">
<p class="gmail_msg">So I just tried locally with Weld 3.0 CR2</p>
<p class="gmail_msg"><br class="gmail_msg">
</p>
<p class="gmail_msg"></p>
<div class="gmail_msg">public class BeanDiscoverer implements Extension {</div>
<div class="gmail_msg">&nbsp; &nbsp; public void onBeans(@Observes ProcessBean&lt;?&gt; pb) {</div>
<div class="gmail_msg"><br class="gmail_msg">
</div>
<div class="gmail_msg">&nbsp; &nbsp; }</div>
<div class="gmail_msg"><br class="gmail_msg">
</div>
<div class="gmail_msg">&nbsp; &nbsp; @Singleton</div>
<div class="gmail_msg">&nbsp; &nbsp; public static class Producers {</div>
<div class="gmail_msg"><br class="gmail_msg">
</div>
<div class="gmail_msg">&nbsp; &nbsp; }</div>
<div class="gmail_msg"><br class="gmail_msg">
</div>
<div class="gmail_msg">&nbsp; &nbsp; public static void main(String...args) {</div>
<div class="gmail_msg">&nbsp; &nbsp; &nbsp; &nbsp; final SeContainer initialize = SeContainerInitializer.newInstance().initialize();</div>
<div class="gmail_msg">&nbsp; &nbsp; &nbsp; &nbsp; final Producers producers = initialize.select(Producers.class).get();</div>
<div class="gmail_msg">&nbsp; &nbsp; &nbsp; &nbsp; assert producers == null;</div>
<div class="gmail_msg">&nbsp; &nbsp; &nbsp; &nbsp; initialize.close();</div>
<div class="gmail_msg">&nbsp; &nbsp; }</div>
<div class="gmail_msg">}</div>
<div class="gmail_msg"><br class="gmail_msg">
</div>
<br class="gmail_msg">
<p class="gmail_msg"></p>
<p class="gmail_msg"><br class="gmail_msg">
</p>
<p class="gmail_msg">And it correctly throws&nbsp;</p>
<p class="gmail_msg"><br class="gmail_msg">
</p>
<p class="gmail_msg"></p>
<div class="gmail_msg">Exception in thread &quot;main&quot; org.jboss.weld.exceptions.UnsatisfiedResolutionException: WELD-001334: Unsatisfied dependencies for type Producers with qualifiers &nbsp;</div>
<div class="gmail_msg"><span class="m_2560997016784671564Apple-tab-span gmail_msg" style="white-space:pre-wrap"></span>at org.jboss.weld.bean.builtin.InstanceImpl.get(InstanceImpl.java:110)</div>
<div class="gmail_msg"><span class="m_2560997016784671564Apple-tab-span gmail_msg" style="white-space:pre-wrap"></span>at ws.ament.cdi.se.extensions.BeanDiscoverer.main(BeanDiscoverer.java:22)</div>
<div class="gmail_msg"><span class="m_2560997016784671564Apple-tab-span gmail_msg" style="white-space:pre-wrap"></span>at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)</div>
<div class="gmail_msg"><span class="m_2560997016784671564Apple-tab-span gmail_msg" style="white-space:pre-wrap"></span>at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)</div>
<div class="gmail_msg"><span class="m_2560997016784671564Apple-tab-span gmail_msg" style="white-space:pre-wrap"></span>at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)</div>
<div class="gmail_msg"><span class="m_2560997016784671564Apple-tab-span gmail_msg" style="white-space:pre-wrap"></span>at java.lang.reflect.Method.invoke(Method.java:497)</div>
<div class="gmail_msg"><span class="m_2560997016784671564Apple-tab-span gmail_msg" style="white-space:pre-wrap"></span>at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)</div>
<div class="gmail_msg">2017-03-20 10:36:22,254 Thread-1 WARN Unable to register Log4j shutdown hook because JVM is shutting down. Using SimpleLogger</div>
<div class="gmail_msg">Weld SE container d32779c5-500e-4457-95b6-8e7bf49561f9 shut down by shutdown hook</div>
<br class="gmail_msg">
<p class="gmail_msg"></p>
<p class="gmail_msg">Even when I explicitly add the extension, same thing occurs (<span class="gmail_msg">.addExtensions(BeanDiscoverer.class)).&nbsp; Even when I explicitly add to META-INF/services/Extension it fails.</span></p>
<p class="gmail_msg"><span class="gmail_msg"><br class="gmail_msg">
</span></p>
<p class="gmail_msg"><span class="gmail_msg">This is what my beans.xml looks like:</span></p>
<p class="gmail_msg"><span class="gmail_msg"><br class="gmail_msg">
</span></p>
<p class="gmail_msg"><span class="gmail_msg"></span></p>
<div class="gmail_msg">&lt;beans xmlns=&quot;<a href="http://xmlns.jcp.org/xml/ns/javaee" class="gmail_msg" target="_blank">http://xmlns.jcp.org/xml/ns/javaee</a>&quot; bean-discovery-mode=&quot;annotated&quot; version=&quot;2.0&quot;&gt;</div>
<div class="gmail_msg">&lt;/beans&gt;</div>
<br class="gmail_msg">
<p class="gmail_msg"></p>
<p class="gmail_msg"><span class="gmail_msg">Only when I change to all does it run fine...&nbsp; You can see the full example at&nbsp;<a href="https://github.com/johnament/cdi-2.0-presentations/blob/master/cdi2conference/src/main/java/ws/ament/cdi/se/extensions/BeanDiscoverer.java" class="m_2560997016784671564OWAAutoLink gmail_msg" id="m_2560997016784671564LPlnk843033" target="_blank">https://github.com/johnament/cdi-2.0-presentations/blob/master/cdi2conference/src/main/java/ws/ament/cdi/se/extensions/BeanDiscoverer.java</a>&nbsp;so
 I'm curious to know if there's anything different between our setups.</span><br class="gmail_msg">
</p>
<p class="gmail_msg"><br class="gmail_msg">
</p>
<p class="gmail_msg">John</p>
<div id="m_2560997016784671564Signature" class="gmail_msg">
<div id="m_2560997016784671564divtagdefaultwrapper" dir="ltr" class="gmail_msg" style="font-size:12pt; color:#000000; background-color:#ffffff; font-family:Calibri,Arial,Helvetica,sans-serif">
<p class="gmail_msg"></p>
</div>
</div>
<br class="gmail_msg">
<br class="gmail_msg">
<div class="gmail_msg" style="color:rgb(0,0,0)">
<hr class="gmail_msg" style="display:inline-block; width:98%">
<div id="m_2560997016784671564divRplyFwdMsg" dir="ltr" class="gmail_msg"><font face="Calibri, sans-serif" color="#000000" class="gmail_msg" style="font-size:11pt"><b class="gmail_msg">From:</b> Laird Nelson &lt;<a href="mailto:ljnelson@gmail.com" class="gmail_msg" target="_blank">ljnelson@gmail.com</a>&gt;<br class="gmail_msg">
<b class="gmail_msg">Sent:</b> Monday, March 20, 2017 1:24 PM<br class="gmail_msg">
<b class="gmail_msg">To:</b> John Ament; Martin Kouba; cdi-dev</font></div>
</div>
</div>
</div>
<div dir="ltr" class="gmail_msg">
<div id="m_2560997016784671564divtagdefaultwrapper" dir="ltr" class="gmail_msg" style="font-size:12pt; color:#000000; font-family:Calibri,Arial,Helvetica,sans-serif">
<div class="gmail_msg" style="color:rgb(0,0,0)">
<div id="m_2560997016784671564divRplyFwdMsg" dir="ltr" class="gmail_msg"><font face="Calibri, sans-serif" color="#000000" class="gmail_msg" style="font-size:11pt"><br class="gmail_msg">
<b class="gmail_msg">Subject:</b> Re: [cdi-dev] Bean discovery question</font></div>
</div>
</div>
</div>
<div dir="ltr" class="gmail_msg">
<div id="m_2560997016784671564divtagdefaultwrapper" dir="ltr" class="gmail_msg" style="font-size:12pt; color:#000000; font-family:Calibri,Arial,Helvetica,sans-serif">
<div class="gmail_msg" style="color:rgb(0,0,0)">
<div class="gmail_msg">
<div dir="ltr" class="gmail_msg">SE, and the initializer is brain-dead simple.
<div class="gmail_msg"><br class="gmail_msg">
</div>
<div class="gmail_msg"><font face="monospace" class="gmail_msg">final SeContainerInitializer initializer = SeContainerInitializer.newInstance();</font></div>
<div class="gmail_msg"><font face="monospace" class="gmail_msg">assert initializer != null;</font></div>
<div class="gmail_msg"><font face="monospace" class="gmail_msg">try (final SeContainer container = initializer.initialize()) {</font></div>
<div class="gmail_msg"><font face="monospace" class="gmail_msg">&nbsp; assert container != null;</font></div>
<div class="gmail_msg"><font face="monospace" class="gmail_msg">}</font></div>
<div class="gmail_msg"><br class="gmail_msg">
</div>
<div class="gmail_msg">Best,</div>
<div class="gmail_msg">Laird</div>
</div>
<br class="gmail_msg">
<div class="gmail_quote gmail_msg">
<div dir="ltr" class="gmail_msg">On Mon, Mar 20, 2017 at 10:21 AM John Ament &lt;<a href="mailto:john.ament@spartasystems.com" class="gmail_msg" target="_blank">john.ament@spartasystems.com</a>&gt; wrote:<br class="gmail_msg">
</div>
<blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex; border-left:1px #ccc solid; padding-left:1ex">
<div dir="ltr" class="gmail_msg">
<div id="m_2560997016784671564m_8602380584706632731divtagdefaultwrapper" dir="ltr" class="gmail_msg" style="font-size:12pt; color:#000000; font-family:Calibri,Arial,Helvetica,sans-serif">
<p class="gmail_msg">Since you're mentioning a fledgling project and CDI 2.0, are you using SE mode of CDI, or is this within a container (and I'm guessing some custom integration)?&nbsp; If you're using SE, what does your SEContainerInitializer lines look like?</p>
<p class="gmail_msg"><br class="gmail_msg">
</p>
<p class="gmail_msg">John</p>
<div id="m_2560997016784671564m_8602380584706632731Signature" class="gmail_msg">
<div id="m_2560997016784671564m_8602380584706632731divtagdefaultwrapper" dir="ltr" class="gmail_msg" style="font-size:12pt; color:#000000; background-color:#ffffff; font-family:Calibri,Arial,Helvetica,sans-serif">
<div class="gmail_msg" style="color:rgb(33,33,33); font-size:15px; margin:0px"><br class="gmail_msg">
</div>
<p class="gmail_msg"></p>
</div>
</div>
<br class="gmail_msg">
<br class="gmail_msg">
<div class="gmail_msg" style="color:rgb(0,0,0)">
<hr class="gmail_msg" style="display:inline-block; width:98%">
<div id="m_2560997016784671564m_8602380584706632731divRplyFwdMsg" dir="ltr" class="gmail_msg">
<font face="Calibri, sans-serif" color="#000000" class="gmail_msg" style="font-size:11pt"><b class="gmail_msg">From:</b>
<a href="mailto:cdi-dev-bounces@lists.jboss.org" class="gmail_msg" target="_blank">
cdi-dev-bounces@lists.jboss.org</a> &lt;<a href="mailto:cdi-dev-bounces@lists.jboss.org" class="gmail_msg" target="_blank">cdi-dev-bounces@lists.jboss.org</a>&gt; on behalf of Laird Nelson &lt;<a href="mailto:ljnelson@gmail.com" class="gmail_msg" target="_blank">ljnelson@gmail.com</a>&gt;<br class="gmail_msg">
<b class="gmail_msg">Sent:</b> Monday, March 20, 2017 11:12 AM<br class="gmail_msg">
<b class="gmail_msg">To:</b> Martin Kouba; cdi-dev<br class="gmail_msg">
<b class="gmail_msg">Subject:</b> Re: [cdi-dev] Bean discovery question</font>
<div class="gmail_msg">&nbsp;</div>
</div>
</div>
</div>
</div>
<div dir="ltr" class="gmail_msg">
<div id="m_2560997016784671564m_8602380584706632731divtagdefaultwrapper" dir="ltr" class="gmail_msg" style="font-size:12pt; color:#000000; font-family:Calibri,Arial,Helvetica,sans-serif">
<div class="gmail_msg" style="color:rgb(0,0,0)">
<div class="gmail_msg">
<div dir="ltr" class="gmail_msg">
<div class="gmail_quote gmail_msg">
<div dir="ltr" class="gmail_msg">On Mon, Mar 20, 2017 at 12:26 AM Martin Kouba &lt;<a href="mailto:mkouba@redhat.com" class="gmail_msg" target="_blank">mkouba@redhat.com</a>&gt; wrote:<br class="gmail_msg">
</div>
<blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex; border-left:1px #ccc solid; padding-left:1ex">
Weld version? Environment? Deployment structure?<br class="gmail_msg">
</blockquote>
<div class="gmail_msg"><br class="gmail_msg">
</div>
<div class="gmail_msg">3.0.0-CR2 (CDI 2.0-PFD).</div>
<div class="gmail_msg">Fledgling project containing only the extension at the moment, so no beans.</div>
<div class="gmail_msg">&nbsp;</div>
<blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex; border-left:1px #ccc solid; padding-left:1ex">
I think the Producers class should not be discovered. So it looks like a<br class="gmail_msg">
bug or misconfiguration.<br class="gmail_msg">
</blockquote>
<div class="gmail_msg"><br class="gmail_msg">
</div>
<div class="gmail_msg">Thank you; I'll file a bug once I have time to put together a test case.</div>
<div class="gmail_msg"><br class="gmail_msg">
</div>
<div class="gmail_msg">Best,</div>
<div class="gmail_msg">Laird</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div dir="ltr" class="gmail_msg">
<div id="m_2560997016784671564m_8602380584706632731divtagdefaultwrapper" dir="ltr" class="gmail_msg" style="font-size:12pt; color:#000000; font-family:Calibri,Arial,Helvetica,sans-serif">
<div class="gmail_msg" style="color:rgb(0,0,0)"></div>
</div>
<hr class="gmail_msg">
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. </div>
</blockquote>
</div>
</div>
</div>
</div>
</div>
<div dir="ltr" class="gmail_msg">
<hr class="gmail_msg">
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. </div>
</blockquote>
</div>
</div>
</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>