2014-08-28 135 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