事务策略: API层策略-学习如何实现一个简单且健壮的事务策略 - 编程入门网
作的含义:
您需要在客户机方法中使用编程式的事务(参见 “事务策略:模型和策略概述”)。 当 API 层方法被标记为回滚事务时,需要将事务回滚封装到 try/catch 块中。 不能够对异常采取纠正操作。 客户机和 API 层使用的通信协议受到了限制(例如,没有 HTTP、没有 JMS 等等)。 注意,通过 渐进式地实现这个事务策略,您将不会得到一个可靠和健壮的事务策略,除非您完成了重构工作。 事务策略实现 API Layer 事务策略的实现相当简单。因为包含事务逻辑的惟一的一个层是 API 层,我将只展示该层 的域模型类中的事务逻辑。 回忆一下 策略设置和特征 小节,对于写操作(更新、插入和删除),公共 API 层方法应当有一个事 务属性 REQUIRED 并包含事务回滚逻辑。任何公共读方法在默认情况下都应该有一个事务属性 SUPPORTS ,其中不包含回滚逻辑。下面的清单 5 解释了这一事务策略实现: 清单 5. 实现 API Layer 策略 @Stateless@Remote(TradingService.class)public class TradingServiceImpl implements TradingService { @PersistenceContext (unitName="trading") EntityManager em; @Resource SessionContext ctx; @TransactionAttribute(TransactionAttributeType.REQUIRED) public long insertTrade (TradeData trade) throws Exception { try { em.persist(trade); return trade.getTradeId(); } catch (Exception up) { ctx.setRollbackOnly(); throw up; } } @TransactionAttribute (TransactionAttributeType.SUPPORTS) public TradeData getTradeOrder(long tradeId) { return em.find(TradeData.class, tradeId); }} 事务策略: API层策略-学习如何实现一个简单且健壮的事务策略(8)时间:2011-10-21 IBM Mark Richards实现这一策略的一种更优化的方法是利用 EJB 3.0 中的 @TransactionAttribute 注释的 TYPE 作用 域,并且在默认情况下将整个类中的所有方法设为 REQUIRED,同时只将读操作覆盖为 SUPPORTS。清单 6 展示了这一技巧: 清单 6. 优化 API Layer 策略的实现 @Stateless@Remote(TradingService.class) @TransactionAttribute(TransactionAttributeType.REQUIRED)public class TradingServiceImpl implements TradingService { @PersistenceContext (unitName="trading") EntityManager em; @Resource SessionContext ctx; public long insertTrade(TradeData trade) throws Exception { try { em.persist(trade); return trade.getTradeId(); } catch (Exception up) { ctx.setRollbackOnly(); throw up; } } @TransactionAttribute(TransactionAttributeType.SUPPORTS) public TradeData getTradeOrder(long tradeId) { return em.find(TradeData.class, tradeId); } } 我建议使用这种方法,而不是将所有内容默认设置为 SUPPORTS,因为如果您忘记编写 @TransactionAttribute 注释的话,那么拥有一个事务总比什么都没有强。 结束语 API Layer 事务策略将良好地应用于大多数业务应用程序。它很直观、简单、易于实现,并且很健壮 。您可能需要进行一些应用程序重构来实现这一策略,但从长远来看,付出这些努力来获得高度的数据一 致性和完整性是非常值得的。记住,本文所描述的是一种事务策略。它所涉及的不仅仅是一个简单的实现 任务。团队中的每位开发人员都应当知道并理解所使用的事务策略,能够描述它,并且最重要的是能够执 行它。 尽管 API Layer 事务策略是最常见的一种策略,但 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |