簡體   English   中英

Jboss EAP 7 - 如何從部署中排除隱式模塊(javax.jms)?

[英]Jboss EAP 7 - How to exclude implicit modules from deployment (javax.jms)?

我不認為我會在這里結束,但經過很多谷歌和StackOverflow搜索后我才知道。

這是我的確切問題,除了我不能進行代碼更改。

我正在嘗試部署的WAR包括一個JMS庫(即javax.jms ,我不能將其排除在WAR之外)。默認情況下,它已由Jboss EAP 7加載。 jar的路徑是這樣的jboss/modules/system/layers/base/javax/jms/api/ain/jboss-jms-api_2.0_spec-1.0.0.Final-redhat-1.jar 由於這兩個不同版本的相同類加載我得到ClassCastException

org.apache.activemq-ra.ActiveMQConnectionFactory cannot to be cast to javax.jms.ConnectionFactory

所以,我希望Jboss 加載javax.jms,以便我的應用程序可以使用WAR附帶的JAR。

所以,我想知道是否有任何方法可以全局排除模塊(對於所有WAR部署)。

每次部署排除它也會起作用。 我確實意識到它可以使用jboss-deployment-structure.xml來實現,但我無法讓它工作。

這是我嘗試過的:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure
        xmlns="urn:jboss:deployment-structure:1.2">
    <deployment>
        <exclude-subsystems>
            <subsystem name="javax" />
            <subsystem name="javax.jms" />
        </exclude-subsystems>
    </deployment>
</jboss-deployment-structure>

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure
    xmlns="urn:jboss:deployment-structure:1.2">
    <deployment>
        <exclusions>
            <module name="javax" />
            <module name="javax.jms" />
            <module name="javax.jms.api" />
        </exclusions>
    </deployment>
</jboss-deployment-structure>

我把文件放在WEB-INF目錄中。 它沒用。 它仍然從Jboss EAP的modules文件夾加載JMS類。 那么,我該怎么做呢?

您應該從部署中刪除JMS API JAR。 您仍然可以在部署中保留JMS實現JAR,但這應該最終在RAR中,最好在部署之外。

正確的jboss-deployment-structure.xml在這里:

<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
    <deployment>
        <exclude-subsystems>
            <subsystem name="messaging-activemq"></subsystem>
        </exclude-subsystems>
        <exclusions>
            <module name="javax.jms.api"></module>
        </exclusions>
    </deployment>
</jboss-deployment-structure>

這樣就可以排除消息傳遞子系統和JMS API。

這個鏈接有一些你可以嘗試的東西。

值得注意的是:

我認為問題是activemq-all-5.4.2.jar包含javax.jms。*。 您的部署已經從javaee.api模塊隱式獲取了這一點(請參閱此處有關implicity模塊依賴關系的更多信息)。 我認為應用程序模塊/ jar不適合打包Java EE接口。 您可以嘗試從activemq-all-5.4.2.jar中刪除javax目錄,或者在模塊中使用一組不同的ActiveMQ jar來將其限制為僅需要它。

和/或更改ActiveMQ的module.xml

<module xmlns="urn:jboss:module:1.0" name="activemq">  
    <resources>  
        <resource-root path="activemq-all-5.4.2.jar"/>  
    </resources>  
    <dependencies>  
        <module name="javax.api"/>  
    </dependencies>
</module>

如果您有興趣,似乎還有一種方法可以在Jboss中嵌入ActiveMQ 我不會從該文章中提取信息,因為它沒有回答原始問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM