事务策略: 客户端编排策略-了解如何实现可靠的基于客户端的事务策略 - 编程入门网
节,在大多数情况下,客户端层都需要使用程序化事务,除非它作为 Spring 托管 bean 在 Spring 上下文中运行。由于我在实现示例中使用的是 EJB3,因此我将展示使用程序化事 务的实现。您可以参考 “模型和策略概述” 或者 Spring Framework 文档,了解如何在 Spring 中使用 程序化事务(参见 参考资料)。
此外,如果您运行了一个外部客户端,则应该确保事务管理程序支持跨 JVM 传播事务。在我的示例中 ,我使用 JBoss 4.2.0、EJB 3.0、Java Persistence API (JPA) 和 Hibernate 3.2.3,并运行使用 InnoDB 引擎的 MySQL 5.0.51b。这种环境(特别是 JBoss)支持跨多个 JVM 传播客户端事务(使用 RMI-IIOP)。 我将从读操作开始,因为它们是最早出现的。对于在客户端层发起的数据库读操作,从事务的角度来 说您不需要对客户端代码执行任何操作,因为数据库读操作不需要事务(参见 “了解事务陷阱” 中的 了解事务陷阱 侧栏)。但是,通过 API 层事务策略,您会希望将 API 层读操作方法设置为 SUPPORTS, 以确保在作用域的上下文中调用读方法时,它将包含在事务作用域中。 清单 1 演示了一个简单的调用读操作的客户端层方法。注意,getTrade() 读方法中不需要事务逻辑 : 清单 1. 读操作 — 客户端层 package com.trading.client; import javax.naming.InitialContext; import com.trading.common.TradeData; import com.trading.common.TradingService; public class TradingClient { public static void main(String[] args) { new TradingClient().getTrade(); } public void getTrade() { try { InitialContext ctx = new InitialContext(); TradingService service = (TradingService) ctx.lookup("TradingServiceImpl/remote"); TradeData trade = service.getTrade(11); System.out.println(trade); } catch (Exception e) { e.printStackTrace(); } } } 事务策略: 客户端编排策略-了解如何实现可靠的基于客户端的事务策略(4)时间:2011-10-21 IBM Mark RichardsTradingServiceImpl EJB3 无状态会话 bean 中的相应 getTrade() API 层读方法如清单 2 所示: 清单 2. 读操作 — API 层 package com.trading.server; import javax.ejb.Stateless; import javax.ejb.Remote; import javax.ejb.TransactionAttribute; import javax.ejb.TransactionAttributeType; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import com.trading.common.TradeData; import com.trading.common.TradingService; @Stateless @Remote(TradingService.class) public class TradingServiceImpl implements TradingService { @PersistenceContext EntityManager em; @TransactionAttribute(TransactionAttributeType.SUPPORTS) public TradeData getTrade(long tradeId) throws Exception { return em.find(TradeData.class, tradeId); } } 注意,清单 2 中使用了 SUPPORTS 事务属性,这表示如果此方法是独立调用的,那么它将不会开始事 务,但如果它是在已有事务中调用的话,则会使用一个已有的事务上下文。 对于数据库更新操作、客户端层,作为事务所有者,负责获取事务管理程序,开始事务,然后提交事 务或者根据操作的 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |