hb_s

本文详细介绍了FlushedOpenSessionInViewFilter的工作原理及其在单会话模式和延迟关闭模式下的操作流程。该过滤器通过确保在一个HTTP请求的生命周期内只使用一个Hibernate会话来提高应用程序的性能。
public class FlushedOpenSessionInViewFilter extends OpenSessionInViewFilter {
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
logger.debug("FIX ME!!!access FlushedOpenSessionInViewFilter");
SessionFactory sessionFactory = lookupSessionFactory(request);
Session session = null;
boolean participate = false;

if (isSingleSession()) {
// single session mode
logger.debug("FIX ME!!!Single Hibernate Session");
if (TransactionSynchronizationManager.hasResource(sessionFactory)) {
// Do not modify the Session: just set the participate flag.
try {
logger.debug("FIX ME!!!begin unbind sessionFactory");
TransactionSynchronizationManager
.unbindResource(sessionFactory);
logger.debug("FIX ME!!!end unbind sessionFactory");

if (TransactionSynchronizationManager.hasResource(lookupDataSource()))
{
logger.debug("FIX ME!!!begin unbind DataSource");
TransactionSynchronizationManager.unbindResource(lookupDataSource());
logger.debug("FIX ME!!!end unbind DataSource");
}

logger.debug("FIX ME!!!begin close hibernate session");
closeSession(session, sessionFactory);
logger.debug("FIX ME!!!end close hibernate session");
} catch (Exception e) {
logger.debug("FIX ME!!!unbind sessionFactory error",e);
}
}
logger.debug("FIX ME!!!begin opening single Hibernate session");
session = getSession(sessionFactory);
logger.debug("FIX ME!!!end opening single Hibernate session");

if (!TransactionSynchronizationManager.hasResource(sessionFactory)){
logger.debug("FIX ME!!!begin binding session");
TransactionSynchronizationManager.bindResource(sessionFactory,
new SessionHolder(session));
logger.debug("FIX ME!!!end binding session");
}
} else {
// deferred close mode
logger.debug("FIX ME!!!not single hibernate session");
if (SessionFactoryUtils.isDeferredCloseActive(sessionFactory)) {
// Do not modify deferred close: just set the participate flag.
participate = true;
} else {
SessionFactoryUtils.initDeferredClose(sessionFactory);
}
}

try {
logger.debug("FIX ME!!!Now filter in FlushedOpenSessionInViewFilter");
filterChain.doFilter(request, response);
logger.debug("FIX ME!!!FlushedOpenSessionInViewFilter filter OK! ");
}
finally {
logger.debug("FIX ME!!!FlushedOpenSessionInViewFilter clean session ");
if (!participate) {
if (isSingleSession()) {
// single session mode
try {
logger.debug("FIX ME!!!unbind sessionFactory in OpenSessionInViewFilter");
TransactionSynchronizationManager
.unbindResource(sessionFactory);

/*if (TransactionSynchronizationManager.hasResource(lookupDataSource()))
{
logger.debug("FIX ME!!!Unbind DataSource in OpenSessionInViewFilter");
TransactionSynchronizationManager.unbindResource(lookupDataSource());
}*/

logger.debug("FIX ME!!!Closing single Hibernate session in OpenSessionInViewFilter");
closeSession(session, sessionFactory);
} catch (Exception e) {
logger.debug("FIX ME!!!unbind sessionFactory error",e);
}
} else {
// deferred close mode
SessionFactoryUtils.processDeferredClose(sessionFactory);
}
}
logger.debug("FIX ME!!!FlushedOpenSessionInViewFilter END ");
}
}

protected void closeSession(Session arg0, SessionFactory arg1) {
arg0.flush();
super.closeSession(arg0, arg1);
}

protected DataSource lookupDataSource() {
String dataSourceBeanName = "dataSource";
WebApplicationContext wac =
WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext());
return (DataSource) wac.getBean(dataSourceBeanName, DataSource.class);
}
}
hb_card_data_info_t card_data_info_init[CONTROL_CENTER_ITEM_CNT] = { {HB_CARD_TYPE_CLOCK, "item_clock", NULL, STR_NULL, heap_page_clock_hand_init, heap_page_clock_hand_subscribe_cb,heap_page_clock_hand_unsubscribe_cb, 0, true}, #ifdef __WK_AI_ROBOT_V2__ {HB_CARD_TYPE_AI_ROBOT, APP_ID_AI_ROBOT, (lv_img_dsc_t*)APP_GET_IMG_FROM_APP(mainmenu, img_robot_v2), REPLACE_STRID_AI_ROBOT, hb_card_airobot_create, NULL,NULL, 1, true}, #endif {HB_CARD_TYPE_WEATHER, "Weather", (lv_img_dsc_t*)APP_GET_IMG_FROM_APP(mainmenu, img_weather), app_get_strid(key_weather, "Weather"), hb_card_weather_create, app_hb_weather_data_subscribe,app_hb_weather_data_unsubscribe, 2, true}, {HB_CARD_TYPE_ACTIVE_RECORD,"wk_Activity", (lv_img_dsc_t*)APP_GET_IMG_FROM_APP(mainmenu, img_todayActivity), app_get_strid(key_fitness_record, "Fitness record"), hb_card_active_record_create,NULL,NULL, 3,true}, {HB_CARD_TYPE_SLEEP, "Sleep", (lv_img_dsc_t*)APP_GET_IMG(img_sleep_moon), app_get_strid(key_sleep, "Sleep"), hb_card_sleep_create, NULL,NULL, 4, true}, {HB_CARD_TYPE_ALARM, "Alarm", (lv_img_dsc_t*)APP_GET_IMG_FROM_APP(mainmenu, img_alarm), app_get_strid(key_alarm, "Alarm"), hb_card_alarm_create, NULL,NULL, 5, true}, {HB_CARD_TYPE_COUNTDOWN, "Countdown", (lv_img_dsc_t*)APP_GET_IMG_FROM_APP(mainmenu, img_countdown), app_get_strid(key_timer, "Timer"), hb_card_countdown_create, NULL,NULL, 6, true}, {HB_CARD_TYPE_STOPWATCH, "Stopwatch", (lv_img_dsc_t*)APP_GET_IMG_FROM_APP(mainmenu, img_stopwatch), app_get_strid(key_stopwatch, "Stopwatch"), hb_card_stopwatch_create, NULL,NULL, 7, true}, {HB_CARD_TYPE_HISTORY_USEGE,"item_history", NULL, STR_NULL, heap_page_histroy_init,NULL,NULL, 8,true}, {HB_CARD_TYPE_ALLAPP_MENU, "item_end", NULL, STR_NULL, heap_page_all_menu_btn_init,NULL,NULL, 9,true}, }; 把这个数组添加到链表里面
08-23
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值