1

離れたサーバーの MQ キューをリッスンする EJB3 MDB に取り組んでいます。MDB によって行われる処理を除いて、すべて正常に動作しています (メッセージがリッスン キューに入れられると MDB がトリガーされます)。詳細については、WMQ リソース アダプターを使用してキューをマップします。

MDB のメソッド「onMessage」に、指定されたメッセージをクラス「com.ibm.jms.JMSBytesMessage」にキャストしようとしましたが、奇妙なエラー メッセージが表示されます。

コードは次のとおりです (この例では単純です)。

public void onMessage(Message theMessage) {
  ((JMSBytesMessage) theMessage).readBytes(myBytes);
}

そして例外メッセージ:

入力要求の読み取り中に例外が発生しました: com.ibm.jms.JMSBytesMessage は com.ibm.jms.JMSBytesMessage と互換性がありません

わかりました。受信したメッセージは「com.ibm.jms.JMSBytesMessage」タイプであるはずですが、なぜアプリケーションが機能しないのでしょうか? JBoss サーバーが別のバージョンのライブラリー 'com.ibm.mqjms.jar' (JMSBytesMessage クラスを含む) を既に使用していて、この種のエラーが発生する可能性はありますか?

ps: Linux システムの JBoss サーバー バージョン 4.2.3 にアプリケーションをデプロイしました。同じバージョンの JBoss サーバーを使用しているが、ウィンドウ システム (同じ構成、同じライブラリなど) を使用しているローカル マシンで、アプリケーションを既に動作させています。

誰かがそのようなエラーの理由について考えを持っていますか?

助けてくれてありがとう。

よろしく、

編集: 解決策: com.ibm.jms.JMSBytesMessage の代わりに javax.jms.BytesMessage でキャストする

4

1 に答える 1

3

私のコメントを答えとして再現することもできます:

MQ固有com.ibm.jms.JMSBytesMessageにキャストせず、JMS標準にキャストしますjavax.jms.BytesMessage。コードを実装固有の型に結合することは、JMSが達成しようとすることとは逆です。

于 2011-01-25T20:43:52.970 に答える