Unable to get saved entity using objectify

一世执手 提交于 2019-12-23 06:41:35

问题


I am unable to get my saved entity reliably using Objectify.

It looks like the cache is getting corrupted. The strange thing is - I can see the saved entity correctly though admin console datastore viewer. Also I wrote a small program to view the entity using RemoteApi and I can see the saved value correctly.

When I query the entity successively using a servlet or a cloud endpoint rest api - my successive queries are giving different results, and it looks like something in the datastore/cache is getting corrupted.

My entity looks like this.

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

I save it like this.

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();

I retreive it like this.

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

What happens is as follows -

1) Let the intial value of ContentEntity.html be "value 1"
2) save a new value - "value 2"
3) using admin console datastore viewer I can see "value 2" is saved correctly. (using remote api also I can see "value 2")
3) View the entity through servlet or rest api using the retrieve code pasted above. I see "value 2"
4) View the entity again through servlet or rest api. I see "value 1"
5) View it again. I see "value 2"
it keeps switching between "value 1" and "value 2"

It all worked fine in my dev environment but not in appengine.

Looks like I am doing something wrong and not handling eventual consistency correctly. I always want strongly consistent results. I don't mind if my queries are little slower. What should I do ?

Any tips/suggestions/help would be much appreciated.

Regards,

Sathya


回答1:


It turns out this is because I had forgotten to add objectify filter in web.xml as mentioned in Objectify wiki page

I added the following in my web.xml and the problem was solved.

<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>

Regards,

Sathya



来源:https://stackoverflow.com/questions/16626712/unable-to-get-saved-entity-using-objectify

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!