Java Transaction Design Strategies读书笔记

阅读更多

第一种:Client Owner Transaction Manager(客户端管理事务,比如物理上分开的Web层、SWT客户端),使用这种事务策略必需注意:

  1. 如果client使用EJB,必需使用编程式(programmatic)的事务管理,如果使用spring,可以使用宣告式的事务管理;
  2. 如果服务端对象是远程对象,比如web层和业务逻辑层物理分开,那么事务必须有能力传播到远程对象,比如RMI协议(Spring支持的大部分远程访问协议都不支持事务传播)
  3. Server 端的业务对象必需使用宣告式的事务管理模式,不能使用编程式的事务管理模式,因为一个编程式的事务不能传播另外一个编程式的事务(客户端很可能使用编程式的事务管理)
  4. 维护ACID属性的服务端不允许启动、提交和回滚事务
  5. 由客户端启动的事务将传播给任何本地的POJO调用;
  6. 服务端的业务对象必需使用托管式的事务(Mandatory);
  7. 客户端所有Query类型的Method都不应该使用事务,但server端的业务对象应该配置Support类型的事务支持;
  8. DAO层的代码不应该显示使用任何和事务或事务回滚相关的逻辑;

 第二种:Domain Service Owner Transaction Design Strategy:服务端管理事务,即每一个客户端对服务端的调用都作为一个单独的事务,这种模式也是我们大多数情况采用的,也是推荐的模式;

第三种:Server Delegate Owner Transaction Design Strategy:服务端委托事务模型,这种其实是第二种的一种特例,也就是使用Command或delegate模式,把客户端的调用逻辑委派给服务端的一个Processor,并再服务端进行事务边界的管理。

在设计时,要尽量避免使用在客户端管理事务的边界,应该采用第二种或第三种。

你可能感兴趣的:(读书,Java,编程,配置管理,Spring)