是否可以在GAE / java中的请求之间保存状态

时间:2011-05-24 13:25:58

标签: java google-app-engine

我计划仅为自己的用途实施GAE应用。

应用程序将使用URL Fetch服务获取其数据,每x分钟更新一次(使用计划任务)。然后它会在我提出要求时向我提供这些信息。

我几乎没有开始研究GAE,但我有一个主要问题,我无法清除。可以在不使用jdo / jpa和数据存储区的情况下在不同请求之间保持GAE状态吗?

由于我是唯一的用户,我想我可以将信息保存在servlet子类中,因此我可以避免必须处理数据存储...但我担心的是,因为这个应用程序将只有很少的请求,如果它被移动到磁盘或其他什么(不知道它是否有一些特定的名称),它将失去其状态?

我不担心必须重新启动整个应用程序并不时从头开始收集数据,这没关系。

2 个答案:

答案 0 :(得分:1)

如果这是一个供您自己使用的应用程序,并且您是双重额外的,确保您不会将其设置为多用户,并且您不担心可能会从两个用户使用它在浏览器中,您可以跳过使用会话并使用已知密钥在memcache中存储信息。

如果您避免数据存储的原因是关注性能,那么我强烈建议您测试该假设。你可能会感到惊喜。

答案 1 :(得分:0)

您可以使用http会话来维护请求之间的状态,但这将使用数据存储区本身(尽管您不必编写任何代码来获取此行为)。

您也可以考虑使用Cache API(如memcache)。我认为这是JSR 107,Google提供了一个实现。缓存在实例之间共享,但它可以随时清空。但如果你对这种行为感到满意,这可能是一种选择。如果您不想编写自己的持久性代码,那么查看您的要求可能是最可行的选择。

您可以将数据存储为针对您的类或应用程序作用域的静态数据,但这样做意味着当您的实例旋转或您的实例切换到另一个实例时,数据将丢失,因为您的类需要加载进入新的实例。

或者您可以将状态序列化到客户端并将其与每个请求一起发回。

最强大的选项是对数据存储区的持久性 - JPA代码很简单。也许你应该重新考虑一下?