我需要创建一个缓冲区(LinkedList),它将在Controller和Model类之间共享。我在模型类
中创建了这个缓冲区public class ServerController {
private LinkedList<JsonNode> data; /* buffer */
private static ServerController controller;
public static ServerController getServerController(){
return controller;
}
private ServerController() {
}
我使用另一个模型类中的方法写入此缓冲区,并尝试从为GET请求提供服务的控制器方法中读取值,以便将数据返回给请求它的客户端。
@BodyParser.Of(Json.class)
public static Result getData() {
ObjectNode result = play.libs.Json.newObject();
LinkedList<JsonNode> data = ServerController.getController().getData();
result.put("value", data.toString());
return ok(result);
}
问题是正在写入的缓冲区不是控制器正在读取的缓冲区。似乎Play正在实例化ServletController
类的另一个实例(即使我已将其设为单例)。如何在两个进程之间共享缓冲区?
在这种情况下,类加载器是否加载了2个不同的实例?
答案 0 :(得分:3)
play框架是一个无状态框架,你不应该在控制器层的请求之间有一个内存。
但常见的方法是使用缓存API:
http://www.playframework.org/documentation/2.0.4/JavaCache
Using this simple API you can store data in the cache:
Cache.set("item.key", frontPageNews);
You can retrieve the data later:
News news = Cache.get("item.key");