2012-03-02 69 views
1

是否有辦法在幾個控制器操作之間啓動「事務」,這些操作可以保持模型更改,但不保存它們,除非所有操作都完成了?Play中的控制器操作之間的交易

假設我有以下用戶流程:step1 - > step2 - > step3 - > step4 在每一步用戶填寫一些數據,每一步都有一個「取消」按鈕,需要取消嚮導以及所有從前面的步驟改變。

因爲我們不希望每一步都通過才能全部填滿數據下一步保存到數據庫只在最後一個步驟 - 每一步創建或更改數據庫的一個或多個模型實例並將它們存儲。點擊「取消」後,我們如何恢復以前所有步驟的更改?

理想的情況下,我們會想調用一些在步驟1中的步驟4「TransactionSupport.startTransaction」和「TransactionSupport.endTransaction」。但考慮到每個步驟請求可能會轉到不同的Play服務器 - 我們將如何在服務器之間存儲此事務?

回答

1

根據文檔,並知道Play是無狀態的,這似乎不可能。事實上,如果您通過以下注釋禁用Play的默認事務管理器:

@play.db.jpa.NoTransaction 

然後Play將無法獲得該請求的數據庫連接。

爲了解決您的問題,可能的解決方法是將這些步驟的信息存儲在一個時間表格,只將數據提交到末尾的「工作」表。

鏈接的信息,用戶ID,文章ID和會話ID,這樣你就可以檢測到過期數據。