EJB 容器内部如何管理事务?
How transactions are managed internally inside EJB container?
作为一名程序员,当我使用容器管理的事务时,我唯一感兴趣的应该是事务属性,即 REQUIRED、REQUIRED_NEW 等
最近有人问我,容器如何管理所有这些事务,即它使用什么线程,它使用什么数据结构来跟踪所有正在进行的事务?我还没有阅读任何描述这一点的文件。您能否尝试解释一下或分享 link 任何与此相关的教程?
通常,EJB 容器本身不实现事务管理。相反,它使用 TransactionManager,它通常在单独的模块中实现。根据实现的不同,可能根本没有任何数据结构:EJB 代理可以像调用 getTransaction、挂起或根据需要开始(取决于事务属性)一样简单,将事务存储在局部变量中,调用实际的 bean 实例,然后调用提交、回滚或恢复。
TransactionManager 几乎肯定使用某种 ThreadLocal 来存储当前事务,并且它可能使用某种辅助线程来跟踪事务超时。所使用的特定数据结构将因实施而异。
(我从未遇到过任何描述事务管理器内部工作的文档。查看开源实现可能会对可以使用哪种数据结构给出一些想法。)
作为一名程序员,当我使用容器管理的事务时,我唯一感兴趣的应该是事务属性,即 REQUIRED、REQUIRED_NEW 等
最近有人问我,容器如何管理所有这些事务,即它使用什么线程,它使用什么数据结构来跟踪所有正在进行的事务?我还没有阅读任何描述这一点的文件。您能否尝试解释一下或分享 link 任何与此相关的教程?
通常,EJB 容器本身不实现事务管理。相反,它使用 TransactionManager,它通常在单独的模块中实现。根据实现的不同,可能根本没有任何数据结构:EJB 代理可以像调用 getTransaction、挂起或根据需要开始(取决于事务属性)一样简单,将事务存储在局部变量中,调用实际的 bean 实例,然后调用提交、回滚或恢复。
TransactionManager 几乎肯定使用某种 ThreadLocal 来存储当前事务,并且它可能使用某种辅助线程来跟踪事务超时。所使用的特定数据结构将因实施而异。
(我从未遇到过任何描述事务管理器内部工作的文档。查看开源实现可能会对可以使用哪种数据结构给出一些想法。)