- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我已阅读文章http://techtots.blogspot.com/2010/01/connecting-to-mq-using-spring-without.html关于配置 QueueConnectionFactories 并让这方面的工作顺利进行。
# MQ related values
mq.jms.qcf=QM_Epsilon
mq.jms.request.queue=TEST.REQUEST.QUEUE
# Connection details
mq.host.url=localhost:1414/SYSTEM.DEF.SVRCONN
mq.factoryclass=com.ibm.mq.jms.context.WMQInitialContextFactory
# Authentication details
mq.auth=simple
mq.user=******
mq.password=********
<bean id="queueConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="${mq.jms.qcf}" />
<property name="resourceRef" value="false" />
<property name="jndiEnvironment">
<props>
<prop key="java.naming.factory.initial">${mq.factoryclass}</prop>
<prop key="java.naming.provider.url">${mq.host.url}</prop>
<prop key="java.naming.security.authentication">${mq.auth}</prop>
<prop key="java.naming.security.principal">${mq.user}</prop>
<prop key="java.naming.security.credentials">${mq.password}</prop>
</props>
</property>
</bean>
使用此配置,queueConnectionFactory bean 很容易作为 MQQueueConnectionFactory 注入(inject)到我的类中。
但我想使用发布/订阅模型,据我所知,我需要为此获得一个 MQTopicConnectionFactory。我到处搜索并尝试了很多东西,但我找不到任何关于如何修改此配置或 MQ 安装的信息,以便我获得 MQTopicConnectionFactory 而不是 MQQueueConnectionFactory。
最佳答案
WMQInitialContextFactory
是一个通过 WebSphere MQ 队列实现 JNDI 提供程序的类。托管对象不是存储在 .bindings 文件或 LDAP 中,而是被序列化并存储在队列中,此类允许您将该队列视为另一个 JNDI 存储。此类仅旨在成为 JNDI 提供者,而不是实际 IBM JMS 实现的替代品。由于将托管对象存储在主题上是行不通的,因此这些类中没有主题工厂。这符合预期。
在我看来,WMQInitialContextFactory
的问题在于它必须首先连接到 WebSphere MQ 以获得连接工厂,然后告诉应用程序 - 你猜对了 - 如何连接到 WebSphere MQ。这使得链接的文章变得困惑,因为看起来所有配置、WMQ 连接详细信息等等都是为了应用程序的利益,而实际上它们只是引导一个 JNDI 提供程序,该提供程序应该已经定义了连接工厂对象所有这些相同的信息。
文章中缺少的是,作者必须使用 IBM 的 JMSAdmin 工具连接到 MQInitialContext 并定义 ConnectionFactory 和其他管理对象,然后再将应用程序连接到同一初始上下文以访问它们。
郑重声明,WebSphere MQ JMS 类支持 JMS 1.1 ConnectionFactory 和 Destination 类已经有一段时间了。在此之前,他们根据 JMS 1.0 规范同时支持队列和主题。
您可以将 IBM WMQ JMS 实现下载为 SupportPac MQC7 .除了 jar 文件之外,还有很多其他内容。例如,您会获得大量示例代码、诊断和跟踪实用程序、文档等。您还会获得正确的 jar 文件。
如果您想使用 .bindings 文件(文件系统初始上下文)而不是 WMQInitialContextFactory
,请下载最新的 WebSphere MQ Explorer 工具 SupportPac MS0T .您可以创建一个目录,将 WMQ Explorer 指向它并定义所有连接工厂和目的地。 (或者,如果您喜欢老派,则使用特定于域的 QueueConnectionFactory 和 TopicConnectionFactory。)有关使用 WMQ Explorer 定义托管对象的更多信息,请访问: Creating and configuring JMS administered objects
如果您需要包含如何使用 IBM 的 JMSAdmin 工具创建 .bindings 文件的演示的教程,请查看 Running a standalone Java application on WebSphere MQ V6.0 。 (JMSAdmin 工具随 WMQ 服务器一起安装,我相信它也随上面链接的免费 MS0T WMQ 客户端安装一起提供。)JMSAdmin 工具的文档在此处: Using the WebSphere MQ JMS administration tool
无论您选择哪种方法来创建托管对象,您都可以在以下位置查找 IBM 实现中支持的所有可能属性: Properties of WebSphere MQ classes for JMS objects
关于java - 如何在 Spring 中为 MQSeries 创建 TopicConnectionFactory?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5263414/
我是一名优秀的程序员,十分优秀!