论坛登陆 用户名:  密 码:
设为首页  加入收藏
08年北京名校秋季招生
名牌院校免试入学宽进严出,突破考分限制,名校与你零距离,以下院校按报名先后顺序录取,24小时网上报名覆盖全国
  您现在的位置: 中国教育招生在线 >> IT >> JAVA认证 >> IT正文
如何在Spring中实现事务暂停系列之一
 作者:佚名     2007-3-14 17:32:53        来源:不详  浏览次数:

 

 

 

 

 

 

 

 

Spring框架是一个流行的基于轻量级控制反转容器的Java/J2EE应用框架,尤其在数据访问和事务管理方面的能力是众所周知的。Spring的声明性事务分离可以应用到任何POJO目标对象,并且包含所有EJB基于容器管理事务中的已声明事务。后台的事务管理器支持简单的基于JDBC的事务和全功能的基于JTA的J2EE事务。

这篇文章详细的讨论了Spring的事务管理特性。重点是如何在使用JTA作为后台事务策略的基础上让POJO利用Spring的声明性事务,这也显示了Spring的事务服务可以无缝地与J2EE服务器(如BEA WebLogic Server的事务协调器)的事务协调器进行交互,作为EJB CMT传统事务分离方式的一个替代者。

POJO的声明性事务

作为Spring声明性事务分离方式的样例,让我们来看一下Spring的样例应用PetClinic的中心服务外观中的配置:

清单1:

<bean id="dataSource"    
class="org.springframework.
jndi.JndiObjectFactoryBean">     
<property name="jndiName">        <value>java:comp/env/jdbc/petclinic</value>     
</property></bean><bean 
id="transactionManager"    
class="org.springframework.transaction.
jta.JtaTransactionManager"/><bean 
id="clinicTarget"    
class="org.springframework.
samples.petclinic.jdbc.JdbcClinic">    
<property name="dataSource">
<ref bean="dataSource"/>
</property></bean><bean id="clinic"    
class="org.springframework.transaction.
interceptor.TransactionProxyFactoryBean">    
<property name="transactionManager">
<ref bean="transactionManager"/>
</property>    
<property name="target">
<ref bean="clinicTarget"/>
</property>    
<property name="transactionAttributes">        
<props>            
<prop key="load*">
PROPAGATION_REQUIRED,readOnly
</prop>            
<prop key="store*">
PROPAGATION_REQUIRED
</prop>        
</props>   
</property></bean>
  

他遵循Spring的标准XMLBean定义格式。定义了:

1、一个DataSource引用,指向一个JNDI位置—在J2EE服务器管理下这将从JNDI环境中获取特定的DataSource。

2、一个应用服务实现—这是一个POJO,封装了业务和数据访问逻辑。在这里实现了应用中的Clinic服务接口。

3、一个应用服务的事务代理—这个代理为目标服务定义了事务属性,匹配特定的方法名模式并为之创建相应的事务。在实际的事务管理中,代理指向一个PlatformTransactionManager实现。

注意:除了显式的代理定义,Spring还支持自动代理机制和通过Commons Attributes或J2SE 5.0注解实现源程序级的元数据使用。这些可选方法的讨论超过了本文的范围。可以参考Spring的文档来了解相关细节。

业务接口和业务实现是特定于应用的并且不需要关心Spring或者Spring的事务管理。普通Java对象可以作为服务的目标对象,而且任何普通Java接口可以作为服务的接口。下面是一个Clinic接口的示例:

清单2:

public interface Clinic 
{    
Pet loadPet(int id);    
void storePet(Pet pet);    
...
}

这个接口的实现如下显示,假设他使用JDBC来执行必要的数据访问。他通过bean属性的设置方法来获取JDBC的DataSource;这与上面的配置中的dataSource属性定义相对应。

清单3:

public class JdbcClinic implements Clinic
{    
private DataSource dataSource;  
public void setDataSource
(DataSource dataSource) 
{      
this.dataSource = dataSource;    
}    
public Pet loadPet(int id) 
{      
try 
{          
Connection con =
this.dataSource.getConnection();          
...     
}     
catch (SQLException ex) 
{       
...      
}    
}    
public void storePet(Pet pet)
{     
try 
{          
Connection con = 
this.dataSource.getConnection();          
...      
}     
catch (SQLException ex) 
{        
...      
}    
}    
...
}

如你所见,代码相当直接。我们使用一个简单的Java对象,而事务管理由事务代理来处理,这个我们会在后续的连载文章中做出讨论。

注意在PetClinic示例应用中实际的基于JDBC的Clinic实现利用了Spring的JDBC支持类来避免直接使用JDBC的API。虽然Spring的事务管理也可以与普通的基于JDBC实现一起工作,就向上面的示例。

(T117)


责任编辑:lss
  相关新闻
如何30天突破三级网络?
如何应付新大纲二级考试的公共基础知识
以二级C语言为例分析如何准备计算机考试
我该如何报考软件水平资格考试?
如何顺利通过这次考试:计算机二级考试备考秘诀
如何准备计算机等级考试,基础教程网
名师访谈:如何应对二级C语言笔试考题
中小企业如何有效架设邮件服务系统(图)
如何有效管理Exchange的数据管理
名师谈如何复习并通过软考开发类考试
如何准备计算机等级考试,基础教程网
如何30天突破三级网络?
以二级C语言为例分析如何准备计算机考试
如何应付新大纲二级考试的公共基础知识
名师访谈:如何应对二级C语言笔试考题
名师访谈实录:二级公共基础部分如何准备
专家谈如何准备二级VFP上机考试
2006年4月计算机等级考试应如何备考
如何顺利通过这次考试:计算机二级考试备考秘诀
我该如何报考软件水平资格考试?
  评论
现在有100人对本文发表评论
查看所有评论
 
推  荐
 
100本成功必读热销书
热门招生
  北京文理研修学院   前进大学
  北京明园大学   北京建设大学
  北京邮电大学世纪学院   北方工商管理学院
  联想软件定向委培班   香港数码动画学院
  青年企业管理研修学院   北京华夏管理学院
热门培训
网络化办公专家培训认证 电子科技大学软件学院
软件测试工程师培训认证 北大青鸟十大授权培训
IT硬件工程师培训认证班 北京环球雅思荷兰预科
JAVA开发工程师培训 潜能时代IT服务管理培训
网络信息化工程师培训 清华大学继续教育学院
论坛精选
 
有些细节是男人也该注意的风度!最容易读错的字
某强人手机里保存的30条短信 中国十大高薪职业
最感人的十大韩剧经典台词 嫁给工程师的N个理由
爆强!只有一句话的鬼故事 转贴教你如何做妖精
 女人一定要記住的話 女人最好别嫁给最爱的男人
城市联盟
 大连 上海 天津 广州 西安 深圳  天津  青岛  大连  福州  沈阳  青海  连云港  南京  吉林  厦门  威海  辽宁  呼和浩特
Copyright © 2006   www.edu999.com   All rights reserved. 中国教育招生在线  版权所有
北京市通信管理局[2004]字第552号函    京ICP证040442号