扭曲的铅笔
BlogJava
首页
新随笔
联系
聚合
管理
随笔 - 37 文章 - 14 trackbacks - 0
<
2007年8月
>
日
一
二
三
四
五
六
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
给我留言
查看公开留言
查看私人留言
随笔分类
AppFuse(2)
BI(5)
DesignPattern(1)
English
Hibernate(1)
J2EE(13)
Lotus(2)
SiteMesh(4)
Spring(6)
生活随笔(2)
随笔档案
2010年8月 (1)
2009年9月 (3)
2009年8月 (1)
2009年6月 (1)
2008年9月 (1)
2008年7月 (2)
2008年3月 (2)
2008年2月 (1)
2007年11月 (4)
2007年10月 (2)
2007年9月 (3)
2007年8月 (4)
2007年7月 (2)
2007年6月 (7)
2007年5月 (2)
文章分类
BI
Hibernate
J2EE
Struts Menu
相关链接
ardorsoft_BI Blog
JAVA开源小堂
JAVA杂谈(收藏)
Pentaho中国社区
Pentaho之学习BLOG
刘文涛BLOG
商业智能blog
我的店铺
诗特林(BI)
搜索
最新评论
1. re: CAS SSO配置(上)
评论内容较长,点击标题查看
--陌生
2. re: CAS SSO配置(上)
评论内容较长,点击标题查看
--陌生
3. re: JFreeChart显示
能不能把你的源代码发给我让我学习一下,谢谢,谢谢!
songkewei110@126.com
--songkewei
4. re: Acegi扩展JdbcDaoImpl获取更多的用户信息
评论内容较长,点击标题查看
--acegi
5. re: CAS SSO配置(上)
2:在窗口2输入对B应用程式请求,还会需要身份验证
这不失去sso的意义了嘛
--guooo
阅读排行榜
1. CAS SSO配置(上)(9411)
2. SSO原理(转摘)(4422)
3. CAS SSO配置(下)(2798)
4. Mondrian+JPivot流程简介(转)(2442)
5. SiteMesh 过滤不装饰的页面(2431)
评论排行榜
1. CAS SSO配置(上)(5)
2. 基于oracle数据库的appfuse项目(转摘)(2)
3. Acegi扩展JdbcDaoImpl获取更多的用户信息(1)
4. Struts2学习一(1)
5. Acegi 关键组件详述(转)(1)
Spring事务学习(一)
Spring没有直接管理事务,它有很多供选择的事务管理的责任委托给使用JTA或持久化机制的某个特定平台实现;但Spring通过PlatformTransactionManager这个接口来实现事务管理。
大多情况不直接使用PlatformTransactionManager;对于编程式事务可以采用TransactionTemplate,对于声明式事务结合AOP采用TransactionProxyFactoryBean。这两种策略都会与PlatformTransactionManager交互,并从TransactionDefinition中获得。
TransactionDefinition接口声明了事务设置,如传播行为、隔离级别、超时设置。DefaultTransactionDefinition类是带有预设值(PROPAGATION_REQUIRED,ISOLATION_DEFAULT, TIMEOUT_DEFAULT, readOnly=false)的实现。它是TransactionTemplate和DefaultTransactionAttribute基类。
一、编程式事务:
A:假设是Hibernate事务,利用TransactionTemplate类来实现事务控制。
Hibernate事务管理器配置如下
<
bean
id
="transactionManager"
class
="org.springframework.orm.hibernate3.HibernateTransactionManager"
>
<
property
name
="sessionFactory"
>
<
ref
bean
="spcSessionFactory"
/>
</
property
>
</
bean
>
TransactionTemplate类配置如下
<
bean
id
="transactionTemplate"
class
="org.springframework.transaction.support.TransactionTemplate"
>
<
property
name
="transactionManager"
>
<
ref
bean
="transactionManager"
/>
</
property
>
</
bean
>
在所需要事务管理的类里,并通过IOC载入transactionTemplate;下面展示TransactionTemplate如何利用回调机制在程序里添加事务边界。
public
void
saveData()
{
transactionTemplate.execute(
new
TransactionCallback()
{
public
Object doInTransaction(TransactionStatus ts)
{
try
{
//
do stuff
}
catch
(Exception e)
{
ts.setRollbackOnly();
}
}
}
);
}
这样就达到用Spring的编程方式来管理事务。从中我们可以看出transactionTemplate对象有一个transactionManager属性。在幕后,TransationTemplate使用PlatformTransactionManager的一个实现来处理特定平台的事务管理细节。
B:另一种编程事务的方法是直接使用PlatformTransactionManager。这种方法的问题是你必须管理逻辑,在抛出异常时回滚事务。要使用PlatformTransactionManager,执行下面的步骤。
public
void
saveUser(
final
User user)
{
DefaultTransactionDefinition txDef
=
new
DefaultTransactionDefinition();
//
set propagation behavior, isolation level etc. template
//
we don't need to since REQUIRED (the default) is good enough
TransactionStatus status
=
transactionManager.getTransaction(txDef);
try
{
//
do business logic
String lastName
=
user.getLastName();
for
(
int
i
=
0
; i
<
3
; i
++
)
{
//
can't just set user.id to null or Hibernate
//
complains that identifier was changed
User u
=
new
User();
u.setFirstName(user.getFirstName());
u.setLastName(user.getLastName()
+
i);
//
make the last one a duplicate record
if
(i
==
2
)
{
u.setLastName(lastName
+
0
);
}
if
(log.isDebugEnabled())
{
log.debug(
"
entering record
"
+
u);
}
dao.saveUser(u);
}
}
catch
(DataAccessException ex)
{
transactionManager.rollback(status);
throw
ex;
}
transactionManager.commit(status);
}
相比较使用TransactionTemplate类来管理事务,代码更简洁,使用方便。
posted on 2007-08-08 21:28
扭曲的铅笔
阅读(547)
评论(0)
编辑
收藏
所属分类:
Spring
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
相关文章:
Acegi扩展JdbcDaoImpl获取更多的用户信息
Acegi 关键组件详述(转)
Servlet 与 Spring(转摘)
Spring事务学习(二)
Spring事务管理探索(转摘自JavaEye)
Spring事务学习(一)