我将以下代码部署到应用引擎服务器(唯一的 我可以测试JDO的地方,遗憾的是我无法在本地测试JDO 因为我没有本地BigTable实现。)
final class PMF {
private static final PersistenceManagerFactory pmf = JDOHelper.getPersistenceManagerFactory("transactions-optional");
private PMF() { }
public static PersistenceManagerFactory get() { return pmf; }
}
@PersistenceCapable
class Data {
// ...
@Persistent
private static List<Store> stores = new ArrayList<Store>();
static List<Store> getStores() {
return stores;
}
}
...
Data.getStores().add(store);
writer.write("this line received OK by client.");
PMF.get().getPersistenceManager().makePersistent(Data.getStores());
writer.write("this line never received by client.");
如图所示,服务器的第一行输出是在客户端上接收的,第二行并不意味着makePersistent()失败。
任何人都知道为什么会这样?
答案 0 :(得分:1)
也许很简单的事实是,没有适用于Java的标准持久性API提供静态字段的持久性。
答案 1 :(得分:1)
您可以使用ant或eclipse appengine插件在本地运行代码,从而模仿本地计算机上的BigTable。 eclipse插件还在后台运行datanucleus,并且会为您捕获这样的错误,而无需在进行更改时上传到appengine。