技术开发 频道

Spring PK EJB 3.0,我们该选择哪一个?



    以下以机票预订系统为例,阐述Spring和EJB 3.0提供的事务处理功能。



图二. 购票流程序列图。如果中间任一步骤失败,应确保系统状态的一致性。
 
如下的单元测试验证购票操作流程以事务方式运作:
 
 
public void testPurchaseTicket_DebitFailure() throws Exception { // 创建机票对象 Ticket ticket = createTicket(); // 保存数据库中机票数量 int count = ticketDAO.findAll().size(); // 设置信用卡授权 setupMockAuthorizer(true); try { bookingAgent.purchaseTicket(ticket, true); fail("System failure was not thrown as was intended"); } catch (InsufficientFundsException e) { // 纠正异常行为 } // 验证事务回滚 assertEquals(count, ticketDAO.findAll().size()); }
此测试在Spring 和 EJB 3.0中均能通过。下面是Spring的实例类:
 
public Ticket purchaseTicket(Ticket ticket) { creditAuthorizer.authorize(ticket.getPrice(), null); ticket.setStatus(Status.PURCHASED); ticketDAO.save(ticket); creditAuthorizer.debit(ticket.getPrice()); return ticket; } 以下是EJB 3.0的实例类 public Ticket purchaseTicket(Ticket ticket) { creditAuthorizer.authorize(ticket.getPrice(), null); ticket.setStatus(Status.PURCHASED); ticketDAO.save(ticket); creditAuthorizer.debit(ticket.getPrice()); return ticket; }
Spring和 EJB 3.0在处理方式上都不必直接和事务管理细节打交道。这说明了声明式编程的优势。事务管理可以模块化的方式在整个应用范围内重用,以避免业务逻辑混乱,从而使开发人员可将主要精力用在处理业务问题方面。
0
相关文章