编写资源管理器

如果要编写服务或组件,并且需要使用事务服务,或者需要监视内核事务的状态,则需要创建一个资源管理器, (RM) 。

若要编写资源管理器,必须创建多个内核对象。 RM 使用的对象包括:

  • 事务管理器 (TM) 对象
  • 资源管理器 对象
  • 登记对象

首先,创建一个 TM 对象。 有两种类型的 TM:

  • 易失性 – 这些 VM 没有日志,无法恢复其状态
  • 持久 – 这些 VM 具有日志

若要创建持久 TM,必须创建 CLFS 日志并调用 CreateTransactionManager ,或让 KTM 为你创建它。 创建持久 TM 后,必须先通过调用 RecoverTransactionManager 来恢复 TM。 恢复 TM 后,它可供使用。

如果恢复了现有 TM,则与此 TM 关联的所有 RM 都将开始接收恢复消息。 有关详细信息,请参阅 恢复处理

接下来,使用 TM 句柄调用 CreateResourceManager 来创建资源管理器。 RM 可以是易失性或持久性。 只有持久 VM 可以与持久 RM 一起使用。

以事务方式工作时,通过调用 CreateEnlistment并指定要接收的通知,在事务中登记。

注意 可以在完成 对 CreateEnlistment 的调用之前开始接收通知。

收到通知时,当与处理通知相关的任何工作完成时,调用相应的“Complete*”函数。 完整的函数包括:

如果资源管理器在任何时候都无法完成事务的工作,或者如果继续操作会使应用程序无法撤消在事务中完成的工作,则必须通过调用 RollbackEnlistment 回滚事务。