01: /*
02: *
03: * Copyright (c) 2000-2001 Silvere Martin-Michiellot All Rights Reserved.
04: *
05: * Silvere Martin-Michiellot grants you ("Licensee") a non-exclusive,
06: * royalty free, license to use, modify but not to redistribute this
07: * software in source and binary code form,
08: * provided that i) this copyright notice and license appear on all copies of
09: * the software; and ii) Licensee does not utilize the software in a manner
10: * which is disparaging to Silvere Martin-Michiellot.
11: *
12: * This software is provided "AS IS," without a warranty of any kind. ALL
13: * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY
14: * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
15: * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. Silvere Martin-Michiellot
16: * AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES
17: * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
18: * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
19: * Silvere Martin-Michiellot OR ITS LICENSORS BE LIABLE
20: * FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
21: * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
22: * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF
23: * OR INABILITY TO USE SOFTWARE, EVEN IF Silvere Martin-Michiellot HAS BEEN
24: * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
25: *
26: * This software is not designed or intended for use in on-line control of
27: * aircraft, air traffic, aircraft navigation or aircraft communications; or in
28: * the design, construction, operation or maintenance of any nuclear
29: * facility. Licensee represents and warrants that it will not use or
30: * redistribute the Software for such purposes.
31: *
32: * @Author: Silvere Martin-Michiellot
33: *
34: */
35:
36: package com.db.utils;
37:
38: public final class AlternateClassLoader {
39:
40: public AlternateClassLoader() {
41:
42: super ();
43:
44: }
45:
46: public final static Class tryToLoadClass(final String className,
47: final ClassLoader fallback) throws ClassNotFoundException {
48:
49: try {
50: return (Class) java.security.AccessController
51: .doPrivileged(new java.security.PrivilegedExceptionAction() {
52: public Object run()
53: throws ClassNotFoundException {
54: ClassLoader classLoader = Thread
55: .currentThread()
56: .getContextClassLoader();
57: if (classLoader == null)
58: classLoader = ClassLoader
59: .getSystemClassLoader();
60: try {
61: return Class.forName(className, true,
62: classLoader);
63: } catch (ClassNotFoundException classNotFoundException) {
64: try {
65: return Class.forName(className);
66: } catch (ClassNotFoundException anotherClassNotFoundException) {
67: if (classLoader != null)
68: return Class.forName(className,
69: true, classLoader);
70: else
71: throw new ClassNotFoundException(
72: className);
73: }
74: }
75: }
76: });
77: } catch (java.security.PrivilegedActionException privilegedActionException) {
78: Exception exception = privilegedActionException
79: .getException();
80:
81: if (exception instanceof ClassNotFoundException)
82: throw (ClassNotFoundException) exception;
83: else
84: throw new RuntimeException("unexpected exception: "
85: + exception);
86: }
87: }
88:
89: }
|