我正在通过 Java 中的远程 API 更新数据存储中的整体。
如果我在应用引擎仪表板中查询更新的条目,我可以看到新版本。但是我的 servlet 在更新之前运行的实例上运行并且已经服务读取数据存储条目仍然看到旧版本。
如果我手动关闭实例并启动一个新实例,它就可以很好地提供新版本。如果我通过应用引擎仪表板从数据存储中删除条目,则旧运行实例无法再按预期读取条目。
这似乎是运行实例的缓存问题。似乎远程 API 无法告诉正在运行的实例某些数据存储条目不能再被缓存。
我可以做些什么来在远程 API 上更改它吗?还是我应该提交错误?
注意:我没有在 memcache 或实例的 RAM 中缓存任何内容。
更新 这是我通过远程 API 更新新实体的方式:
DatastoreService ds = DatastoreServiceFactory.getDatastoreService();
Entity entity = new Entity("DocModel", "somekey");
entity.setProperty("html", "someProperty");
ds.put(entity);
这是使用 JDO 使用 servlet 读取值的方式:
PersistenceManager pm = PMF.get().getPersistenceManager();
DocModel docModel = pm.getObjectById(DocModel.class, "someKey");
这是 JDO 类:
@PersistenceCapable
public class DocModel {
@PrimaryKey
@Persistent
private String name;
@Persistent
private Text html;
public DocModel(String path, String html) {
this.name = path;
this.html = new Text(html);
}
public String getHtml() {
return html.getValue();
}
public String getPath() {
return name;
}
}
更新2
这似乎与 JDO 相关。我将读取更改为使用数据存储 API,现在我看到了更新的值。使用 JDO 将永远不会看到这些更新的值(我测试了大约 10 分钟几次)。我需要杀死实例以传播值。