- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Tomcat 8 中运行的 Web 应用程序中使用 JPA。我对 JPA 比较陌生,并且很难弄清楚如何正确设计我的 Web 应用程序以使用 EntityManager。我已经阅读了“Java Persistence with Hibernate”和“Pro JPA 2”,以及一些有关实体管理器的帖子,但我仍然不清楚如何正确设计我的 Web 应用程序。
我应该创建一个供 Web 应用程序使用的单例 EntityManager 来服务所有请求,例如 CRUD(创建、读取、更新、删除)实体吗?
或者我应该要求 EntityManagerFactory 为每个传入的用户请求创建一个新的 EntityManager,并在处理完请求后关闭 EntityManager?
我目前正在本地计算机上进行开发,我是唯一的用户。
每种方法的优点/缺点是什么?两者都能扩展到数百个用户吗?
我没有现实世界的经验来回答这些问题,因此我正在向在企业业务应用程序中使用过 JPA 的人寻求一些答案/指导。
谢谢
最佳答案
我创建了 ScopedEntityManager 包装器来简化 Servlet Web 应用程序中的 JPA 使用。它使用线程本地变量为 http 请求创建一个自动管理的 EM。
它确保 EM 在 servlet 请求后回滚+关闭。对于同一请求线程,在 getter 方法中返回相同的 EM。如果一切顺利,你只需要 commit() 。抛出异常不是问题,因为请求监听器会处理 rollback()。
了解如何实例化 EM 包装器和生命周期管理器。 https://github.com/Murmur/ScopedEntityManager/blob/master/src/es/claro/persistence/ScopedContextListener.java
https://github.com/Murmur/ScopedEntityManager
https://github.com/Murmur/ScopedEntityManager/blob/master/example_webapp/webapp/jpa1.jsp
所以是的,为每个 http 请求创建一个新的 EntityManager。
关于java - JPA EntityManager 的设计负责人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48430918/
我是一名优秀的程序员,十分优秀!