henry1451 的专栏
BlogJava
首页
新随笔
新文章
联系
聚合
管理
posts - 60,comments - 71,trackbacks - 0
<
2024年11月
>
日
一
二
三
四
五
六
27
28
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
1
2
3
4
5
6
7
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(6)
给我留言
查看公开留言
查看私人留言
我参与的团队
架构师之家(0/0)
随笔档案
2009年9月 (1)
2009年6月 (1)
2009年5月 (2)
2009年4月 (3)
2009年3月 (2)
2009年1月 (1)
2008年12月 (3)
2008年11月 (2)
2008年10月 (3)
2008年9月 (7)
2008年8月 (9)
2008年7月 (23)
2008年6月 (1)
2008年5月 (2)
文章分类
Hibernate技术(5)
Java技术(15)
Jsp,Js,Ajax,Html技术(8)
Linux技术(2)
Oracle技术(9)
Spring技术
Struts,Webwork,Xwork技术(3)
其他相关(1)
开源技术(7)
文章档案
2008年6月 (27)
2008年5月 (27)
2008年4月 (3)
博客集锦
hk2000c技术专栏
即兴的灵感
和风细雨
小方的Java博客
小飞龙
急死我了
每日一得
资源与技术网站
BlogJava热点分类
BlogJava随笔
JavaEye
J道
Matrix
Open-open
SourceForge
搜索
最新评论
1. re: 关于关闭Connection是否会自动关闭Statement,ResultSet问题
谢了, 很受用!
--码农C
2. re: ClientAbortException 异常解决办法
换浏览器后可以了
--换浏览器后可以了
3. re: eclipse 下环境变量设置[未登录]
请问 MAVEN_REPO在哪定义的?
--a
4. re: 图形统计工具amCharts体验
无语
--EE
5. re: ClientAbortException 异常解决办法
。。。。。。。
--q
阅读排行榜
1. ClientAbortException 异常解决办法(14156)
2. Eclipse下安装TomcatPlugin插件(8429)
3. 图形统计工具amCharts体验(6254)
4. PL/pgSQL - SQL过程语言(转)(5570)
5. 如何修改存储过程(4481)
评论排行榜
1. 取得单选按钮中显示的内容(9)
2. ClientAbortException 异常解决办法(7)
3. 图形统计工具amCharts体验(4)
4. 10.1快乐!(4)
5. 重复提交、重复刷新、防止后退的问题以及处理方式(转)(4)
Hibernate中session的管理
session是hibernate运做的核心,是有SessionFactory所创建,sessionFactory是线程安全的,你可以让多个线程同时存取SessionFactory,而不会有资源共用的问题,然而session不是设计为线程安全的,所以让多个线程共用一个session,将发生资料共用而发生混乱的问题.下面是一个标准类.
import
java.io.Serializable;
import
net.sf.hibernate.HibernateException;
import
net.sf.hibernate.Session;
import
net.sf.hibernate.SessionFactory;
import
net.sf.hibernate.Transaction;
public
class
HibernateSessionUtil
implements
Serializable
{
//
创建线程局部变量 tLocalsess
public
static
final
ThreadLocal tLocalsess
=
new
ThreadLocal();
//
创建线程局部变量 tLocaltx
public
static
final
ThreadLocal tLocaltx
=
new
ThreadLocal();
//
取得session
public
static
Session currentSession()
{
//
从线程变量tLocalsess中,取得当前session
Session session
=
(Session) tLocalsess.get();
//
判断session是否为空,如果为空,将创建一个session,并付给线程变量tLocalsess
try
{
if
(session
==
null
)
{
session
=
openSession();
tLocalsess.set(session);
}
}
catch
(HibernateException e)
{
throw
new
InfrastructureException(e);
}
return
session;
}
//
关闭当前session
public
static
void
closeSession()
{
//
从线程变量tLocalsess中,取得当前session
Session session
=
(Session) tLocalsess.get();
//
设置线程变量tLocalsess为空
tLocalsess.set(
null
);
try
{
//
关闭session
if
(session
!=
null
&&
session.isOpen())
{
session.close();
}
}
catch
(HibernateException e)
{
throw
new
InfrastructureException(e);
}
}
//
事物处理
public
static
void
beginTransaction()
{
//
从线程变量tLocaltx中取得事物管理对象Transaction
Transaction tx
=
(Transaction) tLocaltx.get();
try
{
//
如果为空就从session中创建一个tx
if
(tx
==
null
)
{
tx
=
currentSession().beginTransaction();
tLocaltx.set(tx);
}
}
catch
(HibernateException e)
{
throw
new
InfrastructureException(e);
}
}
//
提交事物
public
static
void
commitTransaction()
{
//
取得事物
Transaction tx
=
(Transaction) tLocaltx.get();
try
{
//
如果不为空就提交
if
(tx
!=
null
&&
!
tx.wasCommitted()
&&
!
tx.wasRolledBack())
tx.commit();
tLocaltx.set(
null
);
}
catch
(HibernateException e)
{
throw
new
InfrastructureException(e);
}
}
//
事物回滚
public
static
void
rollbackTransaction()
{
//
取得tx事物
Transaction tx
=
(Transaction) tLocaltx.get();
try
{
//
将变量清空
tLocaltx.set(
null
);
if
(tx
!=
null
&&
!
tx.wasCommitted()
&&
!
tx.wasRolledBack())
{
//
事物回滚
tx.rollback();
}
}
catch
(HibernateException e)
{
throw
new
InfrastructureException(e);
}
}
//
取得session
private
static
Session openSession()
throws
HibernateException
{
return
getSessionFactory
().openSession();
}
//
取得sessionFactory
private
static
SessionFactory
getSessionFactory
()
throws
HibernateException
{
return
SingletonSessionFactory.getInstance();
}
}
filter的代码:
public
class
HibernateSessionCloser
implements
Filter
{
protected
FilterConfig filterConfig
=
null
;
public
void
init(FilterConfig filterConfig)
throws
ServletException
{
this
.filterConfig
=
filterConfig;
}
public
void
destroy()
{
this
.filterConfig
=
null
;
}
public
void
doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws
IOException, ServletException
{
try
{
chain.doFilter(request, response);
}
finally
{
try
{
HibernateSessionUtil.commitTransaction();
}
catch
(InfrastructureException e)
{
HibernateSessionUtil.rollbackTransaction();
}
finally
{
HibernateSessionUtil.closeSession();
}
}
}
}
然后在web.xml配置filter就可以使用了.
posted on 2008-05-18 20:36
henry1451
阅读(623)
评论(0)
编辑
收藏
所属分类:
Hibernate技术
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
相关文章:
Hibernate的cache管理(转)
Hibernate多表关联
Hibernate使用criteria进行查询
Hibernate中session的管理
在Hibernate应用中如何处理批量更新和批量删除(转)