<!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;">
    Issues with modular classloading
</h3>
<span style="margin-bottom: 10px;">
    created by <a href="http://community.jboss.org/people/bstansberry%40jboss.com">Brian Stansberry</a> in <i>JBoss AS7 Development</i> - <a href="http://community.jboss.org/message/565849#565849">View the full discussion</a>
</span>
<hr style="margin: 20px 0; border: none; background-color: #dadada; height: 1px;">

<div class="jive-rendered-content"><p>I've been experimenting with deploying managed bean jars and with sars, and am finding some classloading related problems. These don't show up in the tests in the sar and managedbean modules, probably because those tests aren't using a modular classpath.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>First involves deploying a jar with managed beans:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><pre class="jive-pre"><code class="jive-code">22:52:37,610 INFO&#160; [deployment] Activating deployment: managedBeanDeployment.jar
22:52:44,689 INFO&#160; [managedbean] Starting managed bean service jboss.managed.bean.managedBeanDeployment_jar.TestBean
23:03:53,377 ERROR [deployment] Caught exception handling update (param is 13fde2d1-661b-499f-87e4-c955493c4a56): org.jboss.msc.service.StartException in service service jboss.managed.bean.managedBeanDeployment_jar.TestBeanWithInjection: Failed to start service
&#160;&#160;&#160; at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1037)
&#160;&#160;&#160; at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [:1.6.0_20]
&#160;&#160;&#160; at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [:1.6.0_20]
&#160;&#160;&#160; at java.lang.Thread.run(Thread.java:637) [:1.6.0_20]
Caused by: org.jboss.msc.inject.InjectionException: Injecting the wrong type (expected class org.jboss.as.deployment.managedbean.TestManagedBean, got class javax.naming.Reference)
&#160;&#160;&#160; at org.jboss.msc.inject.CastingInjector.inject(CastingInjector.java:51)
&#160;&#160;&#160; at org.jboss.msc.service.ServiceControllerImpl.doInject(ServiceControllerImpl.java:729)
&#160;&#160;&#160; at org.jboss.msc.service.ServiceControllerImpl.access$1100(ServiceControllerImpl.java:122)
&#160;&#160;&#160; at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:986)
&#160;&#160;&#160; ... 3 more
Caused by: java.lang.ClassCastException
&#160;&#160;&#160; at java.lang.Class.cast(Class.java:2990) [:1.6.0_20]
&#160;&#160;&#160; at org.jboss.msc.inject.CastingInjector.inject(CastingInjector.java:49)
&#160;&#160;&#160; ... 6 more
</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>What's happening here is during start of a ManagedBeanService, an injection from a ResourceBinder is occuring. ResourceBinder.getValue() is doing a naming lookup. The lookup finds a LinkRef and tries to resolve it. Resolving it fails because the LinkRef points to a Reference. Reference has a classfactory "org.jboss.as.deployment.managedbean.container.ManagedBeanObjectFactory".&#160; NamingManager tries to load that class and can't.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Tricky bit here is the thread involved is an MSC start task thread, so it's not a user request thread where we can readily set the TCCL.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>The problem could be that we are doing this injection at this point in the first place? I haven't looked enough at how this service works to say.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>If the lookup actually needs to happen during the start task, then we need some more smarts to get the classloading right. Perhaps in ResourceBinder.getValue(), perhaps with a custom ObjectFactoryBuilder that can do modular classloading, perhaps...</p></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/565849#565849">going to Community</a></p>
        <p style="margin: 0;">Start a new discussion in JBoss AS7 Development at <a href="http://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2225">Community</a></p>
</div></td>
                        </tr>
                    </tbody>
                </table>


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

</div>

</body>
</html>