JPA EntityManger的设计负责人

时间:2018-01-24 20:18:17

标签: java hibernate jpa

我在Tomcat 8中运行的Web应用程序中使用JPA。我对JPA相对较新,并且很难弄清楚如何正确设计我的Web应用程序以使用EntityManager。我已阅读" Java Persistence with Hibernate"和" Pro JPA 2",以及一些关于实体经理的帖子,但我仍不清楚如何正确设计我的网络应用程序。

我应该创建一个单独的EntityManager,Web应用程序使用它来为所有请求提供服务,例如CRUD(创建,读取,更新,删除)实体吗?

或者我应该要求EntityManagerFactory为每个进入的用户请求创建一个新的EntityManager,并在我处理完请求后关闭EntityManager?

我目前正在本地机器上进行开发,我是唯一的用户 每种方法的优缺点是什么? 两者都可以扩展到数百个用户吗?

我没有现实世界的经验来回答这些问题,所以我正在寻找那些在企业业务应用程序中使用过JPA的人的答案/指导。

由于

1 个答案:

答案 0 :(得分:1)

我创建了ScopedEntityManager包装器,以便在servlet webapp中轻松使用JPA。它使用threadlocal变量为http请求创建自动管理的EM。

确保在servlet请求后回滚+关闭EM。对于同一请求线程,在getter方法中返回相同的EM。如果一切都好,你只需要commit()。抛出异常不是问题,因为请求侦听器负责rollback()。

了解如何实例化EM包装器和生命周期管理器。 https://github.com/Murmur/ScopedEntityManager

https://github.com/Murmur/ScopedEntityManager/blob/master/example_webapp/webapp/jpa1.jsp

{{3}}

所以是的,为每个http请求创建一个新的EntityManager。