User: mnf999
Date: 01/08/29 16:17:59
Added: src/main/org/jboss/system URLClassLoader.java
Log:
Every URL comes with it own class loader now as that enables us to cycle
Revision Changes Path
1.1 jboss/src/main/org/jboss/system/URLClassLoader.java
Index: URLClassLoader.java
===================================================================
/*
* JBoss, the OpenSource EJB server
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package org.jboss.system;
import java.net.URL;
import java.io.InputStream;
import java.util.Map;
import java.util.HashMap;
import javax.management.MBeanServer;
import javax.management.ObjectName;
import javax.management.loading.MLet;
import javax.management.MBeanServerFactory;
import javax.management.MBeanException;
import javax.management.InstanceNotFoundException;
import javax.management.ReflectionException;
import javax.management.MalformedObjectNameException;
//FIXME REMOVE FOR TEST ONLY
import java.util.Enumeration;
/**
*
* @author <a href="[EMAIL PROTECTED]"> Marc Fleury</a>
* @version
*
* The URLClassLoader is associated with a given URL. It can load jar and jsr.
* The ServiceLibraries keeps track of the UCL and asks everyone for resources and
classes
*
* <p><b>20010830 marc fleury:</b>
* <ul>
* initial import
* <li>
* </ul>
*/
public class URLClassLoader extends java.net.URLClassLoader
implements URLClassLoaderMBean
{
/* One URL per classLoader in our case*/
private URL url = null;
/* An SCL can also be loading on behalf of an MBean*/
private ObjectName mbean = null;
/* All SCL are just in orbit around a basic ServiceLibraries */
private static ServiceLibraries libraries;
public URL getURL() { return url;}
/**
* One url per SCL
*
* @param String application
* @param ClassLoader parent
*/
public URLClassLoader(URL[] urls)
{
super(urls);
this.url = urls[0];
try {
url.openStream();
if (libraries == null) libraries =
ServiceLibraries.getLibraries();
/*
//Reload the library if necessary
if (reload)
libraries.removeClassLoader(this) ;
*/
// A URL enabled SCL must register itself with the libraries
to be queried
libraries.addClassLoader(this);
}
catch(Exception e) {
System.out.println("[GPA] WARNING: URL "+url+" could not be
opened");
}
}
/**
* loadClass
*
* We intercept the load class to know exactly the dependencies
* of the underlying jar
*/
public Class loadClass(String name, boolean resolve)
throws ClassNotFoundException
{
if (name.endsWith("CHANGEME"))
{ System.out.println("UCL LOAD "+this.hashCode()+" in
loadClass "+name);}
return libraries.loadClass(name, resolve, this);
}
public Class loadClass(String name)
throws ClassNotFoundException
{
return loadClass(name, true);
}
public Class loadClassLocally (String name, boolean resolve)
throws ClassNotFoundException
{
if (name.endsWith("CHANGEME"))
{ System.out.println("UCL LOAD LOCALLY "+this.hashCode()+" in
loadClass "+name);}
return super.loadClass(name, resolve);
}
public URL getResource(String name) {
if (name.endsWith("CHANGEME"))
System.out.println("UCL GETRESOURCE "+name+ " in UCL
"+this.hashCode());
URL resource = super.getResource(name);
if (resource == null)
resource = libraries.getResource(name, this);
if (resource == null)
System.out.println("Did not find the UCL resource "+name);
return resource;
}
public URL getResourceLocally(String name) {
return super.getResource(name);
}
public InputStream getResourceAsStream(String name) {
try {
URL url = getResource(name);
if (url != null) return url.openStream();
else return null;
}catch (Exception e) {return null;}
}
public int hashCode()
{
return url.hashCode();
}
public boolean equals(Object other)
{
if (other instanceof URLClassLoader)
{
return ((URLClassLoader) other).getURL().equals(url);
}
return false;
}
}
_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development