Google app engine Appengine JDO-“;由不同的对象管理器管理”;

Google app engine Appengine JDO-“;由不同的对象管理器管理”;,google-app-engine,jdo,datanucleus,Google App Engine,Jdo,Datanucleus,我在多线程中执行多个任务,当我尝试从数据存储中获取实体时,出现以下错误: Object with id "com.google.appengine.api.datastore.Key:XXXXXXX(xxx)" is managed by a different Object Manager 在单元测试期间会发生错误。问题是,我在测试期间跟踪持久性管理器的创建,我确信我只是使用 JDOHelper.getPersistenceManagerFactory("transactions-optio

我在多线程中执行多个任务,当我尝试从数据存储中获取实体时,出现以下错误:

Object with id "com.google.appengine.api.datastore.Key:XXXXXXX(xxx)" is managed by a different Object Manager
在单元测试期间会发生错误。问题是,我在测试期间跟踪持久性管理器的创建,我确信我只是使用

JDOHelper.getPersistenceManagerFactory("transactions-optional").getPersistenceManager()
如果我只使用主线程执行同一个作业,那么什么都不会发生,一切都会按预期工作

我读到为了调试它,您可以调用
JDOHelper.getPersistenceManager(object)
,以了解哪个持久性管理器管理该对象。我从来没有收到过不同的地址。
此外,在获取过程中调用此方法有时会使调用成功,而不会出现任何错误。

错误有堆栈跟踪,它会依次告诉您它来自何处。对代码的简单检查将告诉您PM是不同的(不同的PM或null(瞬态/分离))。没有人能看到您的对象来自何处。这次它似乎是空的。我猜你不能在线程之间共享PM,你必须为每个线程创建新的PM。根据DataNucleus文档,PM不是线程安全的。PMF是线程安全的