Jakarta ee 如何在EJB容器内部管理事务?

Jakarta ee 如何在EJB容器内部管理事务?,jakarta-ee,ejb,Jakarta Ee,Ejb,作为一名程序员,当我使用容器管理的事务时,我唯一感兴趣的是什么应该是事务属性,即REQUIRED、REQUIRED\u NEW等 最近有人问我,容器如何管理所有这些事务,即它使用什么线程,它使用什么数据结构来跟踪所有正在进行的事务?我没有读过任何描述这一点的文件。请您尝试解释一下,或者共享与此相关的任何教程的链接好吗?通常,EJB容器本身并不实现事务管理。相反,它使用TransactionManager,它通常在单独的模块中实现。根据实现的不同,可能根本不存在任何数据结构:EJB代理可以简单到根

作为一名程序员,当我使用容器管理的事务时,我唯一感兴趣的是什么应该是事务属性,即REQUIRED、REQUIRED\u NEW等


最近有人问我,容器如何管理所有这些事务,即它使用什么线程,它使用什么数据结构来跟踪所有正在进行的事务?我没有读过任何描述这一点的文件。请您尝试解释一下,或者共享与此相关的任何教程的链接好吗?

通常,EJB容器本身并不实现事务管理。相反,它使用TransactionManager,它通常在单独的模块中实现。根据实现的不同,可能根本不存在任何数据结构:EJB代理可以简单到根据需要调用getTransaction、suspend或begin(取决于事务属性),将事务存储在局部变量中,调用实际的bean实例,然后调用commit、rollback或resume

TransactionManager几乎肯定使用某种类型的ThreadLocal来存储当前事务,并且它可能使用某种辅助线程来跟踪事务超时。否则,所使用的特定数据结构将因实现的不同而大不相同


(我从未遇到过任何描述事务管理器内部工作的文档。查看开源实现可能会了解可以使用哪种数据结构。)

您可以下载源代码并进行调试