在 JBoss 环境中从 ear 文件加载共享本机模块而不是从 Web 应用程序加载

loading shared native modules from ear file than from web apps in JBoss environment

有一个加载本机库 .so 文件的 jar。这个 jar 在服务器上作为 jboss 模块可用。每个 classloader 只能加载一次本机文件。 ear1 文件中有两个 war 模块 war1、war2。如果模块在 war1 和 war2 中都配置为 jboss 模块,我没有问题。但是我正在寻找一种替代方法,如果我配置在 earfile/lib 中加载本机库的 jar 并且 war 从那里引用,那行得通吗。那个特定的 class 应该只加载一次并且应该在两个 war 文件中都可用。

我们需要将子部署部分添加到 ear/Meta-INF 文件夹内的 jboss 部署 xml 文件中。这样 jboss 模块就可以供所有其他 submodules/war 模块使用。

 <?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <deployment>
        <dependencies>
            <module name="com.aexp.sec.crypto" export="TRUE" />
        </dependencies>
    </deployment>
    <sub-deployment name="crypto-war1-1.0-SNAPSHOT.war">
        <dependencies>
            <module name="com.aexp.sec.crypto" />
        </dependencies>
    </sub-deployment>
    <sub-deployment name="crypto-war2-1.0-SNAPSHOT.war">
        <dependencies>
            <module name="com.aexp.sec.crypto" />
        </dependencies>
    </sub-deployment>
</jboss-deployment-structure> 

注意:为了以后用户的利益,在下面添加@Vamshidhar Cheburthy的解决方案,

我们需要将子部署部分添加到 ear/Meta-INF 文件夹内的 JBoss 部署 XML 文件。这样 JBoss 模块就可以供所有其他 submodules/war 模块使用。

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<deployment>
    <dependencies>
        <module name="com.aexp.sec.crypto" export="TRUE" />
    </dependencies>
</deployment>
<sub-deployment name="crypto-war1-1.0-SNAPSHOT.war">
    <dependencies>
        <module name="com.aexp.sec.crypto" />
    </dependencies>
</sub-deployment>
<sub-deployment name="crypto-war2-1.0-SNAPSHOT.war">
    <dependencies>
        <module name="com.aexp.sec.crypto" />
    </dependencies>
</sub-deployment>