为什么JTA不支持嵌套事务?是因为实现它们很复杂(我怀疑这一点),还是因为某些设计原则?
为什么JTA不支持嵌套事务?是因为实现它们很复杂(我怀疑这一点),还是因为某些设计原则?
第13页,3.2.1 启动事务"不必支持嵌套事务。"
您可能尝试在当前事务中注册的"如果事务管理器实现不支持嵌套事务,当调用线程已与事务相关联时, TransactionManager.begin方法会抛出NotSupportedException异常。"
XAResource
存在问题(我相信它可能与X/Open XA规范有关):
3.4.4 事务关联
XAResource不支持嵌套事务。在当前已关联其他事务的连接上调用XAResource.start方法是错误的。
这并不是商业答案。
许多容器(例如JBoss)提供了更复杂的替代事务管理器,支持诸如嵌套事务之类的概念,但其他容器(如glassfish)则没有。然而,这两者都符合Java EE规范。其想法是保持规范的简单性,以降低供应商的遵从门槛。
为什么要强制某人实现一个只涵盖0.5%的事务用例或放弃Java EE合规性的复杂事务管理器?
没有任何东西阻止雄心勃勃的供应商超越规范,但他们不能选择留下任何东西。