Deane,
I checked in the new classloader stuff, and removed the 
extensions.properties files.  I accidentally got the desktop to work 
again, but there may be url -> xml issues.  The new classloader is 
JNLPClassLoader.  It's fairly clean, but I would like to get rid of the 
getExtensionName and getExtensionHREF methods.  I think this would 
improve the DCF codes too, since they could just get the JNLPFile and 
use that instead of getting each part seperately.  Or the ExtensionName 
should at least be unnecessary since it loads from a URL directly 
instead of looking it up in a table.  You mentioned that this might be 
bad because the files might move, but it may be better because the local 
system could now read 'documents' that were created on other systems 
that 'knew about' more extensions than the local one, if a network 
location for the extension was used there.
Anyway, it seems to work.  It uses a really simple cache instead of 
hooking into cachemgr (I didnt' know if cachmgr was thread safe and 
there were enough potential problems to worry about!).  I propose a new 
cache policy, where instead of checking for and downloading new versions 
immediately, apps are run with the old version in cache and then the new 
version is downloaded while it is running, and used when the apps is 
launched at a later time.  This should dramatically increase startup 
time... check out
   http://www.gentleware.com/download/Poseidon4umlJWS.jnlp
for an example (have to turn off security to get it to work); it's got 
~25 jars that used to be checked for being up-to-date each time it was 
run, initial startup going from ~22 seconds (depending on trans-Atlantic 
congestion) from the cache to ~1 second.  Check out CacheUtil in jnlp 
dir for where hooks into the cache would go.
Also I removed the IExtensionLoader interface to the classloader... if 
code is hard-wired to the jnlp classloader it won't matter if it is 
using an interface or class.
Jam
  |