正如TongWeb8.0手册所写:
类加载层级
TongWeb 类加载层级,从高到低:jvm boot > jvm system > TongWeb lib > ejb > TongWeb app > app loader
- 公共类库被附加到最底层(即 app loader 层级),与应用处于同一个层级;
- TongWeb app 位于所有应用上层,供所有应用共享;
- 再往上是 TongWeb 运行所必需的类,例如数据源的驱动。 lib/system 目录下的库是附加到 jvm system 层级,位于整个 TongWeb 的上层。
注:
-
"{tongweb.home}" 表示TongWeb安装路径。
-
"{tongweb.base}" 表示TongWeb实例运行路径,例如,默认实例运行路径为"{tongweb.home}/domains/domain1"。
具体说明一下TongWeb8.0的lib目录类的加载:
一、 "{tongweb.home}/lib/compatible"目录 为兼容IBM JDK所用。若使用 IBM JDK,则需要手动放置如下 jar 包到 "{tongweb.home}/lib/compatible"目录,否则启动TongWeb 失败。
- JDK 8.0 bcprov-jdk15on-1.70.jar
- JDK 8.0+ bcprov-jdk18on-1.78.1.jar
二、 "{tongweb.home}/lib/mq"为tongweb-mq存放目录,如需要请联系官方获取 TongWeb-MQ 安装包并将其放至"{tongweb.home}/lib/mq" 目录中。
三、主要的类加载目录 (在默认应用子加载的情况下,优先级依次如下:)
- "{tongweb.base}/lib/system", "{tongweb.home}/lib/system" 同jvm system,优先级最高,且"{tongweb.base}/lib/system"排序优于"{tongweb.home}/lib/system"目录。
- 应用的WEB-INF目录。
- TongWeb控制台指定的"公共类库"。
- "{tongweb.base}/lib", "{tongweb.home}/lib" 目录,且"{tongweb.base}/lib"排序优于"{tongweb.home}/lib"目录。
- "{tongweb.base}/lib/app", "{tongweb.home}/lib/app",且"{tongweb.base}/lib/app"排序优于"${tongweb.home}/lib/app"目录。
如何验证类的加载顺序?
编写一个测试用例,在类中输出该类的加载路径(示例如下),并将该类依次放入应用、公共类库、lib、lib/system、lib/app下。
java
package com.tongtest;
public class TestLoadClass {
public void test() {
System.out.println("===this class path:" + getClass().getProtectionDomain().getCodeSource().getLocation());
}
}
通过"类资源分析" 可以检查到类的分布位置和实际加载位置。

通过访问应用中的TestLoadClass类在日志中输出类加载路径来验证结果如下:
bash
#优先加载${tongweb.base}/lib/system下的类。
1. ===this class path:file:/D:/TongWeb8.0.9.12/domains/domain1/lib/system/a.jar
#删除实例${tongweb.base}/lib/system下的a.jar,重启TongWeb再访问则加载${tongweb.home}/lib/system下的a.jar。
#按此方法依次删除优先加载的类来验证。
2. ===this class path:file:/D:/TongWeb8.0.9.12/lib/system/a.jar
#应用WEB-INF下的类
3. ===this class path:file:/D:/TongWeb8.0.9.12/domains/domain1/deployment/web/WEB-INF/classes/
#公共类库
4. ===this class path:file:/D:/app/a.jar
# ${tongweb.base}/lib
5. ===this class path:file:/D:/TongWeb8.0.9.12/domains/domain1/lib/a.jar
# ${tongweb.home}/lib
6. ===this class path:file:/D:/TongWeb8.0.9.12/lib/a.jar
# ${tongweb.base}/lib/app
7. ===this class path:file:/D:/TongWeb8.0.9.12/domains/domain1/lib/app/a.jar
# ${tongweb.home}/lib/app
8. ===this class path:file:/D:/TongWeb8.0.9.12/lib/app/a.jar
同理:可再将应用设为父加载、强制加载等等来验证加载顺序。