0

我无法使用 Objectify 可靠地获取我保存的实体。

看起来缓存已损坏。奇怪的是 - 我可以通过管理控制台数据存储查看器正确看到保存的实体。我还编写了一个小程序来使用 RemoteApi 查看实体,我可以正确看到保存的值。

当我使用 servlet 或云端点 rest api 连续查询实体时 - 我的连续查询给出了不同的结果,并且看起来数据存储/缓存中的某些内容已损坏。

我的实体看起来像这样。

class ContentEntity {
  @Id Long id;
  String html;
  @Index String tag;
  boolean publish;
}

我这样保存。

ContentEntity entity = ofy().load.type(ContentEntity.class)
    .filter("tag", "my tag").first().get();

if (null == entity)
    entity = new ContentEntity();

entity.html = "my html";
entity.tag = "my tag";
entity.publish = true;

ofy().save.entity(entity).now();

我像这样检索它。

ContentEntity entity = ofy().load().type(ContentEntity.class).
            filter("tag", "my tag").first().get();

发生的情况如下 -

1)让 ContentEntity.html 的初始值为“值 1”
2)保存一个新值 -“值 2”
3)使用管理控制台数据存储查看器我可以看到“值 2”已正确保存。(使用远程 api 我也可以看到“值 2”)
3)使用上面粘贴的检索代码通过 servlet 或 rest api 查看实体。我看到“值 2”
4) 通过 servlet 或 rest api 再次查看实体。我看到“值 1”
5) 再次查看。我看到“值 2”
它不断在“值 1”和“值 2”之间切换

在我的开发环境中一切正常,但在 appengine 中却不行。

看起来我做错了什么并且没有正确处理最终的一致性。我总是想要强烈一致的结果。我不介意我的查询是否慢一点。我应该怎么办 ?

任何提示/建议/帮助将不胜感激。

问候,

沙迪亚

4

1 回答 1

1

事实证明这是因为我忘记在 web.xml 中添加 objectify 过滤器,如Objectify wiki page中所述

我在 web.xml 中添加了以下内容,问题就解决了。

<filter>
    <filter-name>ObjectifyFilter</filter-name>
    <filter-class>com.googlecode.objectify.ObjectifyFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>ObjectifyFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

问候,

沙迪亚

于 2013-06-12T02:40:27.437 回答