concurrent ajax requests manipulate same session object

9 浏览
0 Comments

concurrent ajax requests manipulate same session object

我有一个Javascript代码,它同时发送多个ajax请求。这些请求加载的数据存储在另一个存储在会话中的对象中。我的问题是,不同的请求会覆盖彼此加载的数据,因为它们无法共享加载的数据。\n为了更好地理解,我已经修改了真实代码。TrainContainer包含多个具有唯一trainNr的Train对象。然后,该列车的人员被加载并存储在该对象中。之后,容器被写回会话。\n如何以最佳方式使其线程安全?\n

@GET @Path(value = "trains/{trainNr}/persons")
@Produces({MediaType.APPLICATION_JSON})
public List loadPersons(@Context HttpServletRequest request, @PathParam("trainNr") String trainNr) {
    // 加载数据
    TrainContainer trainContainer = request.getSession().getAttribute("trainContainer");
    List persons = trainService.loadPersons(trainContainer, trainNr);
    // 更新会话属性
    request.getSession().setAttribute("trainContainer", trainContainer);
    return persons;
}

\n更新:\nloadPersons中改变了trainContainer中的Train对象,这就是将容器存回会话的原因。不同的调用会覆盖加载的人员,因为它们彼此不知道,最后只有来自最后一个请求的人员被存储在会话中。\n\"visualization\"

0