1

WebSphere MQ キューでいくつかのアクションを実行するアプリケーションを作成しています。特に、このメソッドはメッセージをあるキューから別のキューに移動します。次のコードで問題は発生しません。

Context ctx = new InitialContext();
ConnectionFactory retrieveConnectionFactory = (ConnectionFactory) ctx.lookup(jndiPrefix + "/" + qcfName);
retrieveConnection = retrieveConnectionFactory.createConnection();
Queue source = (Queue) ctx.lookup(jndiPrefix + "/" + sourceQueue);
retrieveConnection.start();
retrieveSession = retrieveConnection.createSession(true, Session.AUTO_ACKNOWLEDGE);
String queueSearchSpec = buildSearchSpec(searchSpec);
consumer = retrieveSession.createConsumer(source, queueSearchSpec);

do {
    qMessage = consumer.receiveNoWait();
    if (qMessage != null) {
        messages.add(qMessage);
        numberOfMessages++;
    }
} while (qMessage != null);

しかし、後で、キャスト例外を受け取ることを除いて、非常に似たようなことをしています:

ConnectionFactory putConnectionFactory = (ConnectionFactory) ctx.lookup(jndiPrefix + "/" + destinationQueue);           
// this is where the exception is occurring-- Error: com.ibm.mq.jms.MQQueue incompatible with javax.jms.ConnectionFactory
putConnection = putConnectionFactory.createConnection();
Queue destination = (Queue) ctx.lookup(jndiPrefix + "/" + destinationQueue);
putConnection.start();
putSession = putConnection.createSession(true, Session.AUTO_ACKNOWLEDGE);
MessageProducer producer = putSession.createProducer(destination);
for(int i = 0; i < messages.size(); i++)
{
    producer.send(messages.get(i));
}

上記の抜粋の 2 行目のコメントに注意してください。ここで、「com.ibm.mq.jms.MQQueue incompatible with javax.jms.ConnectionFactory.」という例外メッセージが表示されます。ここにありますが、上にはありません。すべてのオブジェクトを「javax.jms. 'プレフィックスですが、それでも同じエラーを受け取りました。

WebSphere Application Server v7.0 でアプリケーションを実行しています。どんな助けでも大歓迎です。

4

2 に答える 2

0

私の愚かな間違い。この行で:

ConnectionFactory putConnectionFactory = (ConnectionFactory) ctx.lookup(jndiPrefix + "/" + destinationQueue);

ctx.lookup の 2 番目の変数は、上記のコードのように、Queue Connection Factory の qcfName である必要があります。メッセージの移動先の Queue を参照するdestinationQueueを含めました。

于 2012-11-06T21:51:46.690 に答える