摘要
Spring框架是一个流行的基于轻量级控Ò 46;反转容器的Java/J2EE应用框架,尤其在数& #25454;访问和事务管理方面的能力是众 2;周知的。Spring的声明性事务分离可以ò 12;用到任何POJO目标对象,并且包含所੍ 7;EJB基于容器管理事务中的已声明事务 。后台的事务管理器支持简单的基É 10;JDBC的事务和全功能的基于JTA的J2EE事务。 ;
这篇文章详细的讨论了Spring的事务管ĩ 02;特性。重点是如何在使用JTA作为后台 ;事务策略的基础上让POJO利用Spring的声明&# 24615;事务,这也显示了Spring的事务服务可& #20197;无缝地与J2EE服务器(如BEA WebLogic Server的事务协调器)的事务协调器进行 ;交互,作为EJB CMT传统事务分离方式的一个替代者。
POJO的声明性事务
作为Spring声明性事务分离方式的样例ʌ 92;让我们来看一下Spring的样例应用PetClinic的 0013;心服务外观中的配置:
清单1:
他遵循Spring的标准XMLBean定义格式。定义ߚ 2;:
1、一个DataSource引用,指向一个JNDI位置—ß 12;J2EE服务器管理下这将从JNDI环境中获取&# 29305;定的DataSource。
2、一个应用服务实现—这是一个POJO, ;封装了业务和数据访问逻辑。在这% 324;实现了应用中的Clinic服务接口。
3、一个应用服务的事务代理—这个 0195;理为目标服务定义了事务属性,匹 配特定的方法名模式并为之创建相ò 12;的事务。在实际的事务管理中,代&# 29702;指向一个PlatformTransactionManager实现。
注意:除了显式的代理定义A 292;Spring还支持自动代理机制和通过Commons Attributes或J2SE 5.0注解实现源程序级的元数据使用。&# 36825;些可选方法的讨论超过了本文的范 ;围。可以参考Spring的文档来了解相关ಭ 4;节。
业务接口和业务实现是特定于应用 0340;并且不需要关心Spring或者Spring的事务管 702;。普通Java对象可以作为服务的目标ë 45;象,而且任何普通Java接口可以作为 1;务的接口。下面是一个Clinic接口的示Ë 63;:
清单2:
<
Spring框架是一个流行的基于轻量级控Ò 46;反转容器的Java/J2EE应用框架,尤其在数& #25454;访问和事务管理方面的能力是众 2;周知的。Spring的声明性事务分离可以ò 12;用到任何POJO目标对象,并且包含所੍ 7;EJB基于容器管理事务中的已声明事务 。后台的事务管理器支持简单的基É 10;JDBC的事务和全功能的基于JTA的J2EE事务。 ;
这篇文章详细的讨论了Spring的事务管ĩ 02;特性。重点是如何在使用JTA作为后台 ;事务策略的基础上让POJO利用Spring的声明&# 24615;事务,这也显示了Spring的事务服务可& #20197;无缝地与J2EE服务器(如BEA WebLogic Server的事务协调器)的事务协调器进行 ;交互,作为EJB CMT传统事务分离方式的一个替代者。
POJO的声明性事务
作为Spring声明性事务分离方式的样例ʌ 92;让我们来看一下Spring的样例应用PetClinic的 0013;心服务外观中的配置:
清单1:
class="org.springframework.jndi.JndiObjectFactoryBean">
java:comp/env/jdbc/petclinic
class="org.springframework.transaction.jta.JtaTransactionManager"/>
class="org.springframework.samples.petclinic.jdbc.JdbcClinic">
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
PROPAGATION_REQUIRED,readOnly
PROPAGATION_REQUIRED
他遵循Spring的标准XMLBean定义格式。定义ߚ 2;:
1、一个DataSource引用,指向一个JNDI位置—ß 12;J2EE服务器管理下这将从JNDI环境中获取&# 29305;定的DataSource。
2、一个应用服务实现—这是一个POJO, ;封装了业务和数据访问逻辑。在这% 324;实现了应用中的Clinic服务接口。
3、一个应用服务的事务代理—这个 0195;理为目标服务定义了事务属性,匹 配特定的方法名模式并为之创建相ò 12;的事务。在实际的事务管理中,代&# 29702;指向一个PlatformTransactionManager实现。
注意:除了显式的代理定义A 292;Spring还支持自动代理机制和通过Commons Attributes或J2SE 5.0注解实现源程序级的元数据使用。&# 36825;些可选方法的讨论超过了本文的范 ;围。可以参考Spring的文档来了解相关ಭ 4;节。
业务接口和业务实现是特定于应用 0340;并且不需要关心Spring或者Spring的事务管 702;。普通Java对象可以作为服务的目标ë 45;象,而且任何普通Java接口可以作为 1;务的接口。下面是一个Clinic接口的示Ë 63;:
清单2:
public interface Clinic {
Pet loadPet(int id);
void storePet(Pet pet);
...
}
<