我正在尝试开发一个JMS 独立应用程序 来读写MQSeries上的Queue。我的老板要求我使用 纯Java JMS (而不是ibm.mq lib)来执行此操作。
这是建立jms连接所需的信息:
mq.hostname=10.10.10.10 mq.channel=API.CLIENTCHL mq.queueManager=MQPETAPI mq.port=1422
您知道该怎么做?还是您有任何链接教我做到这一点。
这里的问题是“我的老板要求我使用纯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系统中/opt/mqm/samp,它们在中,而在Windows中,它们在中install_dir/tools/jms/samples。该SimpleRequestor.java示例包含以下代码,用于在不使用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功能,但是即使对于V6功能,V7客户端中的JMS实现也有了很大的改进。如果出于某些原因您确实必须使用V6客户端,则可以将其下载为SupportPacMQC6。无论使用哪种客户端版本,请确保使用相应的信息中心。
V6信息中心 V7信息中心
最后,此处是带有所有SupportPacs索引的登录页面。