wrs*_*der 8 jms glassfish message-driven-bean ejb-3.1 glassfish-3
完成以下任务的最佳方法是什么?
我能想到的几个方法可能会工作.还有其他什么,哪个最好?
使用@TransactionManagement(type=BEAN)和UserTransaction,并在捕获异常后显式回滚.例如:
catch (Exception e) {
e.printStackTrace();
utx.rollback();
}
使用容器管理的事务,指定@TransactionAttribute(value=NOT_SUPPORTED)上onMessage然后委托DB活动与一个单独的方法@TransactionAttribute(value=REQUIRED).
保留事务处理,并在服务器中重新配置重试属性.我正在使用Glassfish 3.1.1,我不确定如何设置它.
保留所有内容并明确检查消息是否在正文中重新发送,onMessage如果重新发送则退出.(message.getJMSRedelivered()?)
什么运作良好?有没有一种标准/最佳实践方法来处理这个问题?
最简单,最便携的方法是@TransactionAttribute(value=NOT_SUPPORTED)在onMessage()您声明并将数据库工作移动到另一个bean时使用@TransactionAttribute(REQUIRES_NEW)
请注意单独的方法方法,因为这不起作用.在JMS MDB中,该onMessage()方法是@TransactionAttribute可以使用的唯一方法.