> Subject: Re: How to create a NetworkClassLoader in JDK1.1.x?
> Author: Volker.Augustin ([EMAIL PROTECTED]) at lon-mime
> Date: 13/03/99 09:09
It tooks me absolutely ages to work
out how to do a simple class loader.
The documentation was terrible. Anyhow,
I did it in the end - see the attachment.
Rich.
--
- Richard Jones. Bibliotech: http://www.bibliotech.co.uk/ -
- Embryonic homepage at: http://www.annexia.org/ -
- You are currently the 3,119,344,290th visitor to this signature. -
- Original message content Copyright (C) 1998 Richard Jones. -
/*
* FLEET Copyright (C) 1998-1999 Richard W.M. Jones.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
* USA.
*
* $Id: URLClassLoader.java,v 1.2 1999/01/16 19:38:01 rich Exp $
*
* $Log: URLClassLoader.java,v $
* Revision 1.2 1999/01/16 19:38:01 rich
* Started to experiment with CORBA for front-end to
* server communications.
*
* Revision 1.1 1999/01/13 17:33:27 rich
* Started to do network update code.
*
*/
import java.net.*;
import java.io.*;
import java.util.*;
/**
* This is a specialized class loader for loading classes
* over the network (or from local storage) from a URL.
*/
public class URLClassLoader extends ClassLoader
{
Hashtable cache = new Hashtable ();
URL codeBase;
/**
* Create a URLClassLoader, giving the
* appropriate codebase (URL). Classes
* are loaded from:
*<pre>
* CODEBASE name .class
*</pre>
*/
public URLClassLoader (URL codeBase)
{
this.codeBase = codeBase;
}
/**
* Load the class. If the class cannot
* be found anywhere else, then we try
* to load it over the network from
*<pre>
* CODEBASE name .class
*</pre>
*/
public synchronized Class loadClass (String className, boolean resolve)
throws ClassNotFoundException
{
// Is it in the cache?
Class c = (Class) cache.get (className);
if (c == null)
{
// Try with the superclass first.
try {
c = super.findSystemClass(className);
return c;
} catch (ClassNotFoundException e) {
// Not a system class.
}
// Try to load it over the network.
byte[] data;
try {
URL url = new URL (codeBase, className + ".class");
URLConnection connection = url.openConnection ();
int length = connection.getContentLength ();
data = new byte [length];
InputStream input = connection.getInputStream ();
try {
input.read (data);
}
finally {
input.close ();
}
}
catch (MalformedURLException ex) {
ex.printStackTrace ();
throw new ClassNotFoundException ("MalformedURLException while loading
class");
}
catch (IOException ex) {
throw new ClassNotFoundException ("IOException while loading class");
}
c = defineClass (data, 0, data.length);
if (c == null)
return null;
cache.put (className, c);
}
// Resolve the class, if asked to.
if (resolve)
resolveClass (c);
return c;
}
}