<!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="https://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;">
    Re: How to re-compile a class loader
</h3>
<span style="margin-bottom: 10px;">
    created by <a href="https://community.jboss.org/people/lavot">lavot</a> in <i>JBoss Microcontainer</i> - <a href="https://community.jboss.org/message/746219#746219">View the full discussion</a>
</span>
<hr style="margin: 20px 0; border: none; background-color: #dadada; height: 1px;">

<div class="jive-rendered-content"><p>Hi Ales,</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Thanks for getting involved in my problem.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>I want to change the code to introduce new traces as I want to understand how things work.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Once the traffic is established which means that all the code has been executed once so all the classes are supposed to be loaded there are still some threads that go to block on the synchronize in doLoad(). I would have expected that they exit from loadClass() after the isLoaded() check.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>So I want to introduce some little changes in doLoad() to trace which class is preparing to load (at the beginning of doLoad()) and which one actually loaded (at the end). Something like that:</p><p>&#160;&#160; protected Class&lt;?&gt; doLoadClass(String name, boolean resolve, boolean trace) throws ClassNotFoundException</p><p>&#160;&#160; {</p><p>&#160;&#160;&#160;&#160;&#160; Class&lt;?&gt; result;</p><p>&#160;&#160;&#160;&#160;&#160; </p><p>&#160;&#160;&#160;&#160;&#160; // LIONEL</p><p>&#160;&#160;&#160;&#160;&#160; if (trace)</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; log.trace(this + " doLoadClass prepared for " + name );</p><p>&#160;&#160;&#160;&#160;&#160; </p><p>&#160;&#160;&#160;&#160;&#160; synchronized (this)</p><p>&#160;&#160;&#160;&#160;&#160; {</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // JBCL-114: did we lose the race to the synchronized?</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; result = isLoadedClass(name, trace);</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // Not already loaded use the domain</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if (result == null)</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; result = loadClassFromDomain(name, trace);</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // Still not found</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if (result == null)</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; return null;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; // LIONEL</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; if (trace)</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; log.trace(this + " doLoadClass actually loaded " + name );</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // Link the class if requested</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if (resolve)</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if (trace)</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; log.trace(this + " resolveClass " + ClassLoaderUtils.classToString(result));</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; resolveClass(result);</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; return result;</p><p>&#160;&#160;&#160;&#160;&#160; }</p><p>&#160;&#160; }</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>From my traces, all the classes seem to be already loaded but why isn't this determined at the first isLoaded() check in loadClass() (which is not synchronized).</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>So thanks to help to recompile it.</p><p>Lionel</p></div>

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


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

</div>

</body>
</html>