Java 什么时候应该使用'REQUIRED'与'NOT_SUPPORTED'作为MDB的@TransactionAttribute的值?
我了解容器管理事务(CMT)。我还知道枚举类型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
TransactionAttributeType
的类型。由于客户机从不直接调用MDB,因此除了必需的
和不受支持的
之外的属性类型对MDB没有意义,因为没有客户机启动的事务可加入。那么,我应该在什么时候用REQUIRED
vsNOT_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您可以回答为什么不支持默认行为吗?