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

时间:2016-05-15 20:54:01

标签: java-ee ejb

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

最近有人问我,容器如何管理所有这些交易,即它使用了什么线程,它用于跟踪所有正在进行的交易的数据结构?我没有读过任何描述这个的文件。您能否尝试解释一下或分享与此相关的任何教程的链接?

1 个答案:

答案 0 :(得分:2)

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

TransactionManager几乎肯定使用某种ThreadLocal来存储当前事务,并且它可能使用某种辅助线程来跟踪事务超时。根据实施情况,使用的具体数据结构会有很大差异。

(我从来没有遇到任何描述事务管理器内部工作的文档。查看开源实现可能会给出一些可以使用哪种数据结构的想法。)