BANG老師: 請教一下Hibernate的session問題
我使用struts1.x + Hibernate3.X開發,不考慮用Spring
首先在Filter中建立和關閉session
public class HibernateFilter implements Filter {
//透過ThreadLocal來生成session
private static ThreadLocal hibernateHolder = new ThreadLocal();
//SessionFactory是--執行緒安全的
private static SessionFactory factory = null;
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
try {
//程式首先執行doFilter方法,繼續向下傳遞,避免程式在此停住
chain.doFilter(request, response);
} finally {
//結束session的生命,程式執行結束必經地
Session session = (Session)hibernateHolder.get();
if(session != null) {
if(session.isOpen()) {
session.close();
}
//ThreadLocal也要remove
hibernateHolder.remove();
}
}
}
public void init(FilterConfig config) throws ServletException {
//filter在Tomat啟動是隻執行一次,在此建立SessionFactory是最好的
try {
Configuration cfg = new Configuration().configure();
factory = cfg.buildSessionFactory();
System.out.println("--------SessionFactory---------");
} catch (Exception e) {
e.printStackTrace();
}
}
//返回session,而session是由SessionFactory建立的,SessionFactory是重量級的
//最好只建立一次
public static Session getSession() {
//首先要判斷當前的ThreadLocal中是否有Session的例項
Session session = (Session)hibernateHolder.get();
//有就取出,沒有就建立並放入ThreadLocal中後返回例項
if(session == null) {
session = factory.openSession();
hibernateHolder.set(session);
}
return session;
}
}
然後,在透過ThreadLocal得到session(session = HibernateFilter.getSession();)
1.那麼,假設有兩個客戶端,分別對同一資料進行都、寫操作,會不會引起髒讀?
2.如果併發訪問大時,同一session中的事務增多,該如何解決?
首先在Filter中建立和關閉session
public class HibernateFilter implements Filter {
//透過ThreadLocal來生成session
private static ThreadLocal hibernateHolder = new ThreadLocal();
//SessionFactory是--執行緒安全的
private static SessionFactory factory = null;
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
try {
//程式首先執行doFilter方法,繼續向下傳遞,避免程式在此停住
chain.doFilter(request, response);
} finally {
//結束session的生命,程式執行結束必經地
Session session = (Session)hibernateHolder.get();
if(session != null) {
if(session.isOpen()) {
session.close();
}
//ThreadLocal也要remove
hibernateHolder.remove();
}
}
}
public void init(FilterConfig config) throws ServletException {
//filter在Tomat啟動是隻執行一次,在此建立SessionFactory是最好的
try {
Configuration cfg = new Configuration().configure();
factory = cfg.buildSessionFactory();
System.out.println("--------SessionFactory---------");
} catch (Exception e) {
e.printStackTrace();
}
}
//返回session,而session是由SessionFactory建立的,SessionFactory是重量級的
//最好只建立一次
public static Session getSession() {
//首先要判斷當前的ThreadLocal中是否有Session的例項
Session session = (Session)hibernateHolder.get();
//有就取出,沒有就建立並放入ThreadLocal中後返回例項
if(session == null) {
session = factory.openSession();
hibernateHolder.set(session);
}
return session;
}
}
然後,在透過ThreadLocal得到session(session = HibernateFilter.getSession();)
1.那麼,假設有兩個客戶端,分別對同一資料進行都、寫操作,會不會引起髒讀?
2.如果併發訪問大時,同一session中的事務增多,該如何解決?
[該貼被admin於2009-02-25 18:44修改過]
相關文章
- hibernate中的no session問題Session
- 請教一下,UI 自動化選型問題UI
- 老師說不懂就要問,我有個疑惑想請教各位
- 請教phpword問題PHP
- 想請教一下各位一個介面寫法問題
- 請教Beego Router 問題Go
- 請教一個問題,
- 請教個問題執行 httprunner 遇到的問題HTTP
- 如何向大牛請教問題?
- Proxy Authorization Required 問題請教UI
- 請教 TensorFlow 安裝問題
- skywalking-agent 自定義外掛的幾個問題想請教一下
- 請教一個struct tag的問題Struct
- 請教一個go切片引用的問題Go
- 2018教師節送給的老師的祝福語 教師節祝福語大全
- 請教一個 python 包安裝的問題Python
- 請教一個演算法問題演算法
- [提問交流]求大神幫忙看一下,本人新手還在學習,遇到一個問題,想請教一下!!
- 請教一個切片遞迴賦值的問題遞迴賦值
- api 介面欄位規範的問題,請教大家API
- 有關theano配置問題想請教各位大佬
- 請教一個讓我這個菜雞不解的問題
- 有道精品課教師節專場,教師家族走出一名網課老師
- session共享問題???Session
- 請教一下 多欄位值如何排序?排序
- 後臺許可權設計問題,請教思路
- 請教各位一個關於websocket協議開發的問題Web協議
- Hibernate 一個更新問題的 討論
- 使用Hibernate、JPA、Lombok遇到的有趣問題Lombok
- 教師如何搭建成績查詢系統-Leo老師
- React如何解決fetch跨域請求時session失效問題React跨域Session
- Express專案中ajax請求session過期問題處理ExpressSession
- 請教您關於 Nginx 下多個 Laravel 專案的部署問題NginxLaravel
- vue前後端分離解決每次請求session都會變的問題Vue後端Session
- 請教各位大佬一個問題,flutter APP 怎麼抓包呢?FlutterAPP
- 最常見的求職面試問題:“請介紹一下你自己求職面試
- [20190116]rman的老問題.txt
- 請教一個關於不確定條件個數搜尋的問題
- 新人,請教一下各位大佬是怎麼找到自己的學習方向的?