由于缓存数据导致eclipselink jpa中的并发问题

时间:2017-08-09 05:07:51

标签: jpa caching concurrency eclipselink

我正在使用eclipseLink JPA,我正在为两个不同服务器中部署的两个不同EJB应用程序使用相同的数据库。如果其他应用程序正在对同一对象进行一些修改,我会因JPA缓存而遇到并发问题。有什么方法可以管理这个并发问题。使用本机查询进行数据库操作不是一种选择。我正在使用oracle db和glassfish服务器。是否有任何可用的解决方案。

1 个答案:

答案 0 :(得分:1)

让我解释一下您遇到问题的原因:

想象一下,你已经缓存了对象的数据。因此第一个应用程序将使用该缓存数据,并且不需要将此应用程序转到数据库(因为它已经具有内存中的值)。如果您要在相同 entityManager上执行其他修改查询,则可以升级该缓存数据。它决不会知道其他应用程序改变了您的数据状态。

所以隔离级别没有帮助,因为第一个应用程序没有读取查询,因为它已经有缓存值。至于entityManager只知道同一个经理的操作。它无法在不同的应用程序上了解另一个entityManager

解决方案是不要缓存。或者您可以将外部缓存配置为二级缓存,您可以从两个应用程序中逐出缓存(例如,像hazelcast缓存)。