程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> openSessionInView的使用原理及性能分析

openSessionInView的使用原理及性能分析

編輯:C++入門知識

openSessionInView的使用原理及性能分析


看到好多項目中用到了openSessionInView,這樣的做法無非是開發方便,可以在JSP頁面中操作數據庫層方面的業務。下邊說下openSessionInView的用法及性能問題。

使用:

1、增加一個Filter,該Filter用來控制事務及數據庫的連接管理,代碼如下:

SessionFactory sessionFactory = lookupSessionFactory(request);
Session session = null;
boolean participate = false;

if (isSingleSession()) {
	// single session mode
	if (TransactionSynchronizationManager.hasResource(sessionFactory)) {
	// Do not modify the Session: just set the participate flag.
	participate = true;
       }	else {
	logger.debug("Opening single Hibernate Session in OpenSessionInViewFilter");
	session = getSession(sessionFactory);
	TransactionSynchronizationManager.bindResource(sessionFactory, new SessionHolder(session));
	}
} else {
	// deferred close mode
	if (SessionFactoryUtils.isDeferredCloseActive(sessionFactory)) {
// Do not modify deferred close: just set the participate flag.
	participate = true;
    } else {
	SessionFactoryUtils.initDeferredClose(sessionFactory);
    }
}

try {
	filterChain.doFilter(request, response);
} finally {
	if (!participate) {
           	if (isSingleSession()) {
	         	// single session mode
		TransactionSynchronizationManager.unbindResource(sessionFactory);
		logger.debug("Closing single Hibernate Session in OpenSessionInViewFilter");
		closeSession(session, sessionFactory);
	}else {
		// deferred close mode
		SessionFactoryUtils.processDeferredClose(sessionFactory);
	}
}
}
當前代碼中只是個例子,具體需要參考自己項目中的實際情況(spring配置,hibernate配置等)
2、在web.xml中增加該Filter的配置信息


	OpenSessionInView
	com....OpenSessionInView


	OpenSessionInView
	/*

3、在具體的Jsp頁面中取SESSION操作數據



用法到這裡就結束了,下邊我們來簡單討論下性能方面的問題

其實大家根據上邊的配置就可以想到:對於配置了Filter的處理,每次都會攔截到一個請求,在後台處理之前就會開啟一個事物並打開一個數據庫連接(線程安全的),後台處理完成後會關閉當前的連接。攔截到所有的請求都這麼做,大家覺得opensessioninview的方式性能會好到哪去呢?(如果是匹配某些請求,效果會好那麼一點)

畫了張opensessioninview的簡單原理圖,有點簡陋,不喜勿噴:


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved