我正在尝试将原始MQSTR消息放在WebSphere MQ队列上。根据{{3}},我可以这样做:
((com.ibm.mq.jms.MQQueue) queue).setTargetClient(JMSC.MQJMS_CLIENT_NONJMS_MQ);
表示它是非JMS队列。 (我知道JMSC.MQJMS_CLIENT_NONJMS_MQ
已被弃用 - 这与此问题无关。)但是,我一直在使用com.ibm.mq.MQQueue
而不是com.ibm.mq.jms.MQQueue
。从前者到后者的铸造都行不通。此外,只有com.ibm.mq.jms.MQQueue
具有setTargetClient
方法。
为什么有两个MQQueue
类,我应该使用哪一个?我想使用主机名,通道名和队列管理器名(而不是JNDI)在Java程序中外部连接到z / OS队列。
答案 0 :(得分:2)
姆。我不想给出“RTM”答案,但这确实是答案。有两个JAVA MQ API:1个用于“MQ classes for Java”,1个用于“MQ类用于JMS”。
注意:“用于JMS的MQ类”将把JMS头(也称为MQRFH2)放在消息中,而“MQ classes for Java”则不会。
因此,如果您正在编写常规Java / MQ应用程序,那么不要使用“MQ类for JMS”,只需使用“MQ classes for Java”,您就可以了。
答案 1 :(得分:0)
使用
((com.ibm.mq.jms.MQQueue) queue).setTargetClient(JMSC.MQJMS_CLIENT_NONJMS_MQ);
将告诉JMS客户端不会使用RFH2,因此发送JMSTextMessage将确保普通的MQSTR格式消息到达队列。即目标客户端不是JMS,因此不需要RFH2。
坚持使用带有上述设置的com.ibm.mq.jms.MQQueue的JMS API。弃用的原因是使用另一组常量。这个提供的函数不被弃用。
此技术说明http://www-01.ibm.com/support/docview.wss?uid=swg21423244解释了要使用的常量。