2014-07-19 121 views
0

有什麼辦法可以使用拉力賽wsapi實現原子事務。我知道一個事務意味着連續請求中的狀態,但是REST顯然是一個無狀態協議。所以這可能是一個問題。拉力休息API交易

需要能夠拉一個portfolioitem/feature,然後立即寫回來,如果我有它的最新版本。我在portfolioitem/feature上有一個自定義字段,它將由多人同時編輯,並且我需要確保每個更新都以正確的順序進行。

因爲我沒有訪問拉力賽的服務器的東西,我必須做所有這些客戶端,我不知道如何做到這一點。我也會這樣做Rally SDK。

回答

1

我不認爲WS API支持原子事務。更新作爲一個原子事務發生的情況,例如,如果其中一個更新失敗,則它們全部被回滾的情況不受支持。在你提到的例子中,每個更新都將是一個不同的事務,並且在同一個工件被不同用戶更新時發生空中衝突的情況下,其中一個用戶將收到一個併發錯誤。

0

我和OP一模一樣,唯一的區別是在閱讀和後續寫作之間可能會經過數小時。有趣的是,當我嘗試更新記錄的同時還有另外一個正在執行的事務處理時,我似乎只會遇到併發性錯誤。當我使用舊版本更新記錄時,我看不到任何異常,即其他人已從我下面更改過的記錄。

我將盡力解決這個問題,因爲它正在成爲一個問題。所選擇的方法是在每次POST之前強制鏈接一個GET,並在I GET的VersionID與我存儲在內存中的ID不匹配時拋出異常。如果不匹配,它將刷新本地記錄(從而刷新本地記錄)並提示用戶重新提交它們的更改。是的,這對用戶來說會很不方便,但在我的應用程序中,大部分更改只需單擊即可,因此這是合理的。

我也想知道是否有更好的方法來解決這個問題。人們會假定每個有VersionID的記錄都會在服務器端處理,並且在客戶端有WsapiProxy的支持。也許我錯過了一些明顯的東西,比如明確提取VersionID?