2014-08-28 110 views
0

我们在会话(OrderHolder)中Order对象的版本高于缓存(版本库项目版本)中的版本的日志中看到过一些出现InvalidVersionException。在什么情况下会发生这种情况?我的理解是,如果我们在事务之外修改和更新Order,通常会得到此InvalidVersionException,在这种情况下,缓存中的版本将大于存储在订单内存中的版本。会话中的订单版本大于版本库项目版本

+1

我看到你问多个问题,所有这些都将可能具有相同的分辨率。我建议您尝试将所有问题整合到一个问题中,列出所有症状(或错误)。 – bated 2014-08-28 23:37:58

回答

0

更新订单有一个非常成熟的模式。您自己更新订单的任何代码(例如,标准采购流程表单处理程序之外)必须执行以下操作。在简介

    1. 获取写锁BEGIN TRANSACTION
    2. 同步的订购
    3. 修改订单
    4. 呼叫order.updateVersion()
    5. 呼叫OrderManager.updateOrder()
    6. 释放指令同步
    7. 结束事务
    8. 发布个人资料锁

    如果您不遵循此规定,则可能会出现这些类型的错误。

    http://www.digitalsanctuary.com/tech-blog/java/atg/design-pattern-for-updating-an-atg-order.html