Session 无状态bean与EntityManager一起运行的是什么,它可以通过";“用户思考时间”;

Session 无状态bean与EntityManager一起运行的是什么,它可以通过";“用户思考时间”;,session,jpa,ejb,ebean,optimistic-locking,Session,Jpa,Ejb,Ebean,Optimistic Locking,阅读笔记。在EBean站点页面上。有一段包含: “使用EJB3容器管理EntityManager的自然方法是 使用有状态会话Bean。” 还有一个暴露出来的问题,比如 如何在“用户思考时间”内管理EntityManager 因此,问题是:EJB无状态bean做什么/提供什么可以用“用户思考时间”解决上述问题 我猜ejb提供了“会话管理”,但将会话存储在ThredLocal变量上并按需提供给用户又有什么问题呢?而不是使用ejb。ejb对此有什么一站式解决方案吗 我的意思是,这篇文章说:使用会话(在

阅读笔记。在EBean站点页面上。有一段包含:

“使用EJB3容器管理EntityManager的自然方法是 使用有状态会话Bean。”

还有一个暴露出来的问题,比如

如何在“用户思考时间”内管理EntityManager

因此,问题是:EJB无状态bean做什么/提供什么可以用“用户思考时间”解决上述问题

我猜ejb提供了“会话管理”,但将会话存储在ThredLocal变量上并按需提供给用户又有什么问题呢?而不是使用ejb。ejb对此有什么一站式解决方案吗


我的意思是,这篇文章说:使用会话(在hibernate中)或EntityManager的概念是不好的——因为这个问题。因此,它说:除了使用EJB无状态bean或者如果您能够自己提供会话管理机制(这应该很难实现)之外,根本不需要使用它

首先,请记住,整篇文章的重点是在容器外运行时管理EntityManager的问题。原因是容器管理的JPA在使用
@PersistenceContext
时注入事务感知EntityManager代理

我不知道“用户思考时间”是什么,所以我不知道需要解决什么问题。正如您所指出的,如果由于某种原因无法使用容器管理的JPA,您可以使用ThreadLocal来管理EntityManager。当然,您必须小心正确地清除ThreadLocal的内容并确定其范围

最终,如果你投入了足够的精力,EJB提供的东西很少是你自己做不到的。选择使用EJB与选择使用任何其他库/体系结构是一样的:其他人维护、改进它,等等,但你必须适应基础设施。EJB可能有一点优势,因为它有许多公司实施的标准。

关于用户思考时间:“为了减少数据库中的锁争用,数据库事务必须尽可能短。长数据库事务将阻止应用程序扩展到高并发负载。在工作单元完成之前,不建议您在用户思考期间保持数据库事务处于打开状态。”