快速业务通道

事务策略: 客户端编排策略-了解如何实现可靠的基于客户端的事务策略 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14
a;import com.trading.common.TradingService;@Stateless@Remote(TradingService.class)public class TradingServiceImpl implements TradingService { @PersistenceContext EntityManager em; @TransactionAttribute(TransactionAttributeType.MANDATORY) public TradeData insertTrade(TradeData trade) throws Exception { trade.setStage ("PLACED"); em.persist(trade); return trade; } @TransactionAttribute(TransactionAttributeType.MANDATORY) public void updateAcct(TradeData trade) throws Exception { AcctData acct = em.find (AcctData.class, trade.getAcctId()); if (trade.getAction().equals("BUY")) { acct.setBalance(acct.getBalance() - (trade.getShares() * trade.getPrice ())); } else { acct.setBalance(acct.getBalance() + (trade.getShares() * trade.getPrice())); } }}

从清单 4 中可以看到,如果任何一个更新方法抛出异常,则客户端层方法将负责执行必要的事务回滚 。您还可以从清单 4 中看出,采用这种策略,客户端层必须 能够开始和传播事务;否则,您将遇到一个 javax.ejb.EJBTransactionRequiredException,这表示需要事务才能调用更新方法。

结束语

当来自客户端层的大多数请求都需要向 API 层发起多个调用才能完成一个 LUW 时,客户端编排事务 策略将非常有用。但是需要注意 — 实现这种策略会对应用程序的体系结构造成一些限制,这主要体现在 体系结构能支持哪些类型的客户端,以及客户端层和 API 层之间所使用的通信协议。这种事务策略的另 一个缺点是,在客户端层中使用程序化事务始终会存在引发 “程序员错误” 的可能性,更不用说客户端 开发人员现在必须学习 Java Transaction API (JTA) 和相应的事务逻辑。

不要尝试在相同应用程序中混合客户端编排策略和 API 层策略,以期解决应用程序体系结构中的所有 变化。这是不会起作用的,并且会造成数据库中的数据不一致,以及过度复杂的设计。如果您的客户端不 支持事务,但您发现客户端编排事务策略非常合适,那么需要执行一些重构。摆脱这种 “混合” 问题的 一种方法是提供一个 “替代 API” 层,它使用 API 层事务策略调用使用客户端编排策略的 API 层。但 是,需要记住对这种替代 API 的调用必须是单一的调用(在 API 层事务策略中指定)。从本质上说,您 将替代 API 作为 API 层的客户端对待。在此基础上,您可以发起多个 API 层调用,因为事务会在新的 替代 API 中生成。

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