2017-12-11 18 views
8

私はここで終わるとは思っていませんでしたが、GoogleとStackOverflowを検索した後、私はここにいます。Jboss EAP 7 - 暗黙的なモジュールをデプロイメントから除外する方法(javax.jms)?

This is my exact problem私はコードを変更する余裕がないことを除いて。

デプロイしようとしているWARには、既定でJboss EAP 7によって既にロードされているJMSライブラリ(javax.jms、これはWARから除外できません)が含まれています。 jarのパスはjboss/modules/system/layers/base/javax/jms/api/ain/jboss-jms-api_2.0_spec-1.0.0.Final-redhat-1.jarのようなものです。同じクラスロードのこの2つの異なるバージョンのため、私はClassCastExceptionを取得しています。だから、

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

私のアプリケーションは、JARがWARに含まれて使用できるように、私はませ負荷するjavax.jmsにJBossのたい。

このように、モジュールをグローバルに(すべてのWARデプロイメント用に)除外する方法があるかどうかは疑問でした。

デプロイメントごとにそれを除外することもできます。そして、私はそれがjboss-deployment-structure.xmlを使用してacheivdできることを認識しますが、それを動作させることはできません。ここで

は、私が試したものです:

<?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ディレクトリにファイルを置きました。それはうまくいかなかった。それでも、J38oss EAPのモジュールフォルダからJMSクラスが読み込まれました。だから、私はこれをどうやって正しく行うのですか?

+0

これはうまくいかないのですが、サブシステム名は 'messaging-activemq'でなければなりません。 ''を除きます。しかし、実装を含めない限り、JMSがデプロイメントで正しく動作するかどうかはわかりません。 –

答えて

2

デプロイメントからJMS API JARを削除する必要があります。依然としてJMS実装JARをデプロイメント内に保持することはできますが、RARに、おそらくデプロイメントの外側で終わるはずです。

+0

私は分かりません。 –

+0

あなたは分からない部分はありますか? –

+0

WAR(デプロイメント)からJMS APIを削除できません。更新された質問をご覧ください。 –

1

このlinkには、お試しできることがいくつかあります。

特に:

I think the problem is that activemq-all-5.4.2.jar contains javax.jms.*. Your deployment already gets this implicitly from the javaee.api module (see more information about implicity module dependencies here). I don't think it is appropriate for an application module/jar to package Java EE interfaces. You can try simply deleting the javax directory from activemq-all-5.4.2.jar or using a different set of ActiveMQ jars in your module to limit it to only what you need.

および/またはActiveMQの

<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> 

のためにあなたのmodule.xmlを変更することもし興味があるなら、同様embed ActiveMQ in Jbossに方法があるように見えます。私は元の質問に答えないので、その記事から情報を引き出すことはありません。

1

正しい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の両方を除外するこの方法です。

関連する問題