我根据来自901v00_11.20141217-1000 version of XPages Extension Library的"Domino Sample REST service Feature“中的示例创建了自己的REST服务。
根据我对库设计的理解,每个REST请求都将在服务器上的自己的线程中运行。这种方法不允许处理对同一文档的并行POST请求。
我在XPages扩展库中没有找到任何示例,它将post请求作为服务器上的事务处理,即在整个请求处理时间内阻塞服务器资源,并将下一个请求放入队列中?
谁能指出允许处理并行请求的服务的源代码?
我的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中做到这一点?
发布于 2015-04-22 20:04:09
我想您可以在传统的Notes/Domino上下文中使用document locking --在Java语言中使用synchronized :-)
你有没有试过这些?我不明白他们为什么不能工作。
/John
发布于 2015-04-22 23:08:42
我同意约翰的观点。您可以使用文档锁定来防止同时更新同一文档。您可能还需要考虑对REST API的定义进行一些更改。
首先,您暗示您正在使用POST更新现有文档。通常,POST用于创建新资源。考虑使用PUT而不是POST。
其次,即使使用文档锁定,您也可能希望检查版本冲突。例如,假设客户端读取文档的版本2,然后尝试更新它。同时,另一个客户端已经将文档更新到版本3。许多REST API使用HTTP ETags来处理此类版本冲突。
https://stackoverflow.com/questions/29795432
复制相似问题