快速业务通道

事务策略: API层策略-学习如何实现一个简单且健壮的事务策略 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14
作的含义:

您需要在客户机方法中使用编程式的事务(参见 “事务策略:模型和策略概述”)。

当 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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号