appengine DataNucleus插件2.1.2缓存行为

时间:2013-05-22 08:42:25

标签: google-app-engine datanucleus

我已升级到appengine sdk 1.8.0,appengine DN 2.1.2和DN 3.1.3。 一切顺利。

在appengine docs中声明

Level2 Caching is enabled by default. 

https://developers.google.com/appengine/docs/java/datastore/jpa/overview-dn2

我假设JPA L2缓存由memcache支持。

但是当我通过数据存储区查看器更新实体时,JPA代码仍然返回过时的数据版本。

我的JPA实体位于

之下
@Entity
@Cacheable(true)
@NamedQueries({ ....snip

public class GeoLocationUser implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Key key;

private double latitude;

查询是命名查询

@NamedQuery(name = GeoLocationUser.FIND_BY_USER_KEY,
            query = "Select p from GeoLocationUser p where p.parentKey = :userKey"),

用例

  1. 使用JPA代码创建实体。

  2. 我使用数据存储区查看器从“0.0”更新实体中名为“纬度”的字段。

  3. 我使用JPA对我的应用程序运行了一个宁静的查询。

  4. 返回的实体有'latitude'='0.0'

  5. 然后我刷新memcache

  6. 我使用JPA对我的应用程序运行了一个宁静的查询。

  7. 返回的实体有'latitude'='0.0'

  8. JPA代码正在收集陈旧的数据,我不知道为什么。

    Q1.对我观察到的行为的任何解释我都非常感激。

    Q2。是由memcache支持的appengine DN 2.1.2?

    感谢 -lp

1 个答案:

答案 0 :(得分:1)

从日志看来确实是2级缓存“软”是默认值。 不知道究竟是什么'软'意思。

然而,似乎1级缓存导致上述行为。

当我停止正在运行的实例时,下一次调用导致新实例具有新的1级缓存。然后返回新值。

非常令人印象深刻的缓存人员。 做得好。

-lp