我应该为每个方法调用创建一个EclipseLink EntityManager,存储在本地线程中还是使用锁定保护?
显然,它最初是从entityManagerFactory.createEntityManager()创建的。
哪个是最佳做法?
使用per方法调用我关注性能。
使用本地线程,我担心线程之间的缓存可见性。
通过使用锁保护单个EntityManager,每次都有锁的成本。
/我正在使用JSE - 所以没有EJB,没有注意力 - 只是多线程JSE应用程序中的entityManagerFactory.createEntityManager()。
由于
答案 0 :(得分:0)
EntityManagers不是线程安全的,旨在代表一个工作单元。除非参与更大的事务,否则每个方法/线程都应该有自己的。最好在逻辑点关闭/清除它们,因为它们维护了一个托管实体的缓存,这些托管实体可以通过长期存在的EntityManage来增长。关于最好的方法是在容器外面和内部有很多帖子。
EclipseLink的EntityManager使用EclipseLink的本机会话和unitOfWork,它将根据需要懒惰地获取资源,并在完成后释放它们。但它们可以配置为以不同方式运行。