事务策略: API层策略-学习如何实现一个简单且健壮的事务策略 - 编程入门网
throws Exception {
try {
//update account balance based on buy or sell...
} catch (Exception up) {
ctx.setRollbackOnly();
throw up;
}
}
}
假设这些方法都可以作为独立的操作运行。然而,如清单 2 所示,很多时候客户机可以在相同的 LUW 中同时调用这两种方法: 清单 2. 在同一个客户机方法中执行多个表更新 public TradeData invokeClientRequest(TradeData trade) throws Exception { try { insertTrade(trade); updateAcct(trade); return trade; } catch (Exception up) { //log the error throw up; } } 事务策略: API层策略-学习如何实现一个简单且健壮的事务策略(6)时间:2011-10-21 IBM Mark Richards在这里,并没有将事务放在客户机层而搞乱所有内容,更好的办法是通过在 TradingServiceImpl 类 和相应的 TradingService 接口中创建新的聚合方法来移除多 API 层调用。清单 3 展示了这个新的聚合 方法(为简单起见,没有显示接口代码): 清单 3. 添加一个公共聚合方法 @Stateless @Remote(TradingService.class) public class TradingServiceImpl implements TradingService { @PersistenceContext(unitName="trading") EntityManager em; @Resource SessionContext ctx; @TransactionAttribute(TransactionAttributeType.REQUIRED) public TradeData placeTrade(TradeData trade) throws Exception { try { insertTrade(trade); updateAcct(trade); return trade; } catch (Exception up) { ctx.setRollbackOnly(); throw up; } } @TransactionAttribute(TransactionAttributeType.REQUIRED) public long insertTrade(TradeData trade) throws Exception { ... } @TransactionAttribute(TransactionAttributeType.REQUIRED) public void updateAcct(TradeData trade) throws Exception { ... } } 重构后的客户机代码如清单 4 所示: 清单 4. 重构后的客户机代码只发出一个 API 层调用 public TradeData invokeClientRequest(TradeData trade) throws Exception { try { return placeTrade(trade); } catch (Exception up) { //log the error throw up; } } 事务策略: API层策略-学习如何实现一个简单且健壮的事务策略(7)时间:2011-10-21 IBM Mark Richards注意,客户机方法现在对名为 placeTrade() 的 API 层中的新聚合方法发出了一个调用。 insertTrade() 和 updateAcct() 方法仍然是公共方法,因为它们可以彼此独立调用,而不用考虑新的聚 合方法。 尽管我使用了一个简单的示例进行说明,但是我并没有要刻意忽略这项重构技巧的复杂性。在某些情 况下(特别是使用 HTTPServletRequest 或 HTTPSession 等基于 Web 的对象的客户机代码)重构可以非 常复杂并涉及到大量的代码修改。您需要在重构客户机和服务器代码所需的工作量和对数据完整性、一致 性的需求之间做出权衡。就是说,现在需要考虑到实用性。要实现朝向可靠事务策略(比如本文描述的 API 层事务策略)的渐进式推进,可以临时向客户机代码添加事务逻辑,从而在同一个事务工作单元中保 持两个 API 层调用互相协调(确保 API 层仍然具有 REQUIRED 属性设置)。然而,您应当理解执行以下 操 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |