【发布时间】:2015-11-06 10:16:23
【问题描述】:
虽然记录为针对 Glassfish 进行了测试,但 Glassfish 中的消息驱动 Beans 使用 IBM 本机 MQ 资源适配器 (wmq.jmsra.rar) 远非显而易见。 EJB 和 JCA 标准定义的许多标准配置工具实际上不起作用,尤其是在激活规范方面。
我知道 glassfish 的三个 MQ 适配器:一个是来自 Oracle 的 GenericJMSRA:here 和 here。第二个是来自 IBM (installation notes) 的 wmq.jmsra,可从 * IBM Fix Central* 获得。要使用它,您必须确实拥有您将连接到的队列管理器的 MQ 许可证,但您可以使用免费的 IBM ID 下载。我正在使用 IBM 的第二个资源适配器,因为它提供了对 Java 中的本机 MQ API 的访问,我需要这些 API 来将精确制作的 MQ 消息发送到一些纯 MQ(非 JMS)目标。
存在第三种--legacy--alternative:JMSJCA here,曾经是我的最爱,但在 Glassfish 3 和 JRE6 中的 MQ V6 停止了支持。我尝试在 Glassfish 4 (=JMS2.0) 中使用 JRE7 将源代码升级到 MQ v7.5 (或 V8 = JMS2.0),甚至升级到 glassfish 3.1 (=JMS1.1),但在类加载器问题和,一旦解决,类转换异常/不兼容的连接对象版本等。
我终于让 IBM RA 在我在回复帖子中记录的狭窄配置中工作。如果有人发现替代疗法和配置也有效,特别是避免下面引起的一些陷阱,那将非常受欢迎。
这里是遇到的主要问题的快速列表:
- 一旦创建管理对象产量:RAR8029:
Resource [ jms/MyAdminObj ] of type [ aor ] is not enabled:解决here -
MQException: JMSCMQ0001: ... ('MQRC_HOST_NOT_AVAILABLE')由JMSWMQ0018: Failed to connect to queue manager '' with connection mode 'Client' and host name 'localhost(1414)'引起...尽管您可以保证相关的 remote_host-port-channel-queueManager 详细信息已在创建的连接池中到位,甚至作为正在部署的 RA 的 ra.xml 中的默认值 -
Exception during endpoint activation for ra [ jmsra ], activationSpecClass [ com.sun.messaging.jms.ra.ActivationSpec ]... 揭示您的激活规范实际上被路由到内部 JMS 资源适配器,而不是您认为应该的 MQ 资源适配器 -
WARN j.e.r.r.com.sun.enterprise.connectors.util - RAR8000 : The method setConnectionFactoryLookup is not present in the class : com.sun.messaging.jms.ra.ActivationSpec和WARN j.e.r.r.com.sun.enterprise.connectors.util - RAR8000 : The method setConnectionFactoryLookup is not present in the class : com.sun.messaging.jms.ra.ActivationSpec然后成功部署消息驱动 Bean,可能会让您相信,除非您密切关注服务器日志,否则您的 MDB 现在正在侦听正确的目的地......但实际上不会消耗单条消息
查找相关文档的存储位置也是一项繁琐的工作。这里是:
MQ v7.5中wmq.jmsra ra.xml中所有参数含义的线索可以在MQ Websphere 7.5 infocenter>参考>...Properties of WebSphere MQ classes for JMS objects 并且资源适配器的使用记录在 MQ Websphere 7.5 信息中心 > ... The WebSphere MQ resource adapter 但不会严格按照记录的方式工作
【问题讨论】:
标签: glassfish jms ibm-mq message-driven-bean