Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.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 什么时候应该使用'REQUIRED'与'NOT_SUPPORTED'作为MDB的@TransactionAttribute的值?_Java_Transactions_Jms_Ejb 3.0_Jta - Fatal编程技术网

Java 什么时候应该使用'REQUIRED'与'NOT_SUPPORTED'作为MDB的@TransactionAttribute的值?

Java 什么时候应该使用'REQUIRED'与'NOT_SUPPORTED'作为MDB的@TransactionAttribute的值?,java,transactions,jms,ejb-3.0,jta,Java,Transactions,Jms,Ejb 3.0,Jta,我了解容器管理事务(CMT)。我还知道枚举类型TransactionAttributeType的类型。由于客户机从不直接调用MDB,因此除了必需的和不受支持的之外的属性类型对MDB没有意义,因为没有客户机启动的事务可加入。那么,我应该在什么时候用REQUIREDvsNOT_SUPPORTED注释MDB的onMessage()方法呢?这两个选项中都没有提到的默认行为是什么 这两个选项中的默认行为都不是 提到了吗 容器管理的MDB的默认行为是不受支持 那么,我应该在什么时候用注释注释MDB的onMe

我了解容器管理事务(CMT)。我还知道枚举类型
TransactionAttributeType
的类型。由于客户机从不直接调用MDB,因此除了
必需的
不受支持的
之外的属性类型对MDB没有意义,因为没有客户机启动的事务可加入。那么,我应该在什么时候用
REQUIRED
vs
NOT_SUPPORTED
注释MDB的
onMessage()
方法呢?这两个选项中都没有提到的默认行为是什么

这两个选项中的默认行为都不是 提到了吗

容器
管理的MDB的默认行为是
不受支持

那么,我应该在什么时候用注释注释MDB的onMessage()方法 需要vs不支持

使用不支持的方式-如果在
onMessage()
中发生故障,则不会回滚故障之前发生的任何更新/操作;这对于涉及不同资源的原子操作是不可取的

如果不希望出现这种行为,请使用
REQUIRED
,在
onMessage()中放入try/catch()
,并在发生任何异常时在catch()中调用
setRollbackOnly()
。如果
onMessage()
正在跨不同资源执行多个操作,则需要XA驱动程序;例如,在同一事务中更新数据库和发送新的JMS消息肯定需要XA兼容的驱动程序

仅需要或不支持MDB的支持

MDB可以使用
必需的
不受支持的
事务属性;其他属性没有意义,因为它们需要客户端上下文


容器总是在调用
onMessage()
之前启动一个新事务。如果从
onMessage()
调用另一个方法,则容器将传递当前事务上下文。

我对这个讨论感兴趣。我确信specs表明默认事务属性是必需的

另一个stackoverflow讨论中的一些人:


谈到Weblogic服务器实现上的异常

我有一个后续问题。因此,在调用
onMessage(..)
方法之前,容器是否总是创建事务?在这种情况下,设置必需的属性将只加入容器启动的事务?另外,为什么默认行为
不受支持
。似乎应该支持默认行为
。更新了答案,raffiancan您可以回答为什么不支持默认行为吗?