WebLogic's ClassLoaders, Filtering ClassLoader and ClassLoader Analysis Tool
JAVA CLASSLOADER - java.ociweb.comjava.ociweb.com/javasig/knowledgebase/2008-08/ClassLoader.pdfclass...
Transcript of JAVA CLASSLOADER - java.ociweb.comjava.ociweb.com/javasig/knowledgebase/2008-08/ClassLoader.pdfclass...
![Page 1: JAVA CLASSLOADER - java.ociweb.comjava.ociweb.com/javasig/knowledgebase/2008-08/ClassLoader.pdfclass that is not a core Java or extension class?) Friday, August 15, 2008 15. Shared](https://reader031.fdocuments.net/reader031/viewer/2022022510/5adbaf317f8b9a1a088b8d8c/html5/thumbnails/1.jpg)
JAVA CLASSLOADER
CHARLES SHARPOBJECT COMPUTING,
INC.
SAINT LOUIS JAVA USER GROUP
1Friday, August 15, 2008
![Page 2: JAVA CLASSLOADER - java.ociweb.comjava.ociweb.com/javasig/knowledgebase/2008-08/ClassLoader.pdfclass that is not a core Java or extension class?) Friday, August 15, 2008 15. Shared](https://reader031.fdocuments.net/reader031/viewer/2022022510/5adbaf317f8b9a1a088b8d8c/html5/thumbnails/2.jpg)
Facts &Terms
2Friday, August 15, 2008
![Page 3: JAVA CLASSLOADER - java.ociweb.comjava.ociweb.com/javasig/knowledgebase/2008-08/ClassLoader.pdfclass that is not a core Java or extension class?) Friday, August 15, 2008 15. Shared](https://reader031.fdocuments.net/reader031/viewer/2022022510/5adbaf317f8b9a1a088b8d8c/html5/thumbnails/3.jpg)
CLASSLOADERS...Are responsible for loading classes (no, really...) and resources.
Come in only two types, bootstrap and user-defined (more on these in a minute).
Subclass the abstract class ClassLoader (or one of its subclasses).
User-defined have a parent ClassLoader (probably)
3Friday, August 15, 2008
![Page 4: JAVA CLASSLOADER - java.ociweb.comjava.ociweb.com/javasig/knowledgebase/2008-08/ClassLoader.pdfclass that is not a core Java or extension class?) Friday, August 15, 2008 15. Shared](https://reader031.fdocuments.net/reader031/viewer/2022022510/5adbaf317f8b9a1a088b8d8c/html5/thumbnails/4.jpg)
TermsInitiating ClassLoader (next slide)
Defining ClassLoader (next slide)
Primordial ClassLoader -- The bootstrap class loader
Class Name -- fully-qualified (as of 1.5, the binary name)
Class (or interface) -- Class name and the Defining ClassLoader (next slide)
4Friday, August 15, 2008
![Page 5: JAVA CLASSLOADER - java.ociweb.comjava.ociweb.com/javasig/knowledgebase/2008-08/ClassLoader.pdfclass that is not a core Java or extension class?) Friday, August 15, 2008 15. Shared](https://reader031.fdocuments.net/reader031/viewer/2022022510/5adbaf317f8b9a1a088b8d8c/html5/thumbnails/5.jpg)
A class loader L may create Class or Interface C by defining it directly or by delegating to another class loader. If L creates C directly, we say that L defines C or, equivalently, that L is the defining loader of C.
When one class loader delegates to another class loader, the loader that initiates the loading is not necessarily the same loader that completes the loading and defines the class. If L creates C, either by defining it directly or by delegation, we say that L initiates loading of C or, equivalently, that L is an initiating loader of C.
At run time, a class or interface is determined not by its name alone, but by a pair: its fully qualified name and its defining class loader. Each such class or interface belongs to a single runtime package. The runtime package of a class or interface is determined by the package name and defining class loader of the class or interface.
Defining and Initiating
http://java.sun.com/docs/books/jvms/second_edition/html/ConstantPool.doc.html#51579
5Friday, August 15, 2008
![Page 6: JAVA CLASSLOADER - java.ociweb.comjava.ociweb.com/javasig/knowledgebase/2008-08/ClassLoader.pdfclass that is not a core Java or extension class?) Friday, August 15, 2008 15. Shared](https://reader031.fdocuments.net/reader031/viewer/2022022510/5adbaf317f8b9a1a088b8d8c/html5/thumbnails/6.jpg)
Creating a ClassIf the name denotes a nonarray class:
If the referencing class was loaded by the bootstrap, then the bootstrap class loader initiates the loading.
If the referencing class was loaded by a user-defined loader, then that same user-defined class loader initiates loading of the new class.
The JVM creates array classes directly.
http://java.sun.com/docs/books/jvms/second_edition/html/ConstantPool.doc.html#51579
6Friday, August 15, 2008
![Page 7: JAVA CLASSLOADER - java.ociweb.comjava.ociweb.com/javasig/knowledgebase/2008-08/ClassLoader.pdfclass that is not a core Java or extension class?) Friday, August 15, 2008 15. Shared](https://reader031.fdocuments.net/reader031/viewer/2022022510/5adbaf317f8b9a1a088b8d8c/html5/thumbnails/7.jpg)
ClassLoaders
7Friday, August 15, 2008
![Page 8: JAVA CLASSLOADER - java.ociweb.comjava.ociweb.com/javasig/knowledgebase/2008-08/ClassLoader.pdfclass that is not a core Java or extension class?) Friday, August 15, 2008 15. Shared](https://reader031.fdocuments.net/reader031/viewer/2022022510/5adbaf317f8b9a1a088b8d8c/html5/thumbnails/8.jpg)
The Standard Three
bootstrap class loader
extension class loader
system class loader
All Java applications have at least three ClassLoaders:
8Friday, August 15, 2008
![Page 9: JAVA CLASSLOADER - java.ociweb.comjava.ociweb.com/javasig/knowledgebase/2008-08/ClassLoader.pdfclass that is not a core Java or extension class?) Friday, August 15, 2008 15. Shared](https://reader031.fdocuments.net/reader031/viewer/2022022510/5adbaf317f8b9a1a088b8d8c/html5/thumbnails/9.jpg)
bootstrap class loader
9Friday, August 15, 2008
![Page 10: JAVA CLASSLOADER - java.ociweb.comjava.ociweb.com/javasig/knowledgebase/2008-08/ClassLoader.pdfclass that is not a core Java or extension class?) Friday, August 15, 2008 15. Shared](https://reader031.fdocuments.net/reader031/viewer/2022022510/5adbaf317f8b9a1a088b8d8c/html5/thumbnails/10.jpg)
bootstrapLoads the core Java libraries (rt.jar, core.jar, server.jar, classes.jar, whatever...)
Does not validate the classes -- they’re trusted
Has no parent (bootstrap loaded classes receive null on calls to getClassLoader())
Loads the classes specified in the command line “non-standard” option “-Xbootclasspath”
10Friday, August 15, 2008
![Page 11: JAVA CLASSLOADER - java.ociweb.comjava.ociweb.com/javasig/knowledgebase/2008-08/ClassLoader.pdfclass that is not a core Java or extension class?) Friday, August 15, 2008 15. Shared](https://reader031.fdocuments.net/reader031/viewer/2022022510/5adbaf317f8b9a1a088b8d8c/html5/thumbnails/11.jpg)
-Xbootclasspath-Xbootclasspath:bootclasspath
Specify a colon-separated list of directories, JAR archives, and ZIP archives to search for boot class files. These are used in place of the boot class files included in the Java 2 SDK. Note: Applications that use this option for the purpose of overriding a class in rt.jar should not be deployed as doing so would contravene the Java 2 Runtime Environment binary code license.
http://java.sun.com/javase/6/docs/technotes/tools/solaris/java.html
11Friday, August 15, 2008
![Page 12: JAVA CLASSLOADER - java.ociweb.comjava.ociweb.com/javasig/knowledgebase/2008-08/ClassLoader.pdfclass that is not a core Java or extension class?) Friday, August 15, 2008 15. Shared](https://reader031.fdocuments.net/reader031/viewer/2022022510/5adbaf317f8b9a1a088b8d8c/html5/thumbnails/12.jpg)
-Xbootclasspath/p-Xbootclasspath/p:path
Specify a colon-separated path of directories, JAR archives, and ZIP archives to prepend in front of the default bootstrap class path. Note: Applications that use this option for the purpose of overriding a class in rt.jar should not be deployed as doing so would contravene the Java 2 Runtime Environment binary code license.
http://java.sun.com/javase/6/docs/technotes/tools/solaris/java.html
12Friday, August 15, 2008
![Page 13: JAVA CLASSLOADER - java.ociweb.comjava.ociweb.com/javasig/knowledgebase/2008-08/ClassLoader.pdfclass that is not a core Java or extension class?) Friday, August 15, 2008 15. Shared](https://reader031.fdocuments.net/reader031/viewer/2022022510/5adbaf317f8b9a1a088b8d8c/html5/thumbnails/13.jpg)
-Xbootclasspath/a
-Xbootclasspath/a:path
Specify a colon-separated path of directories, JAR archives, and ZIP archives to append to the default bootstrap class path.
http://java.sun.com/javase/6/docs/technotes/tools/solaris/java.html
13Friday, August 15, 2008
![Page 14: JAVA CLASSLOADER - java.ociweb.comjava.ociweb.com/javasig/knowledgebase/2008-08/ClassLoader.pdfclass that is not a core Java or extension class?) Friday, August 15, 2008 15. Shared](https://reader031.fdocuments.net/reader031/viewer/2022022510/5adbaf317f8b9a1a088b8d8c/html5/thumbnails/14.jpg)
extensions class loader
14Friday, August 15, 2008
![Page 15: JAVA CLASSLOADER - java.ociweb.comjava.ociweb.com/javasig/knowledgebase/2008-08/ClassLoader.pdfclass that is not a core Java or extension class?) Friday, August 15, 2008 15. Shared](https://reader031.fdocuments.net/reader031/viewer/2022022510/5adbaf317f8b9a1a088b8d8c/html5/thumbnails/15.jpg)
extensionsLoaded at JVM start time by the bootstrap class loader
A user-defined ClassLoader (subclass of ClassLoader).
Loads the extensions classes (next slide)
Does not use the class path. (What happens when one of the classes in a jre/lib/ext JAR file needs to load a class that is not a core Java or extension class?)
15Friday, August 15, 2008
![Page 16: JAVA CLASSLOADER - java.ociweb.comjava.ociweb.com/javasig/knowledgebase/2008-08/ClassLoader.pdfclass that is not a core Java or extension class?) Friday, August 15, 2008 15. Shared](https://reader031.fdocuments.net/reader031/viewer/2022022510/5adbaf317f8b9a1a088b8d8c/html5/thumbnails/16.jpg)
Shared Extensions in Java 6Extension JAR files may be placed in a location that is independent of any particular JRE, so that extensions can be shared by all JREs that are installed on a system.
Prior to Java 6, the value of java.ext.dirs referred to a single directory, but as of Java 6 it is a list of directories (like CLASSPATH)
The first element of the path is always the lib/ext directory of the JRE. The second element is a directory outside of the JRE.
Allows extension JAR files to be installed once and used by several JREs installed on that system.
The location varies depending on the operating system: * SolarisTM Operating System: /usr/jdk/packages/lib/ext * Linux: /usr/java/packages/lib/ext * Microsoft Windows: %SystemRoot%\Sun\Java\lib\ext
An installed extension placed in one of the above directories extends the platform of each of the JREs (Java 6 or later) on that system.
16Friday, August 15, 2008
![Page 17: JAVA CLASSLOADER - java.ociweb.comjava.ociweb.com/javasig/knowledgebase/2008-08/ClassLoader.pdfclass that is not a core Java or extension class?) Friday, August 15, 2008 15. Shared](https://reader031.fdocuments.net/reader031/viewer/2022022510/5adbaf317f8b9a1a088b8d8c/html5/thumbnails/17.jpg)
system class loader
17Friday, August 15, 2008
![Page 18: JAVA CLASSLOADER - java.ociweb.comjava.ociweb.com/javasig/knowledgebase/2008-08/ClassLoader.pdfclass that is not a core Java or extension class?) Friday, August 15, 2008 15. Shared](https://reader031.fdocuments.net/reader031/viewer/2022022510/5adbaf317f8b9a1a088b8d8c/html5/thumbnails/18.jpg)
system(aka application)
Loads the application’s classes
Serves as parent for all the classes loaded by the application unless it is replaced by a different class loader.
Locates classes in the directories and JAR files on the class path -- java.class.path system property. (Set by either the CLASSPATH environment variable or the -classpath command-line option.)
18Friday, August 15, 2008
![Page 19: JAVA CLASSLOADER - java.ociweb.comjava.ociweb.com/javasig/knowledgebase/2008-08/ClassLoader.pdfclass that is not a core Java or extension class?) Friday, August 15, 2008 15. Shared](https://reader031.fdocuments.net/reader031/viewer/2022022510/5adbaf317f8b9a1a088b8d8c/html5/thumbnails/19.jpg)
Implementation bootstrap class loader is implemented in the JVM (typically in C); not specified by ClassLoader specifications
In Sun's Java implementation, the extension and system class loaders are implemented in Java. Both are instances of the URLClassLoader class.
19Friday, August 15, 2008
![Page 20: JAVA CLASSLOADER - java.ociweb.comjava.ociweb.com/javasig/knowledgebase/2008-08/ClassLoader.pdfclass that is not a core Java or extension class?) Friday, August 15, 2008 15. Shared](https://reader031.fdocuments.net/reader031/viewer/2022022510/5adbaf317f8b9a1a088b8d8c/html5/thumbnails/20.jpg)
How ClassLoaders Load
20Friday, August 15, 2008
![Page 21: JAVA CLASSLOADER - java.ociweb.comjava.ociweb.com/javasig/knowledgebase/2008-08/ClassLoader.pdfclass that is not a core Java or extension class?) Friday, August 15, 2008 15. Shared](https://reader031.fdocuments.net/reader031/viewer/2022022510/5adbaf317f8b9a1a088b8d8c/html5/thumbnails/21.jpg)
ClassLoader.loadClass()When a class needs to be loaded (is referenced):
1. If the class has already been loaded, return it.
2. Otherwise, delegate the search to the parent class loader
3. If the parent doesn’t find it (shown when it throws ClassNotFoundException), call findClass() to find (load, define, and resolve) the class
21Friday, August 15, 2008
![Page 22: JAVA CLASSLOADER - java.ociweb.comjava.ociweb.com/javasig/knowledgebase/2008-08/ClassLoader.pdfclass that is not a core Java or extension class?) Friday, August 15, 2008 15. Shared](https://reader031.fdocuments.net/reader031/viewer/2022022510/5adbaf317f8b9a1a088b8d8c/html5/thumbnails/22.jpg)
Bootstrap ClassLoader
Extension ClassLoader
System ClassLoader
Cache
Cache
Cache
rt.jar
$JRE_HOME/lib/ext
1.jar1.jar
1.jarbar.jar
$CLASSPATH
1 2
3
4
5
6
7
8
9
ClassLoader Process1. findClass (loadClass) is invoked2. Current(system) checks cache3. Not loaded; delegates to
parent(extension)4. extension checks cache5. Not loaded; delegates to
parent(bootstrap)6. bootstrap checks cache7. Not loaded; checks “Core Java” jars; not
found; throws ClassNotFoundException8. extension catches Exception; checks
extension jars; not found; throws ClassNotFoundException
9. system catches Exception; chases CLASSPATH looking for class; finds it (surely!) and reads in the bytes
10. invokes defineClass() for resolution
22Friday, August 15, 2008
![Page 23: JAVA CLASSLOADER - java.ociweb.comjava.ociweb.com/javasig/knowledgebase/2008-08/ClassLoader.pdfclass that is not a core Java or extension class?) Friday, August 15, 2008 15. Shared](https://reader031.fdocuments.net/reader031/viewer/2022022510/5adbaf317f8b9a1a088b8d8c/html5/thumbnails/23.jpg)
But Wait! There’s One More
(ClassLoader) Thing...
23Friday, August 15, 2008
![Page 24: JAVA CLASSLOADER - java.ociweb.comjava.ociweb.com/javasig/knowledgebase/2008-08/ClassLoader.pdfclass that is not a core Java or extension class?) Friday, August 15, 2008 15. Shared](https://reader031.fdocuments.net/reader031/viewer/2022022510/5adbaf317f8b9a1a088b8d8c/html5/thumbnails/24.jpg)
What good is it ?
classloader inversion✓Application code’s helper method calls Class.forName(classNameString).
✓Helper method is called from a plugin class.
✓The classNameString specifies a class that is contained in the plugin JAR.
http://www.informit.com/articles/article.aspx?p=1187967&seqNum=1
24Friday, August 15, 2008
![Page 25: JAVA CLASSLOADER - java.ociweb.comjava.ociweb.com/javasig/knowledgebase/2008-08/ClassLoader.pdfclass that is not a core Java or extension class?) Friday, August 15, 2008 15. Shared](https://reader031.fdocuments.net/reader031/viewer/2022022510/5adbaf317f8b9a1a088b8d8c/html5/thumbnails/25.jpg)
The helper method needs to use the correct class loader. It can require the class loader as a parameter. Alternatively, it can require that the correct class loader is set as the context class loader of the current thread. This strategy is used by many frameworks (such as the JAXP and JNDI frameworks)
Each thread has a reference to a context class loader. The main thread's context class loader is the system class loader. When a new thread is created, its context class loader is set to the creating thread's context class loader.
http://www.informit.com/articles/article.aspx?p=1187967&seqNum=1
Solution
25Friday, August 15, 2008
![Page 26: JAVA CLASSLOADER - java.ociweb.comjava.ociweb.com/javasig/knowledgebase/2008-08/ClassLoader.pdfclass that is not a core Java or extension class?) Friday, August 15, 2008 15. Shared](https://reader031.fdocuments.net/reader031/viewer/2022022510/5adbaf317f8b9a1a088b8d8c/html5/thumbnails/26.jpg)
context class loader
26Friday, August 15, 2008
![Page 27: JAVA CLASSLOADER - java.ociweb.comjava.ociweb.com/javasig/knowledgebase/2008-08/ClassLoader.pdfclass that is not a core Java or extension class?) Friday, August 15, 2008 15. Shared](https://reader031.fdocuments.net/reader031/viewer/2022022510/5adbaf317f8b9a1a088b8d8c/html5/thumbnails/27.jpg)
contextMade for the world of threads -- each thread has one
Set with:Thread t = Thread.currentThread();t.setContextClassLoader(loader);
Retrieved with:Thread t = Thread.currentThread();ClassLoader loader = t.getContextClassLoader();Class<?> cl = loader.loadClass(className);
If no context class loader is set, all threads will have the system class loader as their context class loader
27Friday, August 15, 2008
![Page 28: JAVA CLASSLOADER - java.ociweb.comjava.ociweb.com/javasig/knowledgebase/2008-08/ClassLoader.pdfclass that is not a core Java or extension class?) Friday, August 15, 2008 15. Shared](https://reader031.fdocuments.net/reader031/viewer/2022022510/5adbaf317f8b9a1a088b8d8c/html5/thumbnails/28.jpg)
Writing Your Own ClassLoader
(and what about those Exceptions?)
28Friday, August 15, 2008
![Page 29: JAVA CLASSLOADER - java.ociweb.comjava.ociweb.com/javasig/knowledgebase/2008-08/ClassLoader.pdfclass that is not a core Java or extension class?) Friday, August 15, 2008 15. Shared](https://reader031.fdocuments.net/reader031/viewer/2022022510/5adbaf317f8b9a1a088b8d8c/html5/thumbnails/29.jpg)
Why write a ClassLoaderAllows specialization of the load process:
custom class checks (checksums)
custom loading techniques (loading from a specialized device. Or lower-case class names...)
29Friday, August 15, 2008
![Page 30: JAVA CLASSLOADER - java.ociweb.comjava.ociweb.com/javasig/knowledgebase/2008-08/ClassLoader.pdfclass that is not a core Java or extension class?) Friday, August 15, 2008 15. Shared](https://reader031.fdocuments.net/reader031/viewer/2022022510/5adbaf317f8b9a1a088b8d8c/html5/thumbnails/30.jpg)
How to write a ClassLoaderExtend ClassLoader (or one of its subclasses)
Override findClass(String className)
The loadClass method of the ClassLoader superclass takes care of the delegation to the parent and calls the findClass method only if the class hasn't already been loaded and if the parent class loader was unable to load the class.
30Friday, August 15, 2008
![Page 31: JAVA CLASSLOADER - java.ociweb.comjava.ociweb.com/javasig/knowledgebase/2008-08/ClassLoader.pdfclass that is not a core Java or extension class?) Friday, August 15, 2008 15. Shared](https://reader031.fdocuments.net/reader031/viewer/2022022510/5adbaf317f8b9a1a088b8d8c/html5/thumbnails/31.jpg)
findClass()1. Load the bytecodes for the class from the local file
system or from some other source.
2. Call the defineClass method of the ClassLoader superclass to present the bytecodes to the virtual machine.
31Friday, August 15, 2008
![Page 32: JAVA CLASSLOADER - java.ociweb.comjava.ociweb.com/javasig/knowledgebase/2008-08/ClassLoader.pdfclass that is not a core Java or extension class?) Friday, August 15, 2008 15. Shared](https://reader031.fdocuments.net/reader031/viewer/2022022510/5adbaf317f8b9a1a088b8d8c/html5/thumbnails/32.jpg)
Exceptions
32Friday, August 15, 2008
![Page 33: JAVA CLASSLOADER - java.ociweb.comjava.ociweb.com/javasig/knowledgebase/2008-08/ClassLoader.pdfclass that is not a core Java or extension class?) Friday, August 15, 2008 15. Shared](https://reader031.fdocuments.net/reader031/viewer/2022022510/5adbaf317f8b9a1a088b8d8c/html5/thumbnails/33.jpg)
ClassLoader Exceptions ClassNotFoundException
loadClass()
findClass()
NoClassDefFound
defineClass() -- name in byte array does not match the name in the class
33Friday, August 15, 2008
![Page 34: JAVA CLASSLOADER - java.ociweb.comjava.ociweb.com/javasig/knowledgebase/2008-08/ClassLoader.pdfclass that is not a core Java or extension class?) Friday, August 15, 2008 15. Shared](https://reader031.fdocuments.net/reader031/viewer/2022022510/5adbaf317f8b9a1a088b8d8c/html5/thumbnails/34.jpg)
ClassCastException
http://www.onjava.com/pub/a/onjava/2005/01/26/classloading.html
34Friday, August 15, 2008
![Page 35: JAVA CLASSLOADER - java.ociweb.comjava.ociweb.com/javasig/knowledgebase/2008-08/ClassLoader.pdfclass that is not a core Java or extension class?) Friday, August 15, 2008 15. Shared](https://reader031.fdocuments.net/reader031/viewer/2022022510/5adbaf317f8b9a1a088b8d8c/html5/thumbnails/35.jpg)
Information ProvidersFind a way out of the ClassLoader maze, Vladimir Roubtsov, JavaWorld.com, 06/06/03. http://www.javaworld.com/javaworld/javaqa/2003-06/01-qa-0606-load.html
Understanding Network Class Loaders, Qusay H. Mahmoud, October 2004. http://java.sun.com/developer/technicalArticles/Networking/classloaders/ ;
Chapter 5, Loading, Linking, and Initializing, The Java Virtual Machine Specification, 2nd Ed., Tim Lindholm and Frank Yellin. http://java.sun.com/docs/books/jvms/second_edition/html/VMSpecTOC.doc.html
A Look At The Java Class Loader, Kumar Matcha, Oct 15, 2005. http://www.javalobby.org/java/forums/t18345.html
Introduction to Java's Architecture, Bill Venners. http://www.artima.com/insidejvm/ed2/introarchP.html
Core Java Security: Class Loaders, Security Managers, and Encryption, Cay S. Horstmann, Gary Cornell, Apr 16, 2008. http://www.informit.com/articles/article.aspx?p=1187967&seqNum=1
Inside Class Loaders, Andreas Schaefer, 11/12/2003. http://www.onjava.com/pub/a/onjava/2003/11/12/classloader.html
Internals of Java Class Loading, Binildas Christudas, 01/26/2005. http://www.onjava.com/pub/a/onjava/2005/01/26/classloading.html
Understanding Extension Class Loading, Java Tutorial. http://java.sun.com/docs/books/tutorial/ext/basics/load.html
Installed Extensions, Java Tutorial. http://java.sun.com/docs/books/tutorial/ext/basics/install.html
35Friday, August 15, 2008