对 JMSInput 节点提供消息或从 JMSOutput 节点接收消息的 JMS 目标可以作为消息流全局事务的一部分进行同步点协调。
涉及同步点协调程序的事务
在此图中,JMSInput 节点从某个主题使用消息,然后对 JMS 队列 JMSOutput 节点生成消息。这些节点与 JMS 提供程序连接并与其进行会话。任何消息流输入节点都可以通知外部同步点协调程序,消息流事务何时开始及结束,以及该流涉及的任何资源是应该落实还是应该回滚。
同步点协调程序向所有参与的资源管理器发送 XA/Open 兼容请求来通知它们进行准备。然后,要么落实,要么回滚任何更改。资源管理器(如 WebSphere MQ、DB2 和任何 XA 兼容 JMS 提供程序)可以参与全局事务。外部同步点协调程序是分布式平台上的 WebSphere MQ 和 z/OS 上的 RRS(资源恢复服务)。
仅当所连接的 JMS 提供程序通过 JMS XAResource 类支持 XA/Open 接口时,JMSInput 节点和 JMSOutput 节点才能参与全局事务。JMS 提供程序的一个示例就是 WebSphere MQ Java 客户机。
可疑事务
当资源管理器不响应来自同步点管理器的调用时(其中该调用要落实或回滚资源),可能会发生可疑事务。在代理的 WebSphere MQ 队列管理器启动期间,将执行初始恢复步骤来确保在代理消息流开始处理新的输入之前,解决任何可疑事务。参与代理全局事务的 JMS 提供程序包含在此恢复步骤中。
启用全局事务支持的配置
当代理的 WebSphere MQ 队列管理器启动时,它将装入该替代文件。该替代文件将 XA/Open 事务调用从同步点协调程序转发到 JMS 提供程序。这将确保参与该事务的 JMS 资源可以和同一个事务中涉及的其他资源管理器协调为同步。
XAResourceManager: Name=WBIWMQJMS SwitchFile=/<Installation Path>/lib/JMSSwitch.so XAOpenString=<Initial Context Factory>, <location of JNDI bindings>' <LDAP Principal>, <LDAP Credentials>, <Recovery Connection Factory Name> ThreadOfControl=THREAD其中:
<Installation Path> 是 WebSphere Message Broker 安装的位置。该值是必要的。
必须在要使用的每个 JMS 提供程序的代理队列管理器 .ini 文件中指定一节,即,针对每个新 JMS 提供程序都应该有一节,其中 JMS 提供程序可以由正在代理上运行的消息流中包含的任何 JMSInput 或 JMSOutput 节点指定。
节中 JNDI 绑定的初始上下文工厂和位置的值必须与在消息流的 JMSInput 或 JMSOutput 节点中指定的那些值相匹配。
任何 LDAP 参数都必须与已使用 mqsicreatebroker 或 mqsichangebroker 命令指定的那些参数相匹配。
恢复工厂名必须与在 JNDI 受管对象中创建的队列连接工厂名相匹配。如果省略此名称,则使用称为 recoverXAQCF 的缺省工厂。在这两种情况下,此值都必须引用已经创建的 JNDI 受管对象。
以下为示例节:
XAOpenString=com.sun.jndi.fscontext.RefFSContextFactory, /u/myJndiFileLocation, , , myRecoveryQCFName其中省略了 LDAP 参数,但对恢复指定了用户定义的队列连接工厂。
在 Windows 上需要与在 Linux 和 Unix 上相同的信息,但取决于您所使用的 WebSphere MQ 版本,将使用 WebSphere MQ 资源管理器或 WebSphere MQ 服务管理单元进行配置。在 Windows 上,替代文件称为 JMSSwitch.dll。请参阅《WebSphere MQ 系统管理指南》,获取有关如何更新 qm.ini 文件的详细信息。称为 XACloseString 的附加条目应该与为 XAOpenString 提供的值相匹配。
在 WebSphere Message Broker 中,当前唯一受支持的 JMS 提供程序就是 IBM WebSphere MQ Java 客户机。当前对该客户机支持的唯一传输方式为 BIND 方式。无需进一步的配置步骤。
如果需要事务协调,可以使用符合 Java 消息服务规范 V1.1 和通过 JMS 会话支持 JMS XAResource API 的任何 JMS 提供程序。
如果消息设计器已经指定了非 XA 兼容提供程序,则只支持非事务方式。在这种情况下,必须将所有 JMSInput 和 JMSOutput 节点的事务方式属性设置为 no。