我在Tomcat 8中运行的Web应用程序中使用JPA。我对JPA相对较新,并且很难弄清楚如何正确设计我的Web应用程序以使用EntityManager。我已阅读" Java Persistence with Hibernate"和" Pro JPA 2",以及一些关于实体经理的帖子,但我仍不清楚如何正确设计我的网络应用程序。
我应该创建一个单独的EntityManager,Web应用程序使用它来为所有请求提供服务,例如CRUD(创建,读取,更新,删除)实体吗?
或者我应该要求EntityManagerFactory为每个进入的用户请求创建一个新的EntityManager,并在我处理完请求后关闭EntityManager?
我目前正在本地机器上进行开发,我是唯一的用户 每种方法的优缺点是什么? 两者都可以扩展到数百个用户吗?
我没有现实世界的经验来回答这些问题,所以我正在寻找那些在企业业务应用程序中使用过JPA的人的答案/指导。
由于
答案 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。