第 5 章 JBoss EAP 类加载概述
JBoss EAP 使用模块化类加载系统来控制部署的应用程序的类路径。与传统的分层类加载程序系统相比,该系统提供更大的灵活性和控制。开发人员对可供其应用程序使用的类进行精细控制,并且可以配置部署来忽略应用服务器提供的类,以自行使用。
模块类加载程序将所有 Java 类分离为名为 modules 的逻辑组。每个模块都可以定义其他模块的依赖关系,将该模块中的类包含在其自己的类路径中。由于每个部署的 Java 存档(JAR)和 Web 存档(WAR)文件都被视为模块,因此开发人员可以通过添加模块配置来控制其应用程序的类路径的内容。
5.1. JBoss EAP 中的模块类型 复制链接链接已复制到粘贴板!
模块是类加载和依赖项管理的逻辑类分组。JBoss EAP 识别两种不同类型的模块:
- 静态模块
- 动态模块
这两者的主要区别在于它们是如何打包的。
JBoss EAP 还提供一组预定义的模块。
5.1.1. JBoss EAP 中的静态模块 复制链接链接已复制到粘贴板!
静态模块在应用服务器的 EAP_HOME/modules/
目录中定义。每个模块都作为子目录存在,例如 EAP_HOME/modules/com/mysql/
。然后,每个模块目录都会包含一个插槽子目录,默认为 main
,包含 module.xml
配置文件以及任何所需的 Java 归档(JAR)文件。所有应用服务器提供的 API 都作为静态模块提供,包括 Jakarta EE API 和其他 API。
示例:MySQL JDBC Driver module.xml
文件
MySQL 驱动程序 JAR 名称 mysql-connector-j-8.0.33.jar 仅作为示例提供。有关经过测试的 MySQL 版本的详情,请参考 测试的数据库。
模块名称 com.mysql
必须与模块的目录结构匹配,不包括插槽名称 main
。
如果许多应用程序部署到使用相同的第三方库的同一服务器上,则创建自定义静态模块非常有用。管理员可以创建并安装包含这些库的模块,而不必将这些库与每个应用程序绑定。然后,应用程序可以声明对自定义静态模块的明确依赖项。
JBoss EAP 发行版中提供的模块位于 EAP_HOME/modules
目录中的 系统
目录中。这使得它们独立于第三方提供的任何模块。任何红帽提供的产品都在 JBoss EAP 之上,也会在 系统
目录中安装其模块。
用户必须确保自定义模块安装到 EAP_HOME/modules
目录中,每个模块使用一个目录。这样可确保载入 系统
目录中已存在的自定义模块版本,而不是所提供的版本。这样,用户提供的模块优先于系统模块。
如果您使用 JBOSS_MODULEPATH
环境变量更改 JBoss EAP 搜索模块的位置,则产品将在指定的位置中查找 系统
子目录结构。系统
结构必须存在于使用 JBOSS_MODULEPATH
指定的位置。
也支持在 module.xml
文件的 resource-root path
元素中使用绝对路径。这样,您的资源库就可以被访问,而无需将它们移到 EAP_HOME/modules
目录。
示例: module.xml
文件中的 Absolute 路径
5.1.2. JBoss EAP 中的动态模块 复制链接链接已复制到粘贴板!
动态模块由应用服务器为每个 Java 归档(JAR)或 Web Archive (WAR)部署创建并加载,或用于企业存档(EAR)中每个子部署的应用服务器。动态模块的名称派生自部署的存档的名称。由于部署作为模块加载,因此他们可以配置依赖项,并被其他部署使用。
只有在需要时才加载模块,通常当部署具有显式或隐式依赖项的应用程序时。
5.1.3. JBoss EAP 中的预定义模块 复制链接链接已复制到粘贴板!
当您使用应用服务器中的默认模块加载程序时,您可以获得一组预定义的模块。特殊模块 org.jboss.modules
包括所有 JBoss 模块 API,始终可用,并由 JBoss 模块提供。标准 Java 平台模块系统(JPMS)模块也按标准名称提供。
有关 Java 9 或更高版本中可用平台模块列表,请参阅相应的 JDK 文档。