gpt4 book ai didi

java - 我什么时候应该使用 `REQUIRED` 与 `NOT_SUPPORTED` 作为 MDB 的 @TransactionAttribute 值?

转载 作者:行者123 更新时间:2023-12-02 06:19:10 27 4
gpt4 key购买 nike

我了解容器管理事务(CMT)。我也知道different possible values枚举类型TransactionAttributeType。由于客户端从不直接调用 MDB,因此除了 REQUIREDNOT_SUPPORTED 之外的属性类型对于 MDB 没有意义,因为没有客户端启动的事务可以加入。那么什么时候应该使用 REQUIREDNOT_SUPPORTED 注释 MDB 的 onMessage() 方法呢?没有提到这两个选项的默认行为是什么?

最佳答案

What will be the default behavior in none of the two options is mentioned?

容器管理的 MDB 的默认行为是 NOT_SUPPORTED

So when should I annotate the onMessage() method of an MDB with REQUIRED vs NOT_SUPPORTED?

使用 NOT_SUPPORTED 意味着 - 如果 onMessage() 发生故障 - 故障之前发生的任何更新/操作都不会回滚;这对于涉及不同资源的原子操作来说是不可取的。

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

MDB 仅支持 REQUIRED 或 NOT_SUPPORTED

MDB 可以使用 REQUIREDNOT_SUPPORTED 事务属性;其他属性没有意义,因为它们需要客户端上下文。

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

关于java - 我什么时候应该使用 `REQUIRED` 与 `NOT_SUPPORTED` 作为 MDB 的 @TransactionAttribute 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24120389/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com