Hi Ales,
Thanks for getting involved in my problem.
I want to change the code to introduce new traces as I want to understand how things work.
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.
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:
protected Class<?> doLoadClass(String name, boolean resolve, boolean trace) throws ClassNotFoundException
{
Class<?> result;
// LIONEL
if (trace)
log.trace(this + " doLoadClass prepared for " + name );
synchronized (this)
{
// JBCL-114: did we lose the race to the synchronized?
result = isLoadedClass(name, trace);
// Not already loaded use the domain
if (result == null)
result = loadClassFromDomain(name, trace);
// Still not found
if (result == null)
return null;
// LIONEL
if (trace)
log.trace(this + " doLoadClass actually loaded " + name );
// Link the class if requested
if (resolve)
{
if (trace)
log.trace(this + " resolveClass " + ClassLoaderUtils.classToString(result));
resolveClass(result);
}
return result;
}
}
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).
So thanks to help to recompile it.
Lionel