我正在一个运行在Tomcat 8中的web应用程序中使用JPA,我对JPA还比较陌生,并且很难找到如何正确地设计我的web应用程序来使用EntityManager。我读过“”和"Pro JPA 2",以及一些关于实体管理人员的文章,但我仍然不清楚如何正确设计我的web应用程序。
我是否应该创建一个被web应用程序用来服务所有请求的单例EntityManager,比如CRUD (创建、读取、更新、删除)实体?
或者,我应该要求EntityManagerFactory为传入的每个用户请求创建一个新的EntityManager,并在处理完请求后关闭EntityManager?
我目前正在本地机器上进行开发,在那里我是唯一的用户。
每种方法的优缺点是什么?两者都能扩展到数百个用户吗?
我没有真实的经验来回答这些问题,所以我想从那些在企业业务应用中使用JPA的人那里寻找一些答案/指导。
谢谢
发布于 2018-01-25 01:16:27
我创建了ScopedEntityManager包装器来简化servlet中JPA的使用。它使用一个线程局部变量为http请求创建一个自动管理的EM。
它确保EM在servlet请求之后是rollbacked+closed。同一请求线程在getter方法中返回相同的EM。如果一切顺利,只需提交()即可。抛出异常不是问题,因为请求侦听器负责回滚()。
请参见如何实例化EM包装器和生命周期管理器。https://github.com/Murmur/ScopedEntityManager/blob/master/src/es/claro/persistence/ScopedContextListener.java
https://github.com/Murmur/ScopedEntityManager
因此,是的,为每个http请求创建一个新的EntityManager。
https://stackoverflow.com/questions/48430918
复制相似问题