Commit 69c7b827 by Michael Koch Committed by Michael Koch

RMIClassLoader.java: Removed unused imports, little reformatings.

2003-10-09  Michael Koch  <konqueror@gmx.de>

	* java/rmi/server/RMIClassLoader.java:
	Removed unused imports, little reformatings.
	(getClassLoader): New method, implementation was part of old loadCLass
	method.
	(loadClass): Simplified by moving functionality to new method and
	reworking the code a bit.
	(getClassAnnotation): Merged documentation from classpath.

From-SVN: r72267
parent cf48cabb
2003-10-09 Michael Koch <konqueror@gmx.de> 2003-10-09 Michael Koch <konqueror@gmx.de>
* java/rmi/server/RMIClassLoader.java:
Removed unused imports, little reformatings.
(getClassLoader): New method, implementation was part of old loadCLass
method.
(loadClass): Simplified by moving functionality to new method and
reworking the code a bit.
(getClassAnnotation): Merged documentation from classpath.
2003-10-09 Michael Koch <konqueror@gmx.de>
* java/math/BigInteger.java * java/math/BigInteger.java
(add): Removed unused local variable len. (add): Removed unused local variable len.
......
...@@ -40,17 +40,11 @@ package java.rmi.server; ...@@ -40,17 +40,11 @@ package java.rmi.server;
import java.net.MalformedURLException; import java.net.MalformedURLException;
import java.net.URL; import java.net.URL;
import java.net.URLConnection;
import java.net.URLClassLoader; import java.net.URLClassLoader;
import java.io.IOException;
import java.io.DataInputStream;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Hashtable; import java.util.Hashtable;
import java.util.Map; import java.util.Map;
import java.util.StringTokenizer; import java.util.StringTokenizer;
import java.util.WeakHashMap;
/** /**
...@@ -106,6 +100,7 @@ public class RMIClassLoader ...@@ -106,6 +100,7 @@ public class RMIClassLoader
//defaultAnnotation is got from system property //defaultAnnotation is got from system property
// "java.rmi.server.defaultAnnotation" // "java.rmi.server.defaultAnnotation"
private static String defaultAnnotation; private static String defaultAnnotation;
//URL object for defaultAnnotation //URL object for defaultAnnotation
private static URL defaultCodebase; private static URL defaultCodebase;
...@@ -121,19 +116,19 @@ public class RMIClassLoader ...@@ -121,19 +116,19 @@ public class RMIClassLoader
defaultAnnotation = System.getProperty ("java.rmi.server.defaultAnnotation"); defaultAnnotation = System.getProperty ("java.rmi.server.defaultAnnotation");
try try
{ {
if (defaultAnnotation != null) if (defaultAnnotation != null)
defaultCodebase = new URL (defaultAnnotation); defaultCodebase = new URL (defaultAnnotation);
} }
catch (Exception _) catch (Exception _)
{ {
defaultCodebase = null; defaultCodebase = null;
} }
if (defaultCodebase != null) if (defaultCodebase != null)
{ {
defaultLoader = new MyClassLoader(new URL[]{ defaultCodebase }, defaultLoader = new MyClassLoader (new URL[] { defaultCodebase }, null,
null, defaultAnnotation); defaultAnnotation);
cacheLoaders.put(defaultAnnotation, defaultLoader); cacheLoaders.put(defaultAnnotation, defaultLoader);
} }
} }
...@@ -150,49 +145,87 @@ public class RMIClassLoader ...@@ -150,49 +145,87 @@ public class RMIClassLoader
public static Class loadClass (String codebases, String name) public static Class loadClass (String codebases, String name)
throws MalformedURLException, ClassNotFoundException throws MalformedURLException, ClassNotFoundException
{ {
Class c = null;
ClassLoader loader = Thread.currentThread().getContextClassLoader(); ClassLoader loader = Thread.currentThread().getContextClassLoader();
//try context class loader first //try context class loader first
try try
{ {
c = loader.loadClass(name); return loader.loadClass (name);
}
catch (ClassNotFoundException e)
{
// class not found in the local classpath
} }
catch(ClassNotFoundException e) {}
if (c != null)
return c;
if (codebases.length() == 0) //=="" if (codebases.length() == 0) //==""
loader = defaultLoader;
else
{ {
loader = (ClassLoader)cacheLoaders.get(codebases); loader = defaultLoader;
if (loader == null) }
{ else
//create an entry in cacheLoaders mapping a loader to codebases. {
loader = getClassLoader(codebases);
// codebases are separated by " " }
StringTokenizer tok = new StringTokenizer(codebases, " ");
ArrayList urls = new ArrayList(); if (loader == null)
while (tok.hasMoreTokens()) {
urls.add(new URL(tok.nextToken())); //do not throw NullPointerException
throw new ClassNotFoundException ("Could not find class (" + name +
loader = new MyClassLoader((URL[])urls.toArray(new URL[urls.size()]), ") at codebase (" + codebases + ")");
null, codebases);
cacheLoaders.put(codebases, loader);
}
} }
return loader.loadClass (name);
}
return loader.loadClass(name); /**
* Gets a classloader for the given codebase and with the current
* context classloader as parent.
*
* @param codebases
*
* @return a classloader for the given codebase
*
* @throws MalformedURLException if the codebase contains a malformed URL
*/
private static ClassLoader getClassLoader (String codebases)
throws MalformedURLException
{
ClassLoader loader = (ClassLoader) cacheLoaders.get (codebases);
if (loader == null)
{
//create an entry in cacheLoaders mapping a loader to codebases.
// codebases are separated by " "
StringTokenizer tok = new StringTokenizer (codebases, " ");
ArrayList urls = new ArrayList();
while (tok.hasMoreTokens())
urls.add (new URL (tok.nextToken()));
loader = new MyClassLoader ((URL[]) urls.toArray (new URL [urls.size()]),
null, codebases);
cacheLoaders.put (codebases, loader);
}
return loader;
} }
public static String getClassAnnotation(Class cl) /**
* Returns a string representation of the network location where a remote
* endpoint can get the class-definition of the given class.
*
* @param cl
*
* @return a space seperated list of URLs where the class-definition
* of cl may be found
*/
public static String getClassAnnotation (Class cl)
{ {
ClassLoader loader = cl.getClassLoader(); ClassLoader loader = cl.getClassLoader();
if (loader == null || loader == ClassLoader.getSystemClassLoader())
if (loader == null
|| loader == ClassLoader.getSystemClassLoader())
{ {
return null; //?? return System.getProperty ("java.rmi.server.codebase");
} }
if (loader instanceof MyClassLoader) if (loader instanceof MyClassLoader)
...@@ -203,26 +236,29 @@ public class RMIClassLoader ...@@ -203,26 +236,29 @@ public class RMIClassLoader
String s = (String) cacheAnnotations.get (loader); String s = (String) cacheAnnotations.get (loader);
if (s != null) if (s != null)
{ return s;
return s;
}
if (loader instanceof URLClassLoader) if (loader instanceof URLClassLoader)
{ {
URL[] urls = ((URLClassLoader)loader).getURLs(); URL[] urls = ((URLClassLoader) loader).getURLs();
if(urls.length == 0)
return null; if (urls.length == 0)
return null;
StringBuffer annotation = new StringBuffer(64*urls.length);
for(int i = 0; i < urls.length; i++) StringBuffer annotation = new StringBuffer (64 * urls.length);
{
annotation.append(urls[i].toExternalForm()); for (int i = 0; i < urls.length; i++)
annotation.append(' '); {
} annotation.append (urls [i].toExternalForm());
s = annotation.toString(); annotation.append (' ');
cacheAnnotations.put(loader, s); }
s = annotation.toString();
cacheAnnotations.put (loader, s);
return s;
} }
return null;
return System.getProperty ("java.rmi.server.codebase");
} }
/** /**
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment