FTPC 事务组使用

        Plant Operations允许使用UserTransaction对象将多个原子事务作为单个组的一部分执行。 分组的事务将包含各个事务的所有特征。 使用以下方法执行分组事务:

  • UserTransaction.begin()
  • UserTransaction.commit()
  • UserTransaction.rollback()

        使用UserTransaction.commit()方法时,begin()和commit()之间完成的所有单个事务将作为一个事务保存到数据库中。 如果无法保存一个分组事务,则不会保存任何单个事务。

        使用UserTransaction.rollback()方法时,begin()和rollback()之间完成的所有单个事务将作为一个事务回滚。

        使用UserTransaction.setTransactionTimeout(interval)方法设置事务分组超时。 间隔以秒为单位。 必须在调用transaction.begin()方法之前设置事务分组超时。 如果在调用transaction.begin()方法之前未设置它,则setTransactionTimeout(interval)方法无法生效。

        //创建UserTransaction对象

        response = getUserTransaction()

        objTrx = response.getResult()

        //设置事务超时,单位秒

        objTrx.setTransactionTimeout(3000)

        //开始然后保存交易

        objTrx.begin()

        ...

        LotA.save()

        LotB.save()

        Unit.close("reason")

        ...

        objTrx.commit()

        您可以组合在一起的交易数量没有限制。 此功能记录组中每个成员的实际事务时间,这与分组的事务时间不同。

嵌套事务组

        可以选择使用Function.getUserTransaction(boolean allowNesting)方法启用嵌套。 例如,Function1调用Function2,然后调用Function3。 当Function2调用UserTransaction.begin()时,会发生以下情况,具体取决于您的allowNesting配置:

  • 如果allowNesting设置为false,则UserTransaction.begin()调用将失败,因为Function1已经调用了UserTransaction.begin()。
  • 如果allowNesting设置为true,则每次调用嵌套函数时,beginCount值都会递增。 因此,当Function1调用UserTransaction.begin()方法时,该值增加到1,然后当Function2调用UserTransaction.begin()方法时,该值增加到2。

如果allownest设置为true,还会发生以下行为:

  • 调用UserTransaction.commit()方法时,会为每个嵌套函数递减beginCount值,直到beginCount值为0.然后提交事务。
  • 调用UserTransaction.rollback()方法时,会为每个嵌套函数递减beginCount值,直到beginCount值为0.然后回滚事务。 一旦在嵌套函数上调用UserTransaction.rollback()方法,尝试在任何其他嵌套函数上执行任何其他事务将返回错误。 只能在其他嵌套函数上调用UserTransaction.rollback()方法。

        调用UserTransaction.getBeginCount()方法以返回当前启动的嵌套函数的数量。

事务组支持

        以下支持事务分组:

  • WebSphere (clustering and non-clustering environment)

  • JBoss Advanced (clustering and non-clustering environment)

  • JBoss Stand-Alone

  • a Java Web Services client when using RMI

  • all supported security providers

        使用.NET代理工厂或使用SOAP协议的任何客户端时,不支持此功能。 事务分组不支持子事务(即嵌套事务)。

        FTPC不会在数据库中创建事务分组的记录。

猜你喜欢

转载自blog.csdn.net/panjin72/article/details/87912916