<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<body link="#355491" alink="#4262a1" vlink="#355491" style="background: #e2e2e2; margin: 0; padding: 20px;">

<div>
        <table cellpadding="0" bgcolor="#FFFFFF" border="0" cellspacing="0" style="border: 1px solid #dadada; margin-bottom: 30px; width: 100%; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
                <tbody>
                        <tr>

                                <td>

                                        <table border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" style="border: solid 2px #ccc; background: #dadada; width: 100%; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
                                                <tbody>
                                                        <tr>
                                                                <td bgcolor="#000000" valign="middle" height="58px" style="border-bottom: 1px solid #ccc; padding: 20px; -moz-border-radius-topleft: 3px; -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 5px; -webkit-border-top-left-radius: 5px;">
                                                                        <h1 style="color: #333333; font: bold 22px Arial, Helvetica, sans-serif; margin: 0; display: block !important;">
                                                                        <!-- To have a header image/logo replace the name below with your img tag -->
                                                                        <!-- Email clients will render the images when the message is read so any image -->
                                                                        <!-- must be made available on a public server, so that all recipients can load the image. -->
                                                                        <a href="http://community.jboss.org/index.jspa" style="text-decoration: none; color: #E1E1E1">JBoss Community</a></h1>
                                                                </td>

                                                        </tr>
                                                        <tr>
                                                                <td bgcolor="#FFFFFF" style="font: normal 12px Arial, Helvetica, sans-serif; color:#333333; padding: 20px;  -moz-border-radius-bottomleft: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 5px; -webkit-border-bottom-left-radius: 5px;"><h3 style="margin: 10px 0 5px; font-size: 17px; font-weight: normal;">
    Weld - pull from MC
</h3>
<span style="margin-bottom: 10px;">
    created by <a href="http://community.jboss.org/people/kabir.khan%40jboss.com">Kabir Khan</a> in <i>JBoss Microcontainer Development</i> - <a href="http://community.jboss.org/message/549944#549944">View the full discussion</a>
</span>
<hr style="margin: 20px 0; border: none; background-color: #dadada; height: 1px;">

<div class="jive-rendered-content"><div id="_mcePaste">I have experimented with an alternate implementation of the weld-mc integration as discussed in Boston. I still need to write more tests but wanted to let the Weld guys know where I am at.</div><div> </div><div id="_mcePaste"> </div><div id="_mcePaste">The idea is to "pull" data from the MC in special cases, which is different from the "push" we do at the moment for MC beans annotated with @WeldEnabled. I had a look at using the InjectionServices interface, but this has the following problems:</div><div id="_mcePaste">-It does not get triggered when calling constructors</div><div id="_mcePaste">-If using a separate @McInject annotation instead of @Inject to do injection the annotated field does not appear in invocation context's injection points meaning all the fields etc. need to be parsed from invocation context's target's class (I am not sure if the target will always be non-null?)</div><div id="_mcePaste">-If using the @Inject annotation with an additional @Mc annotation (to look up the particular injection point in the MC) falls over when calling proceed(), also again a problem is that you need to iterate over all fields etc. to look for the members. This also fails in the validation phase.</div><div id="_mcePaste"> </div><div id="_mcePaste">As mentioned the ability to do this injection from MC is something that most Weld applications would not want to do. What I have locally now is an extra service that can handle this:</div><div> </div><div id="_mcePaste"> </div><pre class="jive-pre"><code class="jive-code jive-java"><font color="navy"><b>package</b></font> org.jboss.temp.weld.spi;
 
<font color="navy"><b>import</b></font> java.lang.annotation.Annotation;
<font color="navy"><b>import</b></font> java.util.Iterator;
 
<font color="navy"><b>import</b></font> org.jboss.weld.bootstrap.api.Service;
 
 
<font color="navy"><b>public</b></font> <font color="navy"><b>interface</b></font> ExternalLookupRegistryService <font color="navy"><b>extends</b></font> Service
<font color="navy">{</font>
&#160;&#160; Iterable&lt;ExternalLookup&lt;?&gt;&gt; getExternalLookups();
&#160;&#160; 
&#160;&#160; <font color="navy"><b>void</b></font> addExternalLookup(ExternalLookup&lt;?&gt; externalLookup);
&#160;&#160; 
&#160;&#160; <font color="navy"><b>boolean</b></font> removeExternalLookup(Class&lt;? <font color="navy"><b>extends</b></font> Annotation&gt; clazz);
<font color="navy">}</font>
</code></pre><div id="_mcePaste"> </div><div id="_mcePaste">And then a service to handle particular annotations</div><div id="_mcePaste"> </div><div id="_mcePaste"> </div><pre class="jive-pre"><code class="jive-code jive-java"><font color="navy"><b>package</b></font> org.jboss.temp.weld.spi;
 
<font color="navy"><b>import</b></font> java.lang.annotation.Annotation;
<font color="navy"><b>import</b></font> java.lang.reflect.Type;
<font color="navy"><b>import</b></font> java.util.Set;
 
<font color="navy"><b>public</b></font> <font color="navy"><b>interface</b></font> ExternalLookup&lt;T <font color="navy"><b>extends</b></font> Annotation&gt;
<font color="navy">{</font>
&#160;&#160; Class&lt;T&gt; getAnnotation();
&#160;&#160; 
&#160;&#160; <font color="navy"><b>boolean</b></font> isValid(Type type, Set&lt;Annotation&gt; qualifiers);
&#160;&#160; 
&#160;&#160; Object lookupValue(Type type, Set&lt;Annotation&gt; qualifiers);
<font color="navy">}</font>
</code></pre><div id="_mcePaste"> </div><div id="_mcePaste">I'm hoping to be able to push these interfaces into the main spi, the temp location I am using is just while playing.</div><div id="_mcePaste"> </div><div id="_mcePaste">Then I have modified the Validator and Field-/ParameterInjectionPoint to look for this service when validating/injecting:</div><div id="_mcePaste"> </div><blockquote class="jive-quote"><div id="_mcePaste">[kabir ~/sourcecontrol/weld/core/subversion]</div><div id="_mcePaste">$svn diff impl/src/main/java/org/jboss/weld/bootstrap/Validator.java</div><div id="_mcePaste">Index: impl/src/main/java/org/jboss/weld/bootstrap/Validator.java</div><div id="_mcePaste">===================================================================</div><div id="_mcePaste">--- impl/src/main/java/org/jboss/weld/bootstrap/Validator.java&#160;&#160;&#160;&#160;&#160;(revision 6577)</div><div id="_mcePaste">+++ impl/src/main/java/org/jboss/weld/bootstrap/Validator.java&#160;&#160;&#160;&#160;&#160;(working copy)</div><div id="_mcePaste">@@ -83,6 +83,8 @@</div><div id="_mcePaste"> import javax.inject.Scope;</div><div id="_mcePaste"> </div><div id="_mcePaste"> import org.jboss.interceptor.model.InterceptionModel;</div><div id="_mcePaste">+import org.jboss.temp.weld.spi.ExternalLookup;</div><div id="_mcePaste">+import org.jboss.temp.weld.spi.ExternalLookupRegistryService;</div><div id="_mcePaste"> import org.jboss.weld.bean.AbstractClassBean;</div><div id="_mcePaste"> import org.jboss.weld.bean.AbstractProducerBean;</div><div id="_mcePaste"> import org.jboss.weld.bean.DisposalMethod;</div><div id="_mcePaste">@@ -288,6 +290,16 @@</div><div id="_mcePaste">&#160;&#160;&#160;&#160;&#160;&#160; Set&lt;?&gt; resolvedBeans = beanManager.getBeanResolver().resolve(beanManager.getBeans(ij));</div><div id="_mcePaste">&#160;&#160;&#160;&#160;&#160;&#160; if (!isInjectionPointSatisfied(ij, resolvedBeans, beanManager))</div><div id="_mcePaste">&#160;&#160;&#160;&#160;&#160;&#160; {</div><div id="_mcePaste">+&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ExternalLookupRegistryService service = beanManager.getServices().get(ExternalLookupRegistryService.class);</div><div id="_mcePaste">+&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if (service != null)</div><div id="_mcePaste">+&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {</div><div id="_mcePaste">+&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; for (ExternalLookup&lt;?&gt; lookup : service.getExternalLookups())</div><div id="_mcePaste">+&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {</div><div id="_mcePaste">+&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if (ij.getAnnotated().isAnnotationPresent(lookup.getAnnotation()))</div><div id="_mcePaste">+&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if (lookup.isValid(ij.getType(), ij.getQualifiers()))</div><div id="_mcePaste">+&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; return;</div><div id="_mcePaste">+&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</div><div id="_mcePaste">+&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</div><div id="_mcePaste">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; throw new DeploymentException(INJECTION_POINT_HAS_UNSATISFIED_DEPENDENCIES, ij, Arrays.toString(bindings));</div><div id="_mcePaste">&#160;&#160;&#160;&#160;&#160;&#160; }</div><div id="_mcePaste">&#160;&#160;&#160;&#160;&#160;&#160; if (resolvedBeans.size() &gt; 1 &amp;&amp; !ij.isDelegate())</div><div id="_mcePaste"> </div><div id="_mcePaste"> </div><div id="_mcePaste"> </div><div id="_mcePaste">[kabir ~/sourcecontrol/weld/core/subversion]</div><div id="_mcePaste">$svn diff impl/src/main/java/org/jboss/weld/injection/</div><div id="_mcePaste">Index: impl/src/main/java/org/jboss/weld/injection/FieldInjectionPoint.java</div><div id="_mcePaste">===================================================================</div><div id="_mcePaste">--- impl/src/main/java/org/jboss/weld/injection/FieldInjectionPoint.java&#160;&#160;&#160;&#160;&#160;(revision 6577)</div><div id="_mcePaste">+++ impl/src/main/java/org/jboss/weld/injection/FieldInjectionPoint.java&#160;&#160;&#160;&#160;&#160;(working copy)</div><div id="_mcePaste">@@ -36,6 +36,8 @@</div><div id="_mcePaste"> import javax.inject.Inject;</div><div id="_mcePaste"> </div><div id="_mcePaste"> import org.jboss.interceptor.util.InterceptionUtils;</div><div id="_mcePaste">+import org.jboss.temp.weld.spi.ExternalLookup;</div><div id="_mcePaste">+import org.jboss.temp.weld.spi.ExternalLookupRegistryService;</div><div id="_mcePaste"> import org.jboss.weld.exceptions.IllegalStateException;</div><div id="_mcePaste"> import org.jboss.weld.exceptions.InvalidObjectException;</div><div id="_mcePaste"> import org.jboss.weld.introspector.ForwardingWeldField;</div><div id="_mcePaste">@@ -114,7 +116,23 @@</div><div id="_mcePaste">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // if declaringInstance is a proxy, unwrap it</div><div id="_mcePaste">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; instanceToInject = InterceptionUtils.getRawInstance(declaringInstance);</div><div id="_mcePaste">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</div><div id="_mcePaste">-&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; delegate().set(instanceToInject, manager.getInjectableReference(this, creationalContext));</div><div id="_mcePaste">+&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </div><div id="_mcePaste">+&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Object value = null;</div><div id="_mcePaste">+&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ExternalLookupRegistryService service = manager.getServices().get(ExternalLookupRegistryService.class);</div><div id="_mcePaste">+&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if (service != null)</div><div id="_mcePaste">+&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {</div><div id="_mcePaste">+&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; for (ExternalLookup&lt;?&gt; lookup : service.getExternalLookups())</div><div id="_mcePaste">+&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {</div><div id="_mcePaste">+&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if (getAnnotation(lookup.getAnnotation()) != null)</div><div id="_mcePaste">+&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; value = lookup.lookupValue(getBaseType(), getQualifiers());</div><div id="_mcePaste">+&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</div><div id="_mcePaste">+&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</div><div id="_mcePaste">+&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </div><div id="_mcePaste">+&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if (value == null)</div><div id="_mcePaste">+&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; value = manager.getInjectableReference(this, creationalContext);</div><div id="_mcePaste">+</div><div id="_mcePaste">+&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </div><div id="_mcePaste">+&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; delegate().set(instanceToInject, value);</div><div id="_mcePaste">&#160;&#160;&#160;&#160;&#160;&#160; }</div><div id="_mcePaste">&#160;&#160;&#160;&#160;&#160;&#160; catch (IllegalArgumentException e)</div><div id="_mcePaste">&#160;&#160;&#160;&#160;&#160;&#160; {</div><div id="_mcePaste">Index: impl/src/main/java/org/jboss/weld/injection/ParameterInjectionPoint.java</div><div id="_mcePaste">===================================================================</div><div id="_mcePaste">--- impl/src/main/java/org/jboss/weld/injection/ParameterInjectionPoint.java&#160;&#160;&#160;&#160;&#160;(revision 6577)</div><div id="_mcePaste">+++ impl/src/main/java/org/jboss/weld/injection/ParameterInjectionPoint.java&#160;&#160;&#160;&#160;&#160;(working copy)</div><div id="_mcePaste">@@ -35,6 +35,8 @@</div><div id="_mcePaste"> import javax.enterprise.inject.spi.Bean;</div><div id="_mcePaste"> import javax.enterprise.inject.spi.Decorator;</div><div id="_mcePaste"> </div><div id="_mcePaste">+import org.jboss.temp.weld.spi.ExternalLookup;</div><div id="_mcePaste">+import org.jboss.temp.weld.spi.ExternalLookupRegistryService;</div><div id="_mcePaste"> import org.jboss.weld.exceptions.IllegalStateException;</div><div id="_mcePaste"> import org.jboss.weld.exceptions.InvalidObjectException;</div><div id="_mcePaste"> import org.jboss.weld.exceptions.UnsupportedOperationException;</div><div id="_mcePaste">@@ -119,6 +121,15 @@</div><div id="_mcePaste">&#160;&#160;&#160; @SuppressWarnings("unchecked")</div><div id="_mcePaste">&#160;&#160;&#160; public T getValueToInject(BeanManagerImpl manager, CreationalContext&lt;?&gt; creationalContext)</div><div id="_mcePaste">&#160;&#160;&#160; {</div><div id="_mcePaste">+&#160;&#160;&#160;&#160;&#160; ExternalLookupRegistryService service = manager.getServices().get(ExternalLookupRegistryService.class);</div><div id="_mcePaste">+&#160;&#160;&#160;&#160;&#160; if (service != null)</div><div id="_mcePaste">+&#160;&#160;&#160;&#160;&#160; {</div><div id="_mcePaste">+&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; for (ExternalLookup&lt;?&gt; lookup : service.getExternalLookups())</div><div id="_mcePaste">+&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {</div><div id="_mcePaste">+&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if (getAnnotation(lookup.getAnnotation()) != null)</div><div id="_mcePaste">+&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; return (T)lookup.lookupValue(getBaseType(), getQualifiers());</div><div id="_mcePaste">+&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</div><div id="_mcePaste">+&#160;&#160;&#160;&#160;&#160; }</div><div id="_mcePaste">&#160;&#160;&#160;&#160;&#160;&#160; return (T) manager.getInjectableReference(this, creationalContext);</div><div id="_mcePaste">&#160;&#160;&#160; }</div></blockquote><div id="_mcePaste"> </div><div id="_mcePaste"> </div><div id="_mcePaste">In my test I have this implementation of the service classes</div><div id="_mcePaste"> </div><pre class="jive-pre"><code class="jive-code jive-java"><font color="navy"><b>public</b></font> <font color="navy"><b>class</b></font> TestExternalLookup <font color="navy"><b>implements</b></font> ExternalLookup&lt;External&gt;
<font color="navy">{</font>
 
&#160;&#160; @Override
&#160;&#160; <font color="navy"><b>public</b></font> <font color="navy"><b>boolean</b></font> isValid(Type type, Set&lt;Annotation&gt; qualifiers)
&#160;&#160; <font color="navy">{</font>
&#160;&#160;&#160;&#160;&#160; <font color="navy"><b>if</b></font> (type == Bar.class)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <font color="navy"><b>return</b></font> <font color="navy"><b>true</b></font>;
&#160;&#160;&#160;&#160;&#160; <font color="navy"><b>return</b></font> <font color="navy"><b>false</b></font>;
&#160;&#160; <font color="navy">}</font>
 
&#160;&#160; @Override
&#160;&#160; <font color="navy"><b>public</b></font> Class&lt;External&gt; getAnnotation()
&#160;&#160; <font color="navy">{</font>
&#160;&#160;&#160;&#160;&#160; <font color="navy"><b>return</b></font> External.class;
&#160;&#160; <font color="navy">}</font>
 
&#160;&#160; @Override
&#160;&#160; <font color="navy"><b>public</b></font> Object lookupValue(Type type, Set&lt;Annotation&gt; qualifiers)
&#160;&#160; <font color="navy">{</font>
&#160;&#160;&#160;&#160;&#160; <font color="navy"><b>if</b></font> (type == Bar.class)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <font color="navy"><b>return</b></font> <font color="navy"><b>new</b></font> BarImpl();
&#160;&#160;&#160;&#160;&#160; <font color="navy"><b>return</b></font> <font color="navy"><b>null</b></font>;
&#160;&#160; <font color="navy">}</font>
&#160;&#160; 
<font color="navy">}</font>
 
<font color="navy"><b>public</b></font> <font color="navy"><b>class</b></font> TestExternalLookupRegistryService <font color="navy"><b>implements</b></font> ExternalLookupRegistryService
<font color="navy">{</font>
&#160;&#160; <font color="navy"><b>private</b></font> Map&lt;Class&lt;? <font color="navy"><b>extends</b></font> Annotation&gt;, ExternalLookup&lt;?&gt;&gt; lookups = Collections.synchronizedMap(<font color="navy"><b>new</b></font> HashMap&lt;Class&lt;? <font color="navy"><b>extends</b></font> Annotation&gt;, ExternalLookup&lt;?&gt;&gt;());
 
&#160;&#160; <font color="navy"><b>public</b></font> <font color="navy"><b>void</b></font> addExternalLookup(ExternalLookup&lt;?&gt; externalLookup)
&#160;&#160; <font color="navy">{</font>
&#160;&#160;&#160;&#160;&#160; lookups.put(externalLookup.getAnnotation(), externalLookup);
&#160;&#160; <font color="navy">}</font>
 
&#160;&#160; <font color="navy"><b>public</b></font> Iterable&lt;ExternalLookup&lt;?&gt;&gt; getExternalLookups()
&#160;&#160; <font color="navy">{</font>
&#160;&#160;&#160;&#160;&#160; <font color="navy"><b>synchronized</b></font> (lookups)
&#160;&#160;&#160;&#160;&#160; <font color="navy">{</font>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <font color="navy"><b>return</b></font> <font color="navy"><b>new</b></font> HashSet&lt;ExternalLookup&lt;?&gt;&gt;(lookups.values());
&#160;&#160;&#160;&#160;&#160; <font color="navy">}</font>
&#160;&#160; <font color="navy">}</font>
 
&#160;&#160; <font color="navy"><b>public</b></font> <font color="navy"><b>boolean</b></font> removeExternalLookup(Class&lt;? <font color="navy"><b>extends</b></font> Annotation&gt; clazz)
&#160;&#160; <font color="navy">{</font>
&#160;&#160;&#160;&#160;&#160; <font color="navy"><b>return</b></font> lookups.remove(clazz) != <font color="navy"><b>null</b></font>;
&#160;&#160; <font color="navy">}</font>
 
&#160;&#160; <font color="navy"><b>public</b></font> <font color="navy"><b>void</b></font> cleanup()
&#160;&#160; <font color="navy">{</font>
&#160;&#160;&#160;&#160;&#160; lookups.clear();
&#160;&#160; <font color="navy">}</font>
<font color="navy">}</font>
</code></pre><div id="_mcePaste"> </div><div id="_mcePaste">I register this service with the deployment and add the TestExternalLookup to it, meaning that when I create an instance of ExternalConstructorInjected the constructor parameter is found in TestExternalLookup.</div><div id="_mcePaste"> </div><pre class="jive-pre"><code class="jive-code jive-java"><font color="navy"><b>public</b></font> <font color="navy"><b>class</b></font> ExternalConstructorInjected
<font color="navy">{</font>
&#160;&#160; 
&#160;&#160; Bar bar;
&#160;&#160; 
&#160;&#160; @Inject
&#160;&#160; <font color="navy"><b>public</b></font> ExternalConstructorInjected(@External Bar bar)
&#160;&#160; <font color="navy">{</font>
&#160;&#160;&#160;&#160;&#160; this.bar = bar;
&#160;&#160; <font color="navy">}</font>
<font color="navy">}</font>
</code></pre><div id="_mcePaste"> </div><div id="_mcePaste">I think Pete is on vacation, so after adding a few more tests I'll add this to a branch somewhere so that it can be included once he okays it.</div><div> </div></div>

<div style="background-color: #f4f4f4; padding: 10px; margin-top: 20px;">
    <p style="margin: 0;">Reply to this message by <a href="http://community.jboss.org/message/549944#549944">going to Community</a></p>
        <p style="margin: 0;">Start a new discussion in JBoss Microcontainer Development at <a href="http://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2115">Community</a></p>
</div></td>
                        </tr>
                    </tbody>
                </table>


                </td>
            </tr>
        </tbody>
    </table>

</div>

</body>
</html>