AlternateClassLoader.java :  » 6.0-JDK-Modules » java-3d » com » db » utils » Java Open Source

Java Open Source » 6.0 JDK Modules » java 3d 
java 3d » com » db » utils » AlternateClassLoader.java
/*
 *
 * 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);
        }
    }
    
}

java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.