The context class loader when running in Geronimo is not the system class loader. So it's not strange that the behavior is different.
What OS are you running these on? What do you want to achieve exactly? Update jar files constantly?
I using Geronimo 2.1.4 & Sun JDK 188.8.131.52.
When executing the following code on Geronimo server,
ClassLoader loader = Thread.currentThread().getContextClassLoader();
URL url = loader.getResource("javax/servlet/http/");
JarURLConnection conn1 = (JarURLConnection) url.openConnection();
JarFile jarFile1 = conn1.getJarFile();
JarURLConnection conn2 = (JarURLConnection) url.openConnection();
JarFile jarFile2 = conn2.getJarFile();
there is a problem that "jarFile1" and "jarFile2" are same instances.
When executing on Eclipse console, the variables are difference instances.
(In addition, when "useCaches" property is true, those are same instances.)
How should there be this problem?