是否为每个方法调用创建一个EclipseLink EntityManager或使用锁定保护?

时间:2013-07-25 10:41:05

标签: java jpa eclipselink

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

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

哪个是最佳做法?

使用per方法调用我关注性能。

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

通过使用锁保护单个EntityManager,每次都有锁的成本。

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

由于

1 个答案:

答案 0 :(得分:0)

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

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