JMS 事务性

对 JMSInput 节点提供消息或从 JMSOutput 节点接收消息的 JMS 目标可以作为消息流全局事务的一部分进行同步点协调。

涉及同步点协调程序的事务

描绘通过 JMSInput 节点和 JMSOutput 节点(包含同步点协调程序)的消息流的图。

在此图中,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 提供程序包含在此恢复步骤中。

启用全局事务支持的配置

需要进行其他配置来为 JMSInput 和 JMSOutput 节点启用全局事务支持。必须完成以下步骤:
  1. 将消息流属性协调事务设置为 yes
  2. 对需要参与全局事务的每个 JMSInput 或 JMSOutput 节点,将高级属性事务方式设置为 global
  3. 创建队列连接工厂并提供缺省名 recoverXAQCF 或提供用户定义的名称。请参阅 JMSInputJMSOutput 节点,获取有关创建 JNDI 受管对象的进一步详细信息。
  4. 在分布式平台上,在部署之前需要执行 WebSphere MQ 管理任务。需要执行此任务以向队列管理器注册代理组件。该组件(称为替代文件)是一个共享库(Windows 上的 DLL)。

    当代理的 WebSphere MQ 队列管理器启动时,它将装入该替代文件。该替代文件将 XA/Open 事务调用从同步点协调程序转发到 JMS 提供程序。这将确保参与该事务的 JMS 资源可以和同一个事务中涉及的其他资源管理器协调为同步。

    该任务随平台的不同而有所不同。
    • Linux 和 UNIX
      在 JMSInput 节点可以使用的每个 JMS 提供程序的代理队列管理器初始化文件中放置一个节条目,例如 qm.ini。以下是使用 WebSphere MQ Java 作为 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 安装的位置。该值是必要的。

      XAOpenString 上提供的参数以逗号分隔和占位。如果字符串中后面还要提供其他参数,则任何空缺的可选参数都必须以逗号表示。
      • <Initial Context Factory> 这是 JMS 提供程序的初始上下文工厂标识。该值是必要的。
      • <Location of JNDI bindings> 这是到绑定文件的文件路径,或可以用来创建 JMS 连接初始上下文工厂的 JNDI 受管对象的 LDAP 目录位置。提供到绑定文件的文件路径时,不要包括文件名。请参阅 JMSInput 或 JMSOutput 节点,获取有关创建 JNDI 受管对象的进一步详细信息。该值是必要的。
      • <LDAP Principal> 这是一个可选参数,用来指定当使用 LDAP 数据库保存 JNDI 受管对象时可能需要的主体(用户标识)。
      • <LDAP Credentials> 这是一个可选参数,用来指定当使用密码保护的 LDAP 数据库保存 JNDI 受管对象时可能需要的凭证(密码)。
      • <Recovery Connection Factory Name> 这是一个可选参数,用来指定用于恢复用途的 JNDI 受管对象中队列连接工厂的名称(当需要非缺省名称时)。

      必须在要使用的每个 JMS 提供程序的代理队列管理器 .ini 文件中指定一节,即,针对每个新 JMS 提供程序都应该有一节,其中 JMS 提供程序可以由正在代理上运行的消息流中包含的任何 JMSInput 或 JMSOutput 节点指定。

      节中 JNDI 绑定的初始上下文工厂和位置的值必须与在消息流的 JMSInput 或 JMSOutput 节点中指定的那些值相匹配。

      任何 LDAP 参数都必须与已使用 mqsicreatebrokermqsichangebroker 命令指定的那些参数相匹配。

      恢复工厂名必须与在 JNDI 受管对象中创建的队列连接工厂名相匹配。如果省略此名称,则使用称为 recoverXAQCF 的缺省工厂。在这两种情况下,此值都必须引用已经创建的 JNDI 受管对象。

      以下为示例节:

      XAOpenString=com.sun.jndi.fscontext.RefFSContextFactory,
           /u/myJndiFileLocation,
           ,
           ,
           myRecoveryQCFName
      其中省略了 LDAP 参数,但对恢复指定了用户定义的队列连接工厂。
    • 在 Windows 平台上

      在 Windows 上需要与在 Linux 和 Unix 上相同的信息,但取决于您所使用的 WebSphere MQ 版本,将使用 WebSphere MQ 资源管理器或 WebSphere MQ 服务管理单元进行配置。在 Windows 上,替代文件称为 JMSSwitch.dll。请参阅《WebSphere MQ 系统管理指南》,获取有关如何更新 qm.ini 文件的详细信息。称为 XACloseString 的附加条目应该与为 XAOpenString 提供的值相匹配。

    • 在 z/OS 上

      WebSphere Message Broker 中,当前唯一受支持的 JMS 提供程序就是 IBM WebSphere MQ Java 客户机。当前对该客户机支持的唯一传输方式为 BIND 方式。无需进一步的配置步骤。

    有关更多信息,请参阅 JMSInput 节点和 JMSOutput 节点主题内有关配置协调事务的部分。
  5. JMS 提供程序可以提供事务支持所需的其他 JAR 文件。请参阅 JMS 提供程序文档,获取更多信息。例如,在分布式平台(而不是 z/OS)上,WebSphere MQ JMS 提供程序提供附加 JAR 文件 com.ibm,mqetclient.jar。必须也将此 JAR 添加到代理 shared_classes 目录。在 Windows 上,此目录为 C:\Documents and Settings\All Users\Application Data\IBM\MQSI\shared-classes。有关更多信息,请参阅以下主题中有关向 JMS 节点提供 JMS 提供程序客户机的部分:JMSInput 节点

JMS 提供程序选项

如果需要事务协调,可以使用符合 Java 消息服务规范 V1.1 和通过 JMS 会话支持 JMS XAResource API 的任何 JMS 提供程序。

如果消息设计器已经指定了非 XA 兼容提供程序,则只支持非事务方式。在这种情况下,必须将所有 JMSInput 和 JMSOutput 节点的事务方式属性设置为 no

相关参考
JMS 消息类型
JMS 消息结构
JNDI 受管对象
JMSInput 节点
JMSOutput 节点
声明 | 商标 | 下载 | 书库 | 支持 | 反馈
Copyright IBM Corporation 1999, 2006 最后一次更新时间:2006/08/14
ac24879_