play框架中的公共缓冲区

时间:2012-11-19 01:37:02

标签: java synchronization playframework-2.0 classloader

我需要创建一个缓冲区(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个不同的实例?

1 个答案:

答案 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");