I was reading the excellent Oracle document http://docs.oracle.com/middleware/1212/wls/WLPRG/classloading.htm#WLPRG320 on classloaders - very nice but it misses pictures and real data.
So I have created a EAR PVEar, and inside a Stateless EJB, an EJBClient (and a PVTimer, ignore it) and a WebApp
I open the cat tool, analyze the PVEar, click on "detailed", and I get this:
System Classloaders
Type: sun.misc.Launcher$ExtClassLoader
HashCode: 22293724
Classpath:
/D:/Oracle/Middleware/Oracle_Home/oracle_common/jdk/jre/lib/ext/access-bridge-32.jar
/D:/Oracle/Middleware/Oracle_Home/oracle_common/jdk/jre/lib/ext/access-bridge.jar
/D:/Oracle/Middleware/Oracle_Home/oracle_common/jdk/jre/lib/ext/dnsns.jar
/D:/Oracle/Middleware/Oracle_Home/oracle_common/jdk/jre/lib/ext/jaccess.jar
/D:/Oracle/Middleware/Oracle_Home/oracle_common/jdk/jre/lib/ext/localedata.jar
/D:/Oracle/Middleware/Oracle_Home/oracle_common/jdk/jre/lib/ext/sunec.jar
/D:/Oracle/Middleware/Oracle_Home/oracle_common/jdk/jre/lib/ext/sunjce_provider.jar
/D:/Oracle/Middleware/Oracle_Home/oracle_common/jdk/jre/lib/ext/sunmscapi.jar
/D:/Oracle/Middleware/Oracle_Home/oracle_common/jdk/jre/lib/ext/sunpkcs11.jar
/D:/Oracle/Middleware/Oracle_Home/oracle_common/jdk/jre/lib/ext/zipfs.jar
Type: sun.misc.Launcher$AppClassLoader
HashCode: 27035333
Classpath:
/D:/Oracle/Middleware/Oracle_Home/oracle_common/jdk/lib/tools.jar
/D:/Oracle/Middleware/Oracle_Home/oracle_common/modules/com.oracle.cie.config-wls-online_8.1.0.0.jar
/D:/Oracle/Middleware/Oracle_Home/oracle_common/modules/net.sf.antcontrib_1.1.0.0_1-0b3/lib/ant-contrib.jar
/D:/Oracle/Middleware/Oracle_Home/wlserver/common/derby/lib/derby.jar
/D:/Oracle/Middleware/Oracle_Home/wlserver/common/derby/lib/derbyclient.jar
/D:/Oracle/Middleware/Oracle_Home/wlserver/common/derby/lib/derbynet.jar
/D:/Oracle/Middleware/Oracle_Home/wlserver/modules/features/oracle.wls.common.nodemanager_2.0.0.0.jar
/D:/Oracle/Middleware/Oracle_Home/wlserver/server/lib/weblogic.jar
/D:/Oracle/Middleware/Oracle_Home/wlserver/server/lib/weblogic_sp.jar
/D:/Oracle/Middleware/Oracle_Home/wlserver/server/lib/xqrl.jar
Type: weblogic.utils.classloaders.GenericClassLoader
HashCode: 21751181
Classpath:
Application Classloaders
Type: weblogic.utils.classloaders.FilteringClassLoader
HashCode: 10170360
Filter: []
Classpath: empty
Type: weblogic.utils.classloaders.GenericClassLoader
HashCode: 1771581
Classpath:
D:\pierre\domains\pvdomain\servers\AdminServer\cache\EJBCompilerCache\h8uvtcz3nyfq
D:\pierre\workspace12c\PVEar\EarContent\APP-INF\classes
D:\pierre\workspace12c\PVEjbProjectClient\build\classes
D:\pierre\workspace12c\PVEjbProject\build\PVEjbProjectClient.jar
D:\pierre\workspace12c\PVEjbProject\build\classes
clicking on the EJB module I get exactly the same picture. But on the WebApp module I get an extra FilteringClassLoader:
Application Classloaders
(this one is same as in the EJB)
Type: weblogic.utils.classloaders.FilteringClassLoader
HashCode: 10170360
Filter: []
Classpath: empty
Type: weblogic.utils.classloaders.GenericClassLoader
HashCode: 1771581
Classpath:
D:\pierre\domains\pvdomain\servers\AdminServer\cache\EJBCompilerCache\h8uvtcz3nyfq
D:\pierre\workspace12c\PVEar\EarContent\APP-INF\classes
D:\pierre\workspace12c\PVEjbProjectClient\build\classes
D:\pierre\workspace12c\PVEjbProject\build\PVEjbProjectClient.jar
D:\pierre\workspace12c\PVEjbProject\build\classes
(this one is new)
Type: weblogic.utils.classloaders.FilteringClassLoader
HashCode: 6976334
Filter: []
Classpath: empty
Type: weblogic.utils.classloaders.ChangeAwareClassLoader
HashCode: 12727142
Classpath:
D:\pierre\workspace12c\PVWeb\build\classes
So, the FilteringClassLoader 10170360 separates from the System Classloader ANYTHING inside the EAR module.
The FilteringClassLoader 6976334 separates the WebApp from the EAR.WebApp and EJB share the same Application Classloaders GenericClassLoader 1771581.