并发的ajax请求操纵相同的会话对象

时间:2016-11-21 15:02:47

标签: java ajax spring httprequest session-variables

我有一个Javascript,可以同时发送多个ajax请求。这些请求正在加载存储在会话中存储的另一个对象中的数据。我的问题是不同的请求会覆盖彼此加载的数据,因为它们无法共享加载的数据。

我修改了实际代码,使其更容易理解。 Traincontainer拥有多个Train-objects和一个独特的trainNr。然后该列车的人员被装载并存储在该物体中。之后,容器将被写回会话。

使这个线程安全的最佳方法是什么?

@GET @Path(value = "trains/{trainNr}/persons")
@Produces({MediaType.APPLICATION_JSON})
public List<Person> loadPersons(@Context HttpServletRequest request, @PathParam("trainNr") String trainNr) {
    // load data
    TrainContainer trainContainer = request.getSession().getAttribute("trainContainer");
    List<Person> persons = trainService.loadPersons(trainContainer, trainNr);

    // update session attribute
    request.getSession().setAttribute("trainContainer", trainContainer);

    return persons;
}

更新 trainContainer中的Train对象在loadPersons中被更改,这是将容器存储回会话的原因。不同的调用覆盖了被加载的人,因为他们彼此不知道,最后只有最后请求的人被存储在会话中

visualization

0 个答案:

没有答案