我什么时候应该使用“REQUIRED”和“NOT_SUPPORTED”作为 MDB 的 @TransactionAttribute 值?

2024-03-13

我了解容器管理事务(CMT)。我也知道关于不同的可能值 http://docs.oracle.com/javaee/6/api/javax/ejb/TransactionAttributeType.html枚举类型的TransactionAttributeType。由于客户端从不直接调用 MDB,因此除REQUIRED and NOT_SUPPORTED对于 MDB 来说没有意义,因为没有客户端发起的事务可以加入。那么我什么时候应该注释onMessage()MDB 的方法REQUIRED vs NOT_SUPPORTED?没有提到这两个选项的默认行为是什么?


这两个选项中没有一个的默认行为是什么 提及?

默认行为为Container- 托管 MDB 是NOT_SUPPORTED.

那么什么时候我应该用以下注解 MDB 的 onMessage() 方法 必需还是不支持?

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

如果您不想要这种行为,请使用REQUIRED, 放入 try/catchonMessage(),并致电setRollbackOnly()当发生异常时在 catch() 中。如果出现以下情况,您将需要 XA 驱动程序onMessage()跨不同资源执行多个操作;例如,更新数据库并在同一事务中发送新的 JMS 消息肯定需要 XA 兼容的驱动程序。

MDB 仅支持 REQUIRED 或 NOT_SUPPORTED

MDB 可以使用REQUIRED or NOT_SUPPORTED交易属性;其他属性没有意义,因为它们需要客户端上下文。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我什么时候应该使用“REQUIRED”和“NOT_SUPPORTED”作为 MDB 的 @TransactionAttribute 值? 的相关文章

随机推荐