0

你知道datanucleus中的PMF是否是线程安全的吗?我有以下问题:

我有一个 PMF,它创建了几个 PersistenceManager,一个用于方法调用。PMF 在线程和方法之间共享。
在单线程中运行应用程序时一切正常,但是当应用程序部署在 Tomcat 上时,压力测试表明,在某些情况下,持久性管理器会同时调用 getObjectById。
这不是锁定问题,因为非事务性读取已打开。多线程标志也设置为真。
当我每次创建新的 PMF 时,问题就消失了。但是这种解决方案很昂贵。关于更好的解决方案的任何想法?

4

1 回答 1

1

正如 JDO 规范所说的那样,PMF 是线程安全的。PM 不是线程安全的,所有 DataNucleus 文档都建议每个请求使用一个 PM。由于您(假设您)每个请求有 1 个 PM,因此没有锁定的前景,因为 PM 与另一个 PM 不共享任何内容。

如果你说你有阻塞,你可以很容易地提供一个线程转储,显示两个 PM 如何相互锁定,然后演示什么阻塞了什么以及为什么阻塞。可能性... L2 缓存、存储管理器(数据存储)。显然,使用最新版本对所有这些都是有意义的

于 2012-05-29T18:33:54.983 回答