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 中session問題Session
- 請教bang老師關於自定義classloader的一些問題
- 請教bang老師:對於java,javaee未來的疑惑?Java
- 請教banq老師一個repository的問題
- 請教彭老師:開發工具使用的問題
- bang 大哥請教一下spring的AOPSpring
- 請教彭老師關於jdbc的問題,謝謝!JDBC
- 向banq老師請教一組架構問題架構
- bang老師請一定要看我的這個問題 關於main方法的AI
- Hibernate 資料同步問題請教
- hibernate查詢的問題,請高手賜教!
- 請教老師關於 高併發插入資料問題
- 請教一下介面布問題
- 請教tomcat session丟失問題TomcatSession
- 請教banq問題,關於hibernate的jdbc的JDBC
- Hibernate的session問題Session
- 初學j2ee,請教各位老師關於datasource問題
- hibernate中的no session問題Session
- bang,請教qmail安裝配置AI
- 請教一個有關bibernate的session的問題Session
- 請教板橋老師關於領域驅動開發設計問題
- 請教一個在Session Bean中使用JDBC的問題SessionBeanJDBC
- 請教一個關於hibernate對映oracle的問題Oracle
- 請教bang 關於開發工具
- 請問老師一個關於命令模式的問題模式
- 向banq老師請教:ddd中的值物件物件
- 遇到一個關於session id的問題,向大家請教!Session
- [請教] Spring + Hibernate 的 dynamic-update(動態更新)問題Spring
- 彭老師:您好!請教個在jdonframework中關於查詢list中 KEY的問題???Framework
- benq,你好!框架中有關 getDataSource()問題請教一下ENQ框架
- Hibernate中的Session快取問題Session快取
- 請教bang--關於設計模式設計模式
- 對FlyWeight(享元)模式的一點看法,請bang老師給予指正模式
- 請教phpword問題PHP
- 請教SAXParseException問題Exception
- 請教:NullPointerException 問題NullException
- 想請教一下各位一個介面寫法問題
- 請bang及各位高手指點一下