多个进程第一次进来调用HibernateSessionFactory 的getSession() 会报错,原因是多次调用rebuildSessionFactory。建议在启动服务是首先ebuildSessionFactory。
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.cfg.Configuration;
/**
* Configures and provides access to Hibernate sessions, tied to the
* current thread of execution. Follows the Thread Local Session
* pattern, see {@link http://hibernate.org/42.html }.
*/
public class HibernateSessionFactory {
/**
* Location of hibernate.cfg.xml file.
* Location should be on the classpath as Hibernate uses
* #resourceAsStream style lookup for its configuration file.
* The default classpath location of the hibernate config file is
* in the default package. Use #setConfigFile() to update
* the location of the configuration file for the current session.
*/
private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
private static Configuration configuration = new Configuration();
private static org.hibernate.SessionFactory sessionFactory;
private static String configFile = CONFIG_FILE_LOCATION;
private HibernateSessionFactory() {
}
/**
* Returns the ThreadLocal Session instance. Lazy initialize
* the <code>SessionFactory</code> if needed.
*
* @return Session
* @throws HibernateException
*/
public static Session getSession() throws HibernateException {
Session session = (Session) threadLocal.get();
if (session == null || !session.isOpen()) {
if (sessionFactory == null) {
rebuildSessionFactory();
}
session = (sessionFactory != null) ? sessionFactory.openSession()
: null;
threadLocal.set(session);
}
return session;
}
/**
* Rebuild hibernate session factory
*
*/
public static void rebuildSessionFactory() {
try {
configuration.configure(configFile);
sessionFactory = configuration.buildSessionFactory();
} catch (Exception e) {
System.err
.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
}
/**
* Close the single hibernate session instance.
*
* @throws HibernateException
*/
public static void closeSession() throws HibernateException {
Session session = (Session) threadLocal.get();
threadLocal.set(null);
if (session != null) {
session.close();
}
}
/**
* return session factory
*
*/
public static org.hibernate.SessionFactory getSessionFactory() {
return sessionFactory;
}
/**
* return session factory
*
* session factory will be rebuilded in the next call
*/
public static void setConfigFile(String configFile) {
HibernateSessionFactory.configFile = configFile;
sessionFactory = null;
}
/**
* return hibernate configuration
*
*/
public static Configuration getConfiguration() {
return configuration;
}
}
分享到:
相关推荐
这个"jsf+spring+hinernate实例"是将这三个强大的技术集成在一起,构建了一个完整的Web应用程序。首先,我们需要理解这三者之间的关系:JSF负责处理用户的请求和展示数据,Spring则在后台管理业务逻辑和持久化层,而...
Hibernate是一个强大的Java库,用于对象关系映射(ORM),它简化了在Java应用程序中操作数据库的过程。ORM允许开发者使用面向对象的编程模型来处理数据库,而无需直接编写SQL语句。下面将详细介绍Hibernate所需的jar...
SSH(Struts2、Spring3、Hibernate4)是Java Web开发中的一个经典组合,用于构建高效、可维护的Web应用程序。这个压缩包包含了SSH框架集成的相关资料,让我们逐一解析其中的知识点。 首先,Struts2是MVC(Model-...
### Hibernate二级缓存配置详解 #### 一、概述 Hibernate 是一款开源的对象关系映射 (ORM) 框架,它极大地简化了 Java 应用程序与数据库之间的交互过程。在实际开发过程中,为了提高应用性能,我们经常需要对查询...
在这个"精通J2EE Eclipse Struts Hinernate Spring 整合应用案例01"中,我们很可能会学习到如何在Eclipse环境下配置和集成这四大技术。首先,我们需要设置Eclipse的J2EE开发环境,安装相应的插件,比如Spring Tools ...
这“通J2EE Eclipse Struts Hinernate Spring 整合应用案例02”文件很可能是详细讲解如何将这四个关键组件整合到一起的教程或项目实例。通过Eclipse开发环境,开发者可以创建并管理这些框架的工程,利用Struts处理...
Hinernate 架包 Hinernate 架包 Hinernate 架包 Hinernate 架包 Hinernate 架包
在IT行业中,SSH(Spring、Struts2、Hibernate)是一个常见的企业级应用开发框架组合,被誉为"Spring4+Struts2+Hibernate4 全注解框架"。SSH框架结合了Spring的强大依赖注入(DI)和面向切面编程(AOP),Struts2的...
CRM客户关系管理系统是一种用于管理企业与现有和潜在客户之间交互的软件工具。它帮助企业收集、组织、分析和利用关于客户的信息,以优化销售、市场营销和服务流程。... SQL Server 2005是微软公司推出的数据库管理系统...
Hibernate是一个开源的对象关系映射(ORM)框架,它允许Java开发者在处理数据库时采用面向对象的方式,极大地简化了数据操作。O'Reilly是一家知名的出版机构,以其技术书籍和参考资料著称,他们对Hibernate源代码...
在本项目中,我们主要探讨的是使用Hibernate框架来开发一个租房系统。Hibernate是一个强大的Java对象关系映射(ORM)框架,它简化了数据库操作,使开发者可以更专注于业务逻辑而不是繁琐的数据访问层代码。...
在Java企业级开发中,Hibernate是一个非常流行的持久化框架,它简化了数据库操作,通过对象关系映射(ORM)技术将数据库记录与Java对象进行关联。为了使用Hibernate框架,我们需要在项目中导入一系列的jar包,这些...
在IT行业中,三层架构是一种常见的软件设计模式,它将应用程序分为三个主要部分:表现层(Presentation Layer)、业务逻辑层(Business Logic Layer)和数据访问层(Data Access Layer)。这种架构有助于提高代码的...
在本课程"使用Hibernate开发租房系统2"中,我们将深入探讨如何利用Hibernate这一强大的Java对象关系映射(ORM)框架来构建一个租房管理系统的后端部分。北大青鸟ACCP6.0 Y2 JAVA方向的这门课程旨在帮助学生掌握实际...
【标题】:“Hibernate + Struts 实现的邮箱系统与 MSSQLServer 数据库集成” 这个项目是基于 Hibernate 和 Struts 框架构建的一个未完成的邮箱系统,它着重于使用这两种技术来处理业务逻辑和视图展示。...
在本项目中,我们主要探讨如何使用Hibernate框架来开发一个租房系统,并且专注于优化区域(区)和街道(街道)之间的关联关系。标题为“Hibernate开发租房系统2 源码”,表明这是一个关于使用Hibernate进行实际项目...
【标题】:“Hibernate 映射文件自动生成” 在Java开发中,Hibernate是一个广泛使用的对象关系映射(ORM)框架,它极大地简化了数据库操作。Hibernate通过XML或注解方式将Java类与数据库表进行映射,使得开发者可以...
validate-spring-boot-starterlatest=1.2.0中央仓库 maven <dependency> <groupId>...
SSH框架,全称为Struts2、Hibernate和Spring的组合,是一种经典的Java web开发框架,用于构建高效、可扩展的企业级应用程序。在这个配置中,Struts2作为MVC(Model-View-Controller)架构的实现,负责处理用户请求并...
《Struts2SpringHibernate人力资源管理系统详解》 在Java Web开发领域,Struts2、Spring和Hibernate这三大框架的整合应用是构建复杂业务系统的常见选择。本文将深入探讨以"Struts2SpringHibernate人力资源管理系统....