3

MQ接続ファクトリを設定した後、以下のエラーが発生します。

java.lang.ClassCastException:com.ibm.ejs.jms.JMSQueueConnectionFactoryHandleはcom.ibm.mq.jms.MQQueueConnectionFactoryと互換性がありません

例外が指している私のコードスニペット:

文字列queueConnectionJndi=props.getProperty(queueConnection + MQ_CONN); queueConnectionFactory = MQQueueConnectionFactory)initialContext.lookup(queueConnectionJndi);

私はこれの根本的な原因を見つけることができません。

どんな体でもこれについて私を助けてくれますか、よろしくお願いします。

4

5 に答える 5

1

これ以上のコンテキストがなければ確認する方法はありませんが、次のメソッド呼び出しのように見えます。

initialContext.lookup(queueConnectionJndi);

は、com.ibm.mq.jms.MQQueueConnectionFactoryにキャストできないタイプcom.ibm.ejs.jms.JMSQueueConnectionFactoryHandleのオブジェクトを返しています。

より多くのコンテキストを提供できますか?

于 2012-09-21T12:04:12.567 に答える
0

古いナブルに関するこの投稿は、同様の問題のように聞こえ、あなたを助けるかもしれません。

jms.jar具体的には、最終応答では、デプロイされたWARにある可能性のあるファイルを削除することについて説明します。を確認してくださいWEB-INF/lib。特定のjarはWebsphreコンテナーによって提供され、WARに含めるべきではありません。

春の4mに関するこの投稿は、クラスパスに含まれるべきではないjarによって引き起こされるこの種の問題も示しています。

次のいずれかが見つかった場合は削除してください...

naming.jar
providerutil.jar
jndi.jar
jms.jar
mq.jar
websphere.jar
于 2012-09-21T13:08:07.953 に答える
0

Websphere MQ固有の実装クラスの代わりにJMS標準( ConnectionFactoryまたはQueueConnectionFactory )を使用するようにコードを書き直すことはできますか?そうすれば、アプリをWebsphere MQに結び付ける必要がなくなり、代替のMQ実装に移植するのが簡単になります...

すなわち

import javax.jms.QueueConnectionFactory;
...

queueConnectionFactory = (QueueConnectionFactory)initialContext.lookup(jndiName);
于 2012-09-25T22:34:36.133 に答える
0

WASが使用しているMQjarと使用しているアプリケーションが異なるため、この問題が発生しました。クラスパスを修正すると、解決されます。ご迷惑をおかけして申し訳ありません、助けてくれてありがとう。

于 2012-10-09T06:55:18.347 に答える
0

私は答えを見つけるために多くの試行錯誤を繰り返しました(少なくとも私の質問に対する答え)。この解決策があなたの問題も解決することを願っています。jmsライブラリを除いて別の投稿から述べたように動作します。しかし、どのようにしてjmsライブラリを除外し、それでもコードをコンパイルできるのでしょうか。それは誰も言及していないようです。これに対する解決策は、jmsライブラリのスコープを「提供」することです(MavenまたはGradleを使用している場合)。

どこかで述べたように:

「提供されるとは、コンパイルにJARが必要であることを意味しますが、実行時には環境によってすでにJARが提供されているため、アプリにパッケージ化する必要はありません。Webアプリの場合、これはJARファイルがWEB-INF/libディレクトリに配置されます。」

したがって、pom.xmlでこれらを追加/更新します。

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jms</artifactId>
    <version>4.3.4.RELEASE</version>
    <exclusions>
        <exclusion>
            <groupId>javax.jms</groupId>
            <artifactId>javax.jms-api</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>javax.jms</groupId>
    <artifactId>jms</artifactId>
    <version>1.1</version>
    <scope>provided</scope>
</dependency>

うまくいけば、これはインターネットからの回答の欠如に不満を持っている人々に役立つことができます。

すべてのIBMライブラリーを削除します。それらは役に立たない。Websphereにデプロイすると、とにかくそのライブラリーが使用されます。

于 2016-11-29T21:17:50.733 に答える