2016年3月18日星期五

EAP_049:EAP 6 类加载机制(三)

环境:OS X EI Capitan 10.11.3 + JBoss EAP 6.4.0

1. 为应用增加 explicit dependency
dependencies 可以使用两种不同的方法增加:

1.1. 增加 MANIFEST.MF 文件
(1)对于 .war 或 .jar 文件,在 META-INF 目录增加 MANIFEST.MF 文件。
(2)对于 .ear 文件,在 META-INF 目录增加 MANIFEST.MF 文件。
MANIFEST.MF 文件内容可以如下:
Dependencies: org.javassist, org.apache.velocity
Dependencies: org.javassist optional, org.apache.velocity
Dependencies: org.javassist, org.apache.velocity export

1.2 增加 jboss-deployment-structure.xml 文件
jboss-deployment-structure.xml 是 JBoss EAP 6 的新特性,它可以控制部署时类加载。 
(1)对于 .war 文件,在 WEB-INF 目录增加 jboss-deployment-structure.xml 文件。
(2)对于 .jar 文件,在 META-INF 目录增加 jboss-deployment-structure.xml 文件。
(3)对于 .ear 文件,在 META-INF 目录增加 jboss-deployment-structure.xml 文件。
jboss-deployment-structure.xml 文件内容可以如下:
<jboss-deployment-structure>
  <deployment>
    <dependencies>
      <module name="org.javassist" optional="true"/>
      <module name="org.apache.velocity" export="true" />
    </dependencies>
  </deployment>
</jboss-deployment-structure>

2. 防止一个 module 被隐含加载
<jboss-deployment-structure>
  <deployment>
    <exclusions>
      <module name="org.javassist" />
      <module name="org.dom4j" />
    </exclusions>
  </deployment>
</jboss-deployment-structure>

3. exclude subsystem
<exclude-subsystems>
  <subsystem name="SUBSYSTEM_NAME" />
</exclude-subsystems>

4. .ear 中的 subdeployments isolated
默认情况下,<ear-subdeployments-isolated>false</ear-subdeployments-isolated>
这表明:
(1).war subdeployment 隐含依赖 parent module 和 EJB Jar module。
(2)EJB JAR subdeployments 隐含依赖 parent module 和其它的 EJB JAR subdeployments。
注意,没有 subdeployment 隐含依赖 .war subdeployment,但是每个 subdeployment 都可以配置依赖其它的 subdeployment。
如果需要更高的隔离性,可以 <ear-subdeployments-isolated>true</ear-subdeployments-isolated>
这表明每个 subdeployment 都不隐含依赖其它 subdeployment。
(1).war subdeployment 不隐含依赖 parent module 和 EJB Jar module。
(2)EJB JAR subdeployments 不隐含依赖 parent module 和其它的 EJB JAR subdeployments。

参考文献:
1. 《JBoss_Enterprise_Application_Platform-6.4-Development_Guide-en-US.pdf》第三章 Class Loading and Modules
2. http://www.mastertheboss.com/jboss-server/jboss-as-7/jboss-as-7-classloading?showall=
3. http://www.mastertheboss.com/jboss-server/jboss-as-7/jboss-as-7-classloading?start=1
4. http://www.mastertheboss.com/jboss-server/jboss-as-7/jboss-as-7-classloading?showall=&start=2
5. http://stackoverflow.com/questions/34293402/jboss-how-can-to-exclude-javax-validation-in-jboss-deployment-structure

没有评论: