Sorry it's taken me a week to get back to you on this. Class-reloading is
not working in the latest nightly build. I know why, but don't know what the
fix is.

The problem is in StandardClassLoader::loadClass. This method checks that
the class exists, if it does it wants to add it to the classCache HashMap.
To do this loadCLass has a loop that loops around all the 'repositories'
These repositories are the .jar files in the web-inf lib directory. In the
loop it does this

classCache.put(name, new ClassCacheEntry
     (clazz, classUrl,
      classUrlConnection.getLastModified()));

but the loop never breaks, so if you have 4 jars in your lib directory code
loops 5 times (once for the classes sub dir and once for each jar) and the
'last' jar in wins. So the classes in my classes directory get added as

"jar:jndi:/localhost/AddressBook/WEB-INF/lib/xerces.jar!/com/develop/ewebjav
a/lab/Browse.class"

The code should check which 'repository' the class is in and only add that
entry to the directory. Of course removing all the jars or putting a break
after the first loop (a brutal but effective solution in my case) fixes the
problem.

Hope this helps,

Kevin Jones
DevelopMentor
www.develop.com

Reply via email to