Java のリモート API を介してデータストアの全体を更新しています。
アプリ エンジン ダッシュボードで更新されたエントリを照会すると、新しいバージョンを確認できます。しかし、更新前に実行されていて、既にデータストア エントリを読み取ったインスタンスで実行されている私のサーブレットには、まだ古いバージョンが表示されます。
インスタンスを手動でシャットダウンし、新しいインスタンスが起動すると、新しいバージョンが問題なく提供されます。App Engine ダッシュボードを介してデータストアからエントリを削除すると、古い実行中のインスタンスが期待どおりにエントリを読み取ることができなくなります。
これは、実行中のインスタンスのキャッシングの問題のようです。リモート API が実行中のインスタンスに、特定のデータストア エントリをキャッシュできなくなったことを通知できていないようです。
リモート API でこれを変更するためにできることはありますか? それとも、バグを報告する必要がありますか?
注: memcache またはインスタンスの RAM には何もキャッシュしていません。
更新 これは、リモート API を介して新しいエンティティを更新する方法です。
DatastoreService ds = DatastoreServiceFactory.getDatastoreService();
Entity entity = new Entity("DocModel", "somekey");
entity.setProperty("html", "someProperty");
ds.put(entity);
これは、JDO を使用してサーブレットで値を読み取る方法です。
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;
}
}
Update2
これはJDO関連のようです。データストア API を使用するように読み取りを変更したところ、更新された値が表示されるようになりました。JDO では、これらの更新された値は表示されません (数回、約 10 分間テストしました)。値を伝播するには、インスタンスを強制終了する必要があります。