1

我应该为每个方法调用创建一个 EclipseLink EntityManager,存储在本地线程中还是用锁保护?

显然它最初是从 entityManagerFactory.createEntityManager() 创建的。

请问哪个是最佳实践?

对于每个方法调用,我关心性能。

对于线程本地,我担心线程之间的缓存可见性。

通过用锁保护单个 EntityManager,我每次都需要花费锁。

/我正在使用 JSE - 所以没有 EJB,没有注入 - 只是 entityManagerFactory.createEntityManager() 在多线程 JSE 应用程序中。

谢谢

4

1 回答 1

1

EntityManager 不是线程安全的,旨在表示一个工作单元。除非参与更大的事务,否则每个方法/线程都应该有自己的。最好在逻辑点关闭/清除它们,因为它们维护托管实体的缓存,这些托管实体可以随着长期存在的 EntityManager 增长而变大。有很多帖子介绍了容器外部和内部的最佳方式。

EclipseLink 的 EntityManager 在下面使用 EclipseLink 的原生会话和 unitOfWork,它会根据需要懒惰地获取资源,并在完成后释放它们。但是它们可以配置为以不同的方式运行。

于 2013-07-25T12:42:31.400 回答