【问题标题】:Datanucleus, Is PMF thread save ? issue in tomcatDatanucleus,PMF线程是否保存? Tomcat中的问题
【发布时间】:2012-05-30 21:24:08
【问题描述】:

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

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

【问题讨论】:

    标签: jdo datanucleus


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回答。奇怪的是,使用不同的 PMF 解决了这个问题。我不使用 L2 缓存,数据存储是 MySql,我也使用非事务性读取。在空闲时间我恢复更改并尝试分析它(是的....空闲时间;))
    猜你喜欢
    • 2017-02-15
    • 2011-02-20
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    相关资源
    最近更新 更多