Java JTA中不支持嵌套事务的原因
为什么JTA不支持嵌套事务?这是因为实现它们的复杂性(我对此表示怀疑)还是一些设计原则?(正如@Piotr Nowicki指出的,JTA允许嵌套事务,但这是可选的,不是强制性的。) 为什么??这是不可能肯定回答的问题之一,除非你是做出决定时“在房间里”的人之一Java JTA中不支持嵌套事务的原因,java,jakarta-ee,transactions,jta,nested-transactions,Java,Jakarta Ee,Transactions,Jta,Nested Transactions,为什么JTA不支持嵌套事务?这是因为实现它们的复杂性(我对此表示怀疑)还是一些设计原则?(正如@Piotr Nowicki指出的,JTA允许嵌套事务,但这是可选的,不是强制性的。) 为什么??这是不可能肯定回答的问题之一,除非你是做出决定时“在房间里”的人之一 它可能是将嵌套事务作为规范的一部分所固有的复杂性,也可能是当时的表面复杂性;i、 e.他们不确定自己是否知道如何做好指定工作 可能是因为他们认为需求不足 可能是时间压力。。。或者仅仅是精疲力竭 这可能是“商业原因”;e、 g.某些供应商
- 它可能是将嵌套事务作为规范的一部分所固有的复杂性,也可能是当时的表面复杂性;i、 e.他们不确定自己是否知道如何做好指定工作
- 可能是因为他们认为需求不足
- 可能是时间压力。。。或者仅仅是精疲力竭
- 这可能是“商业原因”;e、 g.某些供应商不希望通过扩大规范的范围来干扰产品发布计划
但是,底线是,如果您想要真正的答案,您需要询问编写JTA规范的工作组中的人员。(我怀疑他们会告诉你……记录在案。)这两者都不是问题的答案 许多容器(如JBoss)提供了更复杂的替代事务管理器,支持嵌套事务等概念,但其他容器(如glassfish)则不支持。然而,这两个都是JavaEE兼容的。这样做的目的是简化规范,以降低供应商遵守规范的障碍 为什么要强迫某人实现一个只覆盖0.5%事务用例的复杂事务管理器,或者放弃JavaEE遵从性
没有什么能阻止雄心勃勃的供应商超越规范,但他们没有选择遗漏任何内容。JTA规范并不是说it不支持嵌套事务-它只是不需要实现者支持它 以下摘录摘自JTA 1.1规范: p。11, 13; 3.1 UserTransaction接口和3.2 TransactionManager接口 “不需要对嵌套传输的支持” p。13,3.2.1开始交易 如果事务管理器实现不支持嵌套事务,则 TransactionManager.begin方法在 调用线程已与事务关联。“ 实际上,
XAResource
可能存在问题,您可能会尝试登记当前事务(我相信它可能与X/openxa规范有关):
3.4.4交易关联
XAResource不支持嵌套事务。这是一个错误
要在当前关联的连接上调用的XAResource.start方法
使用不同的事务
有一篇关于嵌套事务、JTA和XA的好文章:我想知道我所做的是否会对您有所帮助。请在这里查看,这可能在规范中,但JTA的注释在可能值列表中包含嵌套的
。尽管很有趣,Spring的注释。