`
blueyanghualong
  • 浏览: 227267 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

hibernate session统一管理的配置

阅读更多

 

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.error("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! ");
		} catch (Exception e) {
			logger.error("FIX ME!!!FlushedOpenSessionInViewFilter error",e);
		}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);
	}
}

 <filter>

		<filter-name>hibernateFilter</filter-name>
		<filter-class>
			cn.com.superv.netmessage.util.FlushedOpenSessionInViewFilter
		</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>hibernateFilter</filter-name>
		<url-pattern>*.do</url-pattern>
	</filter-mapping>
	<filter-mapping>
		<filter-name>hibernateFilter</filter-name>
		<url-pattern>/dwr/*</url-pattern>
	</filter-mapping>
分享到:
评论

相关推荐

    Hibernate可选配置大全

    ### Hibernate可选配置详解 #### 一、Hibernate配置项概览 Hibernate作为一款优秀的Java持久层框架,提供了丰富的配置选项,以适应不同场景下的需求。本文档将详细解析Hibernate的各种可选配置,帮助开发者深入...

    Spring+Struts+Hibernate比较详细的整合配置方案

    【Spring+Struts+Hibernate整合配置方案】 Spring、Struts和Hibernate是Java Web开发中三大核心框架,它们各自负责不同的职责:Spring作为依赖注入容器和面向切面编程(AOP)框架,提供应用的结构和事务管理;Struts...

    hibernate与spring整合demo

    3. 配置简化:Spring可以统一管理Hibernate的SessionFactory和Session,简化配置文件。 4. AOP集成:Spring的AOP可以与Hibernate的事务管理结合,提供更灵活的事务策略。 四、整合步骤 1. 引入依赖:在项目中添加...

    hibernate配置参数详解

    这些配置项指定了默认的数据库模式和目录,便于统一指定表的位置。 5. **`hibernate.session_factory_name`**: SessionFactory的JNDI名称。 ```properties hibernate.session_factory_name=jndi/composite/name ...

    ssh框架整合详细步骤(spring+struts2+hibernate)

    - 在`src`目录下新建一个名为`org.superman.ssh.action`的包,用于存放所有的Action类,并创建BaseAction作为所有具体Action类的基类,用于统一管理Session、Request等对象。 ##### 第二部分:Struts2与Spring进行...

    hibernate的配置文件

    8. **jta-1.1.jar**:Java Transaction API(JTA)是Java平台的一部分,用于处理分布式事务,Hibernate支持JTA以实现事务管理。 9. **slf4j-nop-1.5.2.jar**:SLF4J的一个实现,称为“NOP”(无操作),在没有具体...

    hibernate所有开发包

    1. Hibernate支持编程式事务管理和声明式事务管理,可以配合Spring等框架实现事务的统一管理。 七、Annotation使用 1. Annotation配置比XML配置更简洁,直接在实体类上定义属性,无需编写额外的映射文件。 2. 使用...

    hibernate的dtd 包含hibernate.properties

    DTD的存在确保了所有使用Hibernate的开发者遵循统一的配置标准,从而提高了代码的可读性和可维护性。 再来说说`hibernate-mapping-3.0.dtd`,它是Hibernate映射文件的DTD,主要用于定义如何将Java类映射到数据库表...

    Hibernate所需包及配置文件

    除了上述的jar包和配置文件外,学习Hibernate还需要理解其主要概念,如Session、Transaction、Query、Criteria API等。提供的学习PPT可能涵盖这些内容,帮助初学者快速掌握Hibernate的基本用法和最佳实践。 总之,...

    Hibernate原理与配置快速入门 pdf

    ### Hibernate原理与配置快速入门知识点解析 #### 一、Hibernate简介 - **概念**:Hibernate是一种面向Java的应用框架,主要用于简化数据库操作,提供了一种对象关系映射(Object Relational Mapping, ORM)的方式...

    封装hibernate统一操作接口

    5. 配置并初始化Hibernate,例如使用Spring框架进行管理。 六、 示例 ```java public interface UserRepository extends JpaRepository, Long&gt; { User findByUsername(String username); } @Service public class...

    Hibernate开发指南.pdf

    - **Spring框架与Hibernate的整合**: Spring提供了一种简单的机制来管理和配置Hibernate。 - **优点**: - 事务管理统一。 - 自动化Bean装配。 - 方便的异常转换。 #### 十七、总结 本书不仅介绍了Hibernate的...

    hibernate框架完整包

    SLF4J(Simple Logging Facade for Java)是一个日志门面,它为各种日志API提供一个简单统一的接口,使得最终的用户能够在部署的时候配置自己希望的日志框架。 4. **DOM4J**:DOM4J是一个强大的Java XML API,它...

    struts2、hibernate和spring框架整合所需的jar以及配置文档

    Spring还集成了其他框架,包括Struts2和Hibernate,提供了统一的事务管理策略,使得在多个框架间协调工作变得更加简单。 在SSH整合过程中,你需要以下关键的jar包: 1. **Struts2** 相关的jar:包括`struts2-core....

    hibernate 常用核心包

    例如,`org.hibernate.Session` 类是与数据库交互的基本接口,`org.hibernate.cfg.Configuration` 类用于配置 Hibernate 实例,而 `org.hibernate.query.Query` 和 `org.hibernate Criteria` 接口则用于执行 HQL...

    Spring Hibernate 事务处理 详细说明

    Spring通过透明地管理Hibernate的Session,确保事务的正确性。这种模式被称为JPA(Java Persistence API)的“容器管理持久化”(CMT)。 2. **SessionFactory和Session:**SessionFactory是线程安全的,用于创建...

    浅谈Spring+Hibernate整合(共16页).doc

    声明式事务管理则是通过在配置文件中声明事务规则,使用 AOP 切面进行事务控制,适用于大部分情况,因为它可以实现事务的统一管理和隔离。 Spring 和 Hibernate 整合的关键步骤包括: 1. 添加 Spring 和 Hibernate ...

    Spring整合HIbernate

    2. **事务管理**:Spring提供了声明式事务管理,可以无缝集成到Hibernate的Session中,使得事务处理更加简单、统一。 3. **DAO(Data Access Object)抽象**:Spring的HibernateTemplate和HibernateDaoSupport为...

    Hibernate的事务处理机制和flush方法的用法.docx

    SessionFactory是配置和初始化的Hibernate环境,而Session是与数据库交互的主要接口,它维护了对象的状态和缓存。在Hibernate中,事务通常是通过Session对象的Transaction接口进行管理的。当开始一个事务(`begin...

Global site tag (gtag.js) - Google Analytics