Class UpdateLoader
- java.lang.Object
-
- org.apache.derby.impl.services.reflect.UpdateLoader
-
- All Implemented Interfaces:
LockOwner
final class UpdateLoader extends java.lang.Object implements LockOwner
UpdateLoader implements then functionality of derby.database.classpath. It manages the ClassLoaders (instances of JarLoader) for each installed jar file. Jar files are installed through the sqlj.install_jar procedure.
Each JarLoader delegates any request through standard mechanisms to load a class to this object, which will then ask each jarLoader in order of derby.database.classpath to load the class through an internal api. This means if the third jar in derby.database.classpath tries to load a class, say from the class for a procedure's method making some reference to it, then the request is delegated to UpdateLoader. UpdateLoader will then try to load the class from each of the jars in order of derby.database.classpath using the jar's installed JarLoader.
-
-
Field Summary
Fields Modifier and Type Field Description private ShExLockableclassLoaderLockprivate CompatibilitySpacecompatprivate booleaninitDoneprivate JarLoader[]jarListprivate JarReaderjarReaderprivate LockFactorylfprivate java.lang.ClassLoadermyLoaderprivate booleanneedReloadprivate booleannormalizeToUpperprivate DatabaseClassesparentprivate static java.lang.String[]RESTRICTED_PACKAGESList of packages that Derby will not support being loaded from an installed jar file.private java.lang.StringthisClasspathprivate intversionprivate HeaderPrintWritervs
-
Constructor Summary
Constructors Constructor Description UpdateLoader(java.lang.String classpath, DatabaseClasses parent, boolean verbose, boolean normalizeToUpper)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description (package private) java.lang.ClasscheckLoaded(java.lang.String className, boolean resolve)(package private) voidclose()(package private) intgetClassLoaderVersion()private java.lang.StringgetClasspath()private static ContextgetContextOrNull(java.lang.String contextID)Privileged lookup of a Context.(package private) JarReadergetJarReader()(package private) java.io.InputStreamgetResourceAsStream(java.lang.String name)private static java.lang.ObjectgetServiceModule(java.lang.Object serviceModule, java.lang.String factoryInterface)Privileged module lookup.private voidinitializeFromClassPath(java.lang.String classpath)private voidinitLoaders()booleanisNestedOwner()Return true if this is a nested owner, e.g., a nested user transaction.(package private) java.lang.ClassloadClass(java.lang.String className, boolean resolve)Load the class from the class path.private booleanlockClassLoader(ShExQual qualifier)(package private) voidmodifyClasspath(java.lang.String classpath)(package private) voidmodifyJar(boolean reload)(package private) voidneedReload()booleannestsUnder(LockOwner other)Return true if this owner nests under another owner.booleannoWait()Tell the lock manager that we don't want timed waits to time out immediately.private voidreload()
-
-
-
Field Detail
-
RESTRICTED_PACKAGES
private static final java.lang.String[] RESTRICTED_PACKAGES
List of packages that Derby will not support being loaded from an installed jar file.
-
jarList
private JarLoader[] jarList
-
vs
private HeaderPrintWriter vs
-
myLoader
private final java.lang.ClassLoader myLoader
-
initDone
private boolean initDone
-
thisClasspath
private java.lang.String thisClasspath
-
lf
private final LockFactory lf
-
classLoaderLock
private final ShExLockable classLoaderLock
-
version
private int version
-
normalizeToUpper
private boolean normalizeToUpper
-
parent
private DatabaseClasses parent
-
compat
private final CompatibilitySpace compat
-
needReload
private boolean needReload
-
jarReader
private JarReader jarReader
-
-
Constructor Detail
-
UpdateLoader
UpdateLoader(java.lang.String classpath, DatabaseClasses parent, boolean verbose, boolean normalizeToUpper) throws StandardException- Throws:
StandardException
-
-
Method Detail
-
initializeFromClassPath
private void initializeFromClassPath(java.lang.String classpath) throws StandardException- Throws:
StandardException
-
loadClass
java.lang.Class loadClass(java.lang.String className, boolean resolve) throws java.lang.ClassNotFoundExceptionLoad the class from the class path. Called by JarLoader when it has a request to load a class to fulfill the sematics of derby.database.classpath.Enforces two restrictions:
- Do not allow classes in certain name spaces to be loaded from installed jars, see RESTRICTED_PACKAGES for the list.
- Referencing Derby's internal classes (those outside the public api) from installed is disallowed. This is to stop user defined routines bypassing security or taking advantage of security holes in Derby. E.g. allowing a routine to call a public method in derby would allow such routines to call public static methods for system procedures without having been granted permission on them, such as setting database properties.
- Throws:
java.lang.ClassNotFoundException- Class can not be found or the installed jar is restricted from loading it.
-
getResourceAsStream
java.io.InputStream getResourceAsStream(java.lang.String name)
-
modifyClasspath
void modifyClasspath(java.lang.String classpath) throws StandardException- Throws:
StandardException
-
modifyJar
void modifyJar(boolean reload) throws StandardException- Throws:
StandardException
-
lockClassLoader
private boolean lockClassLoader(ShExQual qualifier) throws StandardException
- Throws:
StandardException
-
checkLoaded
java.lang.Class checkLoaded(java.lang.String className, boolean resolve)
-
close
void close()
-
initLoaders
private void initLoaders()
-
getClassLoaderVersion
int getClassLoaderVersion()
-
needReload
void needReload()
-
reload
private void reload() throws StandardException- Throws:
StandardException
-
getClasspath
private java.lang.String getClasspath() throws StandardException- Throws:
StandardException
-
getJarReader
JarReader getJarReader()
-
noWait
public boolean noWait()
Tell the lock manager that we don't want timed waits to time out immediately.
-
isNestedOwner
public boolean isNestedOwner()
Description copied from interface:LockOwnerReturn true if this is a nested owner, e.g., a nested user transaction.
- Specified by:
isNestedOwnerin interfaceLockOwner
-
nestsUnder
public boolean nestsUnder(LockOwner other)
Description copied from interface:LockOwnerReturn true if this owner nests under another owner.
- Specified by:
nestsUnderin interfaceLockOwner
-
getContextOrNull
private static Context getContextOrNull(java.lang.String contextID)
Privileged lookup of a Context. Must be private so that user code can't call this entry point.
-
getServiceModule
private static java.lang.Object getServiceModule(java.lang.Object serviceModule, java.lang.String factoryInterface)Privileged module lookup. Must be private so that user code can't call this entry point.
-
-