跳到主要内容

执行XA事务的步骤

客户端使用Solace JMS实现执行XA事务需要以下基本步骤。

  • 根据要在XA事务中尝试的操作类型以及这些操作的结果,步骤的确切顺序和序列可能会有所不同。
  • 当JMS客户端连接到事件代理时,它必须使用一个客户端用户名账户,该账户被分配了一个启用了allow‑transacted‑sessions属性的客户端配置文件(默认情况下,此属性未启用)。
  1. 获取一个XA连接工厂,并使用它创建到事件代理的XA连接。

    使用的XA连接工厂必须启用其xa消息属性,以便由XA连接工厂创建的JMS连接支持XA会话。其direct‑transport传输属性也应该被禁用,以仅允许发布或接收保证(即具有持久或非持久传递模式的消息)消息。

    有关如何编程创建或查找连接工厂以及如何建立连接的信息,请参阅建立连接。

  • SolXAConnectionFactory,Solace专有的标准JNDI连接工厂实现,已正确配置,用于在事件代理上执行XA事务。
  • 为了建立允许事务会话和XA事务的JMS连接,连接还必须使用在事件代理上配置的客户端用户名账户,该账户被分配了一个启用了allow‑transacted‑sessions属性的客户端配置文件(默认情况下,此属性未启用)。有关管理员如何配置客户端用户名及其分配的客户端配置文件的信息,请参阅配置客户端身份验证。
  1. 创建一个XA会话(参见创建XA会话)。

  2. 在XA会话中,客户端可以执行以下一个或两个操作:

    • 获取一个消息生产者,可用于向目标主题或队列发布消息
    • 获取一个消息消费者或主题订阅者,可用于接收消息
  3. 为XA会话获取一个XA资源。

    XAResource使客户端能够控制与XA会话相关联的事务的状态(参见执行XA事务操作)。

    通常,应用服务器中的事务管理器使用XAResource提供的方法来控制事务操作。

  4. 获取唯一的Xids,以标识在XA会话中创建的每个事务分支以及它们所关联的全局事务。

    格式标识符、全局事务标识符和分支限定符的组合必须在XA会话连接到的消息VPN中为每个Xid全局唯一。通常,事务管理器提供Xids。

  5. 在XA会话中启动一个事务分支(参见)。在XA会话中,一次只能有一个事务处于活动状态。

    调用XAResource.start(...)后,XA会话中的生产者发布的任何消息都是事务消息。

  6. 执行以下一个或两个操作:

    • 使用已获取的发布者,发布您希望包含在事务分支中的消息。参见在XA事务中发布消息。
    • 使用已获取的消息消费者或主题订阅者,消费您希望包含在事务分支中的消息。参见在XA事务中消费消息。

在事务分支中发布和接收的消息会被暂存于事件代理。一个事务分支中最多可以包含256条消息。

  1. 调用XAResource.end(...)以结束事务分支。这结束了代表事务分支执行的工作。事件代理作为资源管理器,将XA会话与事务分支分离,从而允许事务完成。

    XAResource.end(...)也可以用于挂起一个事务分支。

  2. 调用XAResource.prepare(...)以准备事务的提交或回滚。

  3. 如果事务成功准备,执行以下操作之一:

    • 对于要在XA会话中执行的每个额外事务,重复步骤6到10。
    • 完成后,按照关闭XA会话中的说明关闭XA会话。

事件代理管理员也可以手动执行以下启发式操作:删除XA会话或提交、回滚或删除XA事务分支。有关更多信息,请参阅对事务执行启发式操作。