Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JTA中不支持嵌套事务的原因_Java_Jakarta Ee_Transactions_Jta_Nested Transactions - Fatal编程技术网

Java 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.某些供应商

为什么JTA不支持嵌套事务?这是因为实现它们的复杂性(我对此表示怀疑)还是一些设计原则?

(正如@Piotr Nowicki指出的,JTA允许嵌套事务,但这是可选的,不是强制性的。)

为什么??这是不可能肯定回答的问题之一,除非你是做出决定时“在房间里”的人之一

  • 它可能是将嵌套事务作为规范的一部分所固有的复杂性,也可能是当时的表面复杂性;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的注释。