快速业务通道

事务策略: 高并发策略-学习如何为支持高用户并发性的应用程序实现事务策略 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14
BEAN) 注释。注意,这 个注释是类级的(而不是方法级的),这表示您不能在相同的类中结合 Declarative 和 Programmatic 事务模型。选择并坚持其中之一。

低级技巧

假设您希望坚持使用 Declarative Transaction 模型来简化事务处理,但是仍然能在高用户并发性场 景中增加吞吐量。同时,您应该在这种事务策略中使用低级技巧。通过此技巧,您通常会遇到与先读取技 巧相同的折衷问题:读取操作通常是在事务作用域的外部完成的。并且,实现这种技巧最有可能需要代码 重构。

我仍然从 清单 1 中的示例入手。不用在相同的方法中使用编程事务,而是将更新操作移动到调用栈 的另一个公共方法中。然后,完成读取操作和处理时,您可以调用更新方法;它会开始一个事务,调用更 新方法并返回。清单 3 演示了这个技巧:

清单 3. 使用 High Concurrency 策略(低级技巧)

@TransactionAttribute

(TransactionAttributeType.SUPPORTS)public void processTrade(TradeData trade) throws 

Exception {   try {      //first validate the trade      TraderData trader = 

service.getTrader(trade.getTraderID());      validateTraderEntitlements(trade, 

trader);      verifyTraderLimits(trade, trader);      performPreTradeCompliance

(trade, trader);      //now adjust the account      AcctData acct = service.getAcct

(trade.getAcctId());      verifyFundsAvailability(acct, trade);      adjustBalance

(acct, trade);      performPostTradeCompliance(trade, trader);      //Now perform 

the updates      processTradeUpdates(trade, acct);   } catch (Exception up) {    

  throw up;   }}@TransactionAttribute(TransactionAttributeType.REQUIRED)

public void processTradeUpdates(TradeData trade, AcctData acct) throws Exception {   

try {      service.insertTrade(trade);      service.updateAcct(trade);   } catch 

(Exception up) {      ctx.setRollbackOnly();      throw up;   }}

事务策略: 高并发策略-学习如何为支持高用户并发性的应用程序实现事务策略(6)

时间:2011-10-21 IBM Mark Richards

通过此技巧,您可以有效地在调用栈的较低层次开始事务,从而减少花费在数据库中的时间。注意, processTradeUpdates() 方法仅更新在父方法(或以上)中修改中创建的实体。再次,保持事务的时间不 再是 6 秒,您只需要 300 ms。

现在是最难的部分。与 API 层策略或 Client Orchestration 策略不同,High Concurrency 策略并 未使用一致的实现方法。这便是 图 1 看上去为何像一名经验丰富的曲棍球员(包括缺少的牙齿)的原因 。对于一些 API 调用,事务可能会在 API 层的末端开始,而其他时候,它可能仅限于 DAO 层(特别是 对于LUW 中的单表更新)。技巧是确定在多个客户机请求之间共享的方法,并确保如果某个事务是在较高 级的方法中开始的,则它将在较低级的方法中使用。遗憾的是,此特性的效果是,作为非事务拥有者的较 低级方法可以对异常执行回滚。结果,开始事务的父方法不能对异常采取正确的措施,并且在尝试回滚( 或提交)已经标记为回滚的事务时会出现异常。

实现指南

有些情况仅需要稍微小些的事务作用域来满足吞吐量和并发性需求,而另一些情况需要大大缩小事务 作用域来实现所需的目的。不管具体情况如何,您都可以遵循以下的实现指导,它们能够帮助您设计和实 现High Concurrency 策略:

在着手使用低级别技术之前,首先要从先读技术开始。这样,事务至少包含在应用程序架构的 API 层 ,并且不扩散到其他层中。

当使用声明性事务时,经常使用 REQUIRED 事务

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号