2015-04-22 86 views
1

我已經基於來自901v00_11.20141217-1000 version of XPages Extension Library的「Domino Sample REST Service Feature」中的示例創建了我自己的REST服務。處理並行REST發佈請求

據我瞭解庫的設計,每個REST請求將在服務器上的自己的線程中運行。這種方法不允許處理對同一文檔的並行POST請求。

我還沒有在XPages擴展庫中發現任何可以將請求作爲服務器上的事務處理的例子,例如,它將阻塞整個請求處理時間的服務器資源,並將把下一個請求放入隊列中?

任何人都可以指向允許處理並行請求的服務的源代碼嗎?

我POST請求處理功能的骨架是這樣的

@POST 
@Path(PATH_SEPARATOR + MyURL) 
@Consumes(MediaType.APPLICATION_JSON) 
@Produces(MediaType.APPLICATION_JSON) 
public Response myPost(
    String requestEntity, 
    @Context final UriInfo uriInfo) 
{ 
    LogMgr.traceEntry(this, "myPost"); 

    RestContext.verifyUserContext(); 

    String myJson = ... // Process post 

    Response response = buildResponse(myJson); 

    LogMgr.traceExit(this, "myPost", "OK"); 

    return response; 
} 

而且我想實現這樣的事情

// Start transaction 

String myJson = ... // Process post 

// Stop transaction 

有沒有辦法做到這一點在Java中?

回答

2

我想你可以在傳統的票據使用document locking/Domino的背景下 - 和synchronized在Java中:-)

您是否嘗試過任何這些?我看不出爲什麼他們不應該工作。

/約翰

2

我同意約翰。您可以使用文檔鎖定來防止同時更新同一文檔。您可能還想考慮對REST API的定義進行一些更改。

首先,您意味着您使用POST來更新現有文檔。通常,POST用於創建新資源。考慮使用PUT而不是POST。

其次,即使在文檔鎖定的情況下,您仍然可能需要檢查版本衝突。例如,假設客戶端讀取文檔的版本2,然後嘗試更新它。同時,另一個客戶端已經將文檔更新爲版本3.許多REST API使用HTTP ETags來處理此類版本衝突。