3.7. 类加载和子部署
3.7.1. 企业存档中的模块和类加载 复制链接链接已复制到粘贴板!
企业存档(EAR)不作为单一模块加载,如 JAR 或 WAR 部署。它们作为多个唯一模块载入。
以下规则决定了 EAR 中存在的模块:
-
EAR 存档根目录中的
lib/目录的内容是一个模块。这称为父模块。 - 每个 WAR 和 Jakarta Enterprise Beans JAR 子部署都是一个模块。这些模块具有与任何其他模块相同的行为,以及对父模块的隐式依赖项。
- Subdeployments 对父模块和其他任何非 WAR 子部署具有隐式依赖项。
存在对非 WAR 子部署的隐式依赖关系,因为 JBoss EAP 默认禁用子部署类加载器隔离。无论子部署类加载器隔离如何,对父模块的依赖关系都会保留。
没有子部署获得对 WAR 子部署的隐式依赖性。任何子部署都可以像任何其他模块一样,为另一个子部署配置明确的依赖关系。
如果需要严格兼容性,则可启用 Subdeployment 类加载器隔离。这可以在单个 EAR 部署或所有 EAR 部署中启用。Jakarta EE 规范建议,便携式应用不应依赖于子部署相互访问,除非在每个子部署的 MANIFEST.MF 文件中明确声明依赖项为 Class-Path 条目。
3.7.2. 子部署类加载器隔离 复制链接链接已复制到粘贴板!
企业存档(EAR)中的每个子部署是一个具有自己的类加载器的动态模块。默认情况下,子部署可以访问其他子部署的资源。
如果子部署不允许访问其他子部署的资源,则可以启用严格的子部署隔离。
3.7.3. 在 EAR 中启用子部署类加载器隔离 复制链接链接已复制到粘贴板!
此任务演示了如何在 EAR 部署中使用特殊的部署描述符在 EAR 部署中启用子部署类加载器隔离。这不需要对应用服务器进行任何更改,也不会影响任何其他部署。
即使子部署类加载器隔离已被禁用,也无法添加 WAR 部署作为依赖项。
添加部署描述符文件。
将
jboss-deployment-structure.xml部署描述符文件添加到 EAR 的META-INF目录中(如果它尚不存在),并添加以下内容:<jboss-deployment-structure> </jboss-deployment-structure>
<jboss-deployment-structure> </jboss-deployment-structure>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 添加
<ear-subdeployments-isolated>元素。如果 jboss-
deployment-structure.xml 文件的内容不存在,请将 <ear文件中-subdeployments-isolated> 元素添加到 jboss-deployment-structure.xml。<ear-subdeployments-isolated>true</ear-subdeployments-isolated>
<ear-subdeployments-isolated>true</ear-subdeployments-isolated>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
现在,为这个 EAR 部署启用了 Subdeployment 类装载程序隔离。这意味着,EAR 的子部署不会对每个非 WAR 子部署具有自动依赖项。
3.7.4. 在企业归档中配置子部署之间的会话共享 复制链接链接已复制到粘贴板!
JBoss EAP 提供配置企业存档(EAR)在 EAR 中包含的 WAR 模块子部署之间共享会话的功能。默认情况下禁用此功能,必须在 EAR 的 META-INF/jboss-all.xml 文件中明确启用。
由于此功能不是标准 servlet 功能,如果启用此功能,您的应用程序可能无法移植。
要在 EAR 中启用 WAR 之间的会话共享,您需要在 EAR 的 META 元素:
-INF/jboss-all.xml 中声明 shared- session-config
示例: META-INF/jboss-all.xml
shared-session-config 元素用于为 EAR 中的所有 WAR 配置共享会话管理器。如果存在 shared-session-config 元素,则 EAR 内的所有 WAR 将共享相同的会话管理器。此处所做的更改将影响 EAR 中包含的所有 WAR。