/*
*
* Copyright (c) 2000-2001 Silvere Martin-Michiellot All Rights Reserved.
*
* Silvere Martin-Michiellot grants you ("Licensee") a non-exclusive,
* royalty free, license to use, modify but not to redistribute this
* software in source and binary code form,
* provided that i) this copyright notice and license appear on all copies of
* the software; and ii) Licensee does not utilize the software in a manner
* which is disparaging to Silvere Martin-Michiellot.
*
* This software is provided "AS IS," without a warranty of any kind. ALL
* EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY
* IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
* NON-INFRINGEMENT, ARE HEREBY EXCLUDED. Silvere Martin-Michiellot
* AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES
* SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
* OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
* Silvere Martin-Michiellot OR ITS LICENSORS BE LIABLE
* FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
* INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
* CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF
* OR INABILITY TO USE SOFTWARE, EVEN IF Silvere Martin-Michiellot HAS BEEN
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
*
* This software is not designed or intended for use in on-line control of
* aircraft, air traffic, aircraft navigation or aircraft communications; or in
* the design, construction, operation or maintenance of any nuclear
* facility. Licensee represents and warrants that it will not use or
* redistribute the Software for such purposes.
*
* @Author: Silvere Martin-Michiellot
*
*/
package com.db.utils;
public final class AlternateClassLoader {
public AlternateClassLoader() {
super();
}
public final static Class tryToLoadClass(final String className, final ClassLoader fallback) throws ClassNotFoundException {
try {
return (Class) java.security.AccessController.doPrivileged(
new java.security.PrivilegedExceptionAction() {
public Object run() throws ClassNotFoundException {
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
if (classLoader == null) classLoader = ClassLoader.getSystemClassLoader();
try {
return Class.forName(className, true, classLoader);
} catch (ClassNotFoundException classNotFoundException) {
try {
return Class.forName(className);
} catch (ClassNotFoundException anotherClassNotFoundException) {
if (classLoader != null)
return Class.forName(className, true, classLoader);
else
throw new ClassNotFoundException(className);
}
}
}
}
);
} catch (java.security.PrivilegedActionException privilegedActionException) {
Exception exception = privilegedActionException.getException();
if (exception instanceof ClassNotFoundException)
throw (ClassNotFoundException)exception;
else throw new RuntimeException("unexpected exception: " + exception);
}
}
}
|