瘋狂
STANDING ON THE SHOULDERS OF GIANTS
posts - 481, comments - 486, trackbacks - 0, articles - 1
BlogJava
::
首頁
::
新隨筆
::
聯系
::
聚合
::
管理
hibernate,spring管理事務中(transaction,JDBC connection,Hibernate Session的使用研究)(一)
Posted on 2011-11-18 11:25
瘋狂
閱讀(18934)
評論(0)
編輯
收藏
所屬分類:
database
、
spring
、
hibernate
、
方法論
、
架構
、
讀代碼
如果單獨使用hibernate可參考上一篇文章
http://m.tkk7.com/freeman1984/archive/2011/08/04/355808.html
首先hibernate的Connection release mode有以下幾種:
1 after_statement 2 after_transaction 3 on_close 其中after_statement 用在jta中 ,
on_close 是3.1之前遺留的(也許是為spring留的-_-),也就是3.1之前默認是on_close ,但3.1之后默認如果單獨使用hibernate是after_transaction,
如果有第三方事務管理,就用第三方提供的默認值,spring就是默認使用了on_close。
在spring管理事務中我們看看系統啟動后默認使用的配置:
1,ransaction strategy: org.springframework.orm.hibernate3.SpringTransactionFactory使用spring事務策略
2,hibernate內部 Automatic session close at end of transaction: disabled 因為已經交給spring了
3 Connection release mode: auto 默認,也就是沒有配置hibernate.connection.release_mode的時候,但是這里有地方需要注意:也就是前面提到的使用第三方策略時的問題:看一下代碼:
String releaseModeName
=
PropertiesHelper.getString( Environment.RELEASE_CONNECTIONS, properties,
"
auto
"
);
log.info(
"
Connection release mode:
"
+
releaseModeName );
ConnectionReleaseMode releaseMode;
if
(
"
auto
"
.equals(releaseModeName) )
{
releaseMode
=
transactionFactory.getDefaultReleaseMode(); }
else
{
releaseMode
=
ConnectionReleaseMode.parse( releaseModeName );
if
( releaseMode
==
ConnectionReleaseMode.AFTER_STATEMENT
&&
!
connections.supportsAggressiveRelease() )
{
log.warn(
"
Overriding release mode as connection provider does not support 'after_statement'
"
);
releaseMode
=
ConnectionReleaseMode.AFTER_TRANSACTION;
}
}
其中紅色部分就是調用了spring提供的默認值,而spring的默認值:在jta和cmt中都默認使用的是after_statement
/** */
/**
* Sets connection release mode "on_close" as default.
* <p>This was the case for Hibernate 3.0; Hibernate 3.1 changed
* it to "auto" (i.e. "after_statement" or "after_transaction").
* However, for Spring's resource management (in particular for
* HibernateTransactionManager), "on_close" is the better default.
*/
public
ConnectionReleaseMode getDefaultReleaseMode()
{
return
ConnectionReleaseMode.ON_CLOSE;
}
而spring為什么要使用on_close ,而不是用after_transaction ,我們想想opensessioninview的原理也許能明白,session在view成還要使用,所以不能再transactio
n使用完后關閉JDBC connection,必須要在session之后,所以要使用on
_close
(
也就是在on session(flush.auto,或者flush.Eagerly) 關閉)。這種情況hibernate內部還會在spring關閉JDBC connection后提示(費解,因為after transaction之后session沒有關閉,但是 Connection release mode配置的是on_close,session的關閉和 Connection 的關閉都由spring來管理,hibernate就不知道了),所以hibernate有好的提示如下(其實session,已經關閉。當然隨著session的關閉jdbc鏈接釋放回連接池):
transaction completed on session with on_close connection release mode; be sure to cl
ose the session to release JDBC resources!,
。當然我們也可以使用after_transaction ,這種情況對使用編程式事務非常適用。
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關文章:
oracle 索引字段包含date類型,使用spring jdbc更新時不走索引,而是走table access full的問題
(轉)Oracle數據庫如何授權收費(Database Licensing)
ORA-06548錯誤
ora-01031:insufficient privileges
dbcp重連(轉)
11g oracle 用戶密碼過期問題
ERROR 1049 (42000): Unknown database 'root' 處理
mysql 1130 錯誤 處理
oracle ORA-39212異常
Spring jdbc(java類型和oracle類型的轉換)
Powered by:
BlogJava
Copyright © 瘋狂
日歷
<
2011年11月
>
日
一
二
三
四
五
六
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
8
9
10
公告
公眾號:
QQjava交流群:
51374316
留言簿
(11)
給我留言
查看公開留言
查看私人留言
隨筆分類
all 生活雜談(16)
android(18)
apache項目(20)
chart(1)
concurrent(5)
database(70)
dwr(3)
flex(6)
hibernate(25)
java (135)
javafx(2)
javascript
java安全(8)
java性能(19)
jbpm(1)
jquery(4)
linux(17)
lucene(1)
netty(3)
nginx(1)
others(2)
questions(31)
questions_hander(28)
spring(32)
struts(9)
swing
UML(2)
unix(13)
web(45)
webservice(9)
xml(5)
敏捷(6)
方法論(28)
架構(21)
測試(1)
緩存
網絡通訊(9)
讀代碼(6)
項目管理(19)
相冊
我的相冊
搜索
積分與排名
積分 - 2843961
排名 - 2
最新隨筆
1.? 后續內容請移步公眾號“duomi88”
2.?Netty百萬級推送服務(轉)
3.?Netty 概述(轉)
4.?Netty優雅退出機制和原理(轉)
5.?使用JavaMail SearchTerm 收取郵件
6.?JAVA Thread Dump 分析綜述
7.?oracle 索引字段包含date類型,使用spring jdbc更新時不走索引,而是走table access full的問題
8.?FTP主動模式和被動模式的比較(轉載)
9.?關于java RMI在多網卡下(或者啟動360,百度,騰訊等wifi共享下)無法連接問題(java.rmi.ConnectException: Connection refused to host: xx)
10.?(轉)Oracle數據庫如何授權收費(Database Licensing)
11.? 成功的 Web 應用系統性能測試 (轉載)
12.?It is indirectly referenced from required .class file異常
13.?(轉)svn cleanup failed–previous operation has not finished; run cleanup if it was interrupted
14.?automation服務器不能創建對象 解決辦法
15.?ERROR: transport error 202: gethostbyname: unknown host 解決辦法
16.?JavaScript 跨瀏覽器事件處理(轉)
17.?函數聲明 VS 函數表達式(轉)
18.?ORA-06548錯誤
19.?項目規劃與管理記錄2
20.?tmpFile.renameTo(classFile) failed
21.?redhat6.4 64位安裝rlwrap
22.?ora-01031:insufficient privileges
23.?mysql遠程連接問題 Access denied for user 'root'@' ip ' (using password: YES)
24.?dbcp重連(轉)
25.?解決Vmware Workstation上安裝Linux系統不能SSH遠程連接的問題
26.?URL最大長度限制(轉)
27.?用MyEclipse測試發送email時報java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream
28.?我應該采用哪一種 WSDL 樣式?(轉載)
29.?linux 掛載ntfs usb 出現mount: unknown filesystem type 'ntfs'
30.?11g oracle 用戶密碼過期問題
最新評論
1.?re: Oracle物化視圖創建全過程(轉)
評論內容較長,點擊標題查看
--ya
2.?re: Oracle物化視圖創建全過程(轉)
評論內容較長,點擊標題查看
--ya
3.?re: 11g oracle 用戶密碼過期問題
問問
--是是是
4.?re: mysql遠程連接問題 Access denied for user 'root'@' ip ' (using password: YES)
asdfsadf
--asdf
5.?re: struts(il8n)實現國際化的一個例子
在啥地方
--正常
主站蜘蛛池模板:
久久受www免费人成_看片中文
|
精品亚洲成在人线AV无码
|
色综合久久精品亚洲国产
|
成人网站免费观看
|
在线观看亚洲AV日韩A∨
|
最近免费中文字幕视频高清在线看
|
亚洲国产成人久久精品动漫
|
18禁超污无遮挡无码免费网站
|
亚洲人成图片小说网站
|
99热在线日韩精品免费
|
亚洲精品乱码久久久久久蜜桃不卡
|
五月天婷婷精品免费视频
|
久久亚洲中文字幕精品一区
|
国产精品黄页免费高清在线观看
|
国产亚洲精品无码专区
|
无码中文字幕av免费放dvd
|
亚洲精品高清国产麻豆专区
|
91精品免费国产高清在线
|
亚洲欧美aⅴ在线资源
|
午夜亚洲国产成人不卡在线
|
久久免费视频一区
|
91亚洲自偷手机在线观看
|
女人张开腿等男人桶免费视频
|
久久久久久亚洲精品
|
性xxxxx免费视频播放
|
国产产在线精品亚洲AAVV
|
国产gv天堂亚洲国产gv刚刚碰
|
无码国产精品一区二区免费16
|
亚洲三级中文字幕
|
免费一级大黄特色大片
|
日本不卡免费新一区二区三区
|
91嫩草亚洲精品
|
亚洲 国产 图片
|
亚洲免费闲人蜜桃
|
免费无毒a网站在线观看
|
亚洲AV日韩AV永久无码免下载
|
精品国产污污免费网站aⅴ
|
美女视频黄.免费网址
|
亚洲视频免费观看
|
免费在线精品视频
|
9420免费高清在线视频
|