我了解容器管理事务(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(使用前将#替换为@)