我无法使用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”之间切换
这一切在我的开发环境中都运行良好,但没有在发动机环境中运行。
看起来我做错了什么并没有正确处理最终的一致性。我总是想要一致的结果。我不介意我的查询是否慢一点。我该怎么办?
非常感谢任何提示/建议/帮助。
此致
沙迪亚
答案 0 :(得分:1)
事实证明这是因为我忘了在Objectify wiki page中提到的web.xml中添加objectify过滤器
我在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>
此致
沙迪亚