这里的问题是要求“我的老板要求我使用纯java JMS(不是 ibm.mq lib)来做到这一点。JMS是一个规范,每个实现都必须符合API和语义,但可以自由地在低级别上做任何他们想做的事情。始终需要使用传输供应商提供的实现类。因此,如果使用 WebSphere MQ 作为传输,则需要使用 IBM MQ JMS 类来编写 JMS 应用程序。
也就是说,如果您坚持使用纯 JMS API 调用,您将能够插入任何传输供应商的类。当您获得原始帖子中提到的要求时,这通常是要做的。
有一篇文章准确地描述了您要做什么,称为在 WebSphere MQ V6.0 上运行独立的 Java 应用程序 它只使用 JMS API,它在本地文件系统(.bindings 文件)中使用 JNDI。通过将 IBM JMS 类换成其他供应商并使用其 JNDI 工具,您将能够插入任何 JMS 传输,而无需使用此方法更改代码。
如果要在没有 JNDI 的情况下执行相同的操作,请查看随 MQ 客户机安装提供的样本程序,从中获取 Java 类。在UNIX / Linux系统中,它们位于Windows中,而在Windows上,它们位于.该样本包含以下代码,用于在不使用 JNDI 的情况下初始化连接工厂:/opt/mqm/samp
install_dir/tools/jms/samples
SimpleRequestor.java
try {
// Create a connection factory
JmsFactoryFactory ff = JmsFactoryFactory.getInstance(WMQConstants.WMQ_PROVIDER);
JmsConnectionFactory cf = ff.createConnectionFactory();
// Set the properties
cf.setStringProperty(WMQConstants.WMQ_HOST_NAME, "localhost");
cf.setIntProperty(WMQConstants.WMQ_PORT, 1414);
cf.setStringProperty(WMQConstants.WMQ_CHANNEL, "SYSTEM.DEF.SVRCONN");
cf.setIntProperty(WMQConstants.WMQ_CONNECTION_MODE, WMQConstants.WMQ_CM_CLIENT);
cf.setStringProperty(WMQConstants.WMQ_QUEUE_MANAGER, "QM1");
因为此方法不使用 JNDI,所以您需要编写无法在传输供应商之间传输的代码。它是 IBM WebSphere MQ 特有的。
如果您从某个地方抓取了 MQ jar 并且没有完整的安装(因此没有示例),则可以将其下载为 SupportPac MQC7。下载是免费的。通常,您应该使用最新的客户机,即使使用后台队列管理器也是如此。显然,您不会从 V6 QMgr 获得 V7 功能,但 V7 客户端中的 JMS 实现得到了很大的改进,即使对于 V6 功能也是如此。如果由于某种原因,您确实必须使用 V6 客户端,则可以将其下载为 SupportPacMQC6。无论您使用哪个客户端版本,请确保使用相应的信息中心。
V6 信息中心
V7 信息中心
最后,带有所有支持Pacs索引的登录页面在这里。