如何通过JMS API设置MQMD ApplicationID字段?

时间:2009-02-12 10:36:24

标签: java java-ee jms ibm-mq

我正在使用JMS API将消息发送到Websphere MQ服务器。 拉取我创建的消息的应用程序要我设置ApplicationID字段 在MQMD结构中为常量值。 我无法在JMS API中找到一种方法来访问MQMD结构

问题:有没有办法做到这一点?如果是的话怎么样?如果不是,那么这是我唯一的选择 是使用MQ java API而不是JMS API?

3 个答案:

答案 0 :(得分:2)

从v7.0开始,您可以将所有MQMD字段作为JMS消息属性读取,并且可以以相同的方式设置其中的许多字段。

请参阅:http://publib.boulder.ibm.com/infocenter/wmqv7/v7r0/topic/com.ibm.mq.csqzaw.doc/jm41030_.htm

但是客户端和WMQ服务器必须都是v7.0或更高版本才能使用此功能。

答案 1 :(得分:1)

可以从收到的消息中读取MQMD字段。通过调用setMQMDReadEnabled(true)方法在目标上设置MQMDReadEnabled属性。

然后,您可以使用getStringProperty方法读取applicationIdentityData。

答案 2 :(得分:0)

来自MQ文档:

Where the MQMD includes a field that is equivalent to the JMS field, the JMS field is mapped onto the MQMD field. Additional MQMD fields are exposed as JMS properties, because a JMS application may need to get or set these fields when communicating with a non-JMS application.

您正在寻找的属性可能是“JMSXAppID”。

如果不起作用,请查看文档。有很多奇怪的东西,比如“如果应用程序使用与代理的实时连接,则此部分不适用”。 (所以你不想要“与经纪人的实时连接”......无论这意味着什么)。

另外“The administrator indicates that the JMS application is communicating with such an application by setting the TARGCLIENT property of the destination to MQ.

如果没有意义,您必须创建测试用例,以帮助您弄清楚MQ在幕后做了什么。创建一条JMS消息,将所有属性设置为一些奇怪的值,并将其发送到一个非活动的MQ队列,您可以在其中检查它。这样,您就可以确定哪个字段映射到哪里。

在此之后,您可以尝试其他方式。如果JMS实现不允许您将消息的所有属性作为映射或其他内容获取,请使用Java调试器查看内存中的数据。 Field.setAccessible(true)是你的朋友。