- 浏览: 543318 次
- 性别:
- 来自: 湖南娄底
文章分类
- 全部博客 (252)
- C#资料 (0)
- java资料 (22)
- 数据库资料 (0)
- Java :开发中遇到的问题 (4)
- 书写属于我的人生 (6)
- spring (6)
- hibernate (16)
- struts (17)
- SSH (5)
- Linux操作系统 (1)
- Ext (5)
- Jquery (9)
- Tomcat部署出错 (2)
- xml (5)
- JSON (5)
- javascript 专题 (5)
- 开发环境配置 (2)
- web 开发 (27)
- Eclipse (7)
- Integration (1)
- 解决方案搜罗 (7)
- 网站收藏 (8)
- 测试框架 (1)
- iframe 专题 (6)
- JSTL (2)
- 各种插件收集 (2)
- 权限设计模型探讨 (1)
- DWR (1)
- log4j (3)
- java (11)
- java 格式化 (1)
- 软件工程 (2)
- 乱码专题 (1)
- UML (4)
- java 设计模式 篇 (1)
- 用法收集 (0)
- sourceforge apache solutions (2)
- Struts2 + JPA + Spring 开发 (1)
- 自定义工具箱 (0)
- IDE (4)
- opencms (1)
- jeecms (1)
- ant (0)
- maven (2)
- 数据库连接池 (0)
- spring MVC (0)
- android (1)
- web-server (1)
- iphone-开发环境 (1)
- iphone-软件开发 (6)
- iPhone-软件设计 (1)
- iphone-应用 (3)
- iPhone-设置 (2)
- iphone-软件开发-设计模式篇 (0)
- iphone-软件开发-OC基础 (9)
- iphone-软件开发- UI篇 (9)
- iphone-软件开发-工具类篇 (1)
- iphone-软件开发-第三方篇 (0)
- iphone-软件开发-特效篇 (2)
- iphone-软件开发-动画篇 (1)
- oracle (1)
- Java-Security (0)
- Three20 UI (1)
- IOS-HOW-TO-专题 (1)
- Mark-Develope Issues (1)
- iphone-软件开发- 资料参考篇 (1)
- C 语言-基本语法 (0)
- Java Servlet (2)
- Eclipse optimization (1)
- IOS Basic (0)
- ecl (0)
- FRONT-HTML (0)
- FRONT-JS (0)
- PHP (0)
最新评论
-
qq_29862421:
[[color=brown]color=yellow][url ...
java 上传图片同时获得图片的宽和高 -
hhb19900618:
NSString <==> NSNumber 之前 ...
OC 常用数据类型之间的转换 -
baohuan_love:
果然能解决问题,感谢分享
Tomcat Error Page配置 与 Error Page在IE下不能转发的问题 -
唐丽梅6313:
很细致。。
键盘样式风格有关设置-iOS开发 -
olived:
哥哥,为什么我的没有破解成功,总是提示许可文件丢失!!QQ:3 ...
[软件测试解决方案] soapUI 4.0.1破解方法
在HibernateSessionFactory类中,我们可以仿照Session的管理方式来实现对Transaction事务的管理!
package com.hibernate;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class HibernateSessionFactory {
private static String CONFIG_FILE_LOCATION = "/com/hibernate/hibernate.cfg.xml";
/**
*
* 程序在运行过程中会启动多个线程, threadLocal可以在单个线程内实现线程内部共享数据---使用单例模式
*
*/
private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
/**
* 使用ThreadLocal实现事务的管理
*
*/
private static final ThreadLocal<Transaction> txThreadLocal = new ThreadLocal<Transaction>();
//配置文件节点<hibernate-configuration>对应读取的对象
private static Configuration configuration = new Configuration();
//配置文件<session-factory>节点对应读取的对象
private static org.hibernate.SessionFactory sessionFactory;
//配置文件hibernate.cfg.xml配置文件所在的路径
private static String configFile = CONFIG_FILE_LOCATION;
//静态块,会早于构造函数执行
static {
try {
configuration.configure(configFile);
sessionFactory = configuration.buildSessionFactory();
} catch (Exception e) {
System.err.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
}
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;
}
public static void beginTransaction() throws HibernateException {
//取得已经绑定的事务
Transaction tx = (Transaction) txThreadLocal.get();
//如果事务为空,或已经提交或已经回滚,则开启一个新的事务
if (tx == null || tx.wasCommitted() || tx.wasRolledBack()) {
tx = getSession().beginTransaction();
//把事务绑定的本地线程中,供提交会回滚使用
txThreadLocal.set(tx);
}
}
public static void commitTransaction() throws HibernateException {
//取得已经绑定的事务
Transaction tx = (Transaction) txThreadLocal.get();
//如果事务不等于空,并没有提交或回滚。则提交事务
if (tx != null && !tx.wasCommitted() && !tx.wasRolledBack()) {
tx.commit();
}
//清空当前线程事务,确保下个操作取得新的事务
txThreadLocal.set(null);
}
public static void rollbackTransaction() throws HibernateException {
Transaction tx = (Transaction) txThreadLocal.get();
if (tx != null && !tx.wasCommitted() && !tx.wasRolledBack()) {
tx.rollback();
}
txThreadLocal.set(null);
}
/**
* 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;
}
}
发表评论
-
detached entity passed to persist异常解决
2012-04-21 15:48 0病理特征:Caused by: org.hibernat ... -
hibernate中inverse作用
2012-04-07 20:52 0inverse常用于一对多双向关联关系中。 以Student ... -
hibernate Restrictions用法
2012-04-07 19:31 0方法 说明 Restricti ... -
QBC Hibernate 多表查询
2012-04-07 19:30 01.java 实体对象 Java代码 ... -
Hibernate继承映射-多态关联
2012-04-07 19:24 0把类之间的继承关系反 ... -
hibernate - 10.12. 使用元数据
2012-04-07 11:32 949Hibernate中有一个非常丰富的元级别(meta-leve ... -
Hibernate <property>配置
2012-04-07 10:34 1308<property name="name&qu ... -
Hibernate Tool: hbm2java or hbm2ddl
2012-04-01 18:30 1425Hibernate为了简化开发,给我们提供了四种工 具 ... -
Hibernate锁机制 悲观锁和乐观锁
2012-04-01 18:21 11391、Pessimistic Locking 悲观锁 ... -
hibernate一级缓存和二级缓存的区别
2012-04-01 17:09 761缓存是介于应用程序 ... -
Hibernate的Fetch
2012-03-17 22:55 019.1. 抓取策略(Fetching strategies ... -
hibernate 使用二级缓存
2012-03-15 22:04 0二级缓存: 二级缓存也称进程级的缓存或SessionF ... -
hibernate Isolation Level(事务隔离等级)
2011-12-25 14:33 1560hibernate Isolation Level(事务隔离等 ... -
Hibernate Criteria 多层次查询关联问题(转)
2011-12-22 21:52 1137轉載,收藏一下! http://terrencemai ... -
hibernate hql函数
2011-12-20 20:07 4462√通过 ⊙测试没结果 ... -
openSession() 与 getCurrentSession()
2011-09-17 18:04 10051 getCurrentSession创建的session会和 ... -
criteria进行分页查询
2010-11-10 01:33 1555public List findStockBySt ... -
hibernate HQL 模糊查询 3种方式
2010-11-10 01:01 1157hibernate HQL 模糊查询 3种方式 以下是 ... -
hibernate从数据库中读取出来的数据乱码的问题分析!
2010-10-19 22:26 3187最近在部署一个开源项目时,发现从数据库中读取出来的数据都乱码了 ... -
Hibernate常见问题集锦(2)
2010-10-17 22:17 9871。问题: 异常原因: 2010/10/17-22: ...
相关推荐
在Spring事务管理中,连接池与ThreadLocal结合,确保每个线程在事务内使用的是同一连接,避免了事务间的干扰。例如,`HikariCP`和`C3P0`等流行的连接池实现都支持与Spring事务管理的无缝集成。 在实际应用中,理解...
在这个小型简单练习中,我们看到如何结合c3p0数据源、ThreadLocal以及事务管理,来创建一个在MVC三层结构中实现互不干扰的转账操作。 首先,让我们深入了解`ThreadLocal`。ThreadLocal是Java提供的一个线程绑定变量...
本文将深入探讨ThreadLocal的使用以及Spring框架中的事务管理,这两个主题都是Java开发人员必须掌握的关键技能。 首先,让我们了解ThreadLocal。ThreadLocal是Java提供的一种线程绑定变量的工具类,它允许我们在一...
在Spring框架中,我们可以使用@Transactional注解来实现声明式事务管理,使得事务处理更加简洁和高效。 接下来,我们讨论ThreadLocal。ThreadLocal是Java提供的一种线程局部变量,它的每个线程都有自己的副本,互不...
Spring框架也支持使用ThreadLocal进行事务管理,比如使用`TransactionSynchronizationManager`类,它可以管理和协调事务同步,提供更高级别的事务控制。 通过上述方式,开发者可以利用ThreadLocal在Java Web环境中...
总的来说,结合JDBC的事务管理和ThreadLocal,我们可以在多线程环境中更好地实现数据库操作,确保数据的一致性,并提高代码的可复用性和安全性。通过使用ThreadLocal,我们可以创建线程安全的变量,使得每个线程都能...
在上述的描述和代码中,展示了一种使用ThreadLocal实现的简单事务管理策略,它主要用于处理数据库操作时的一致性。以下是对这个实现的详细解析: 1. **ThreadLocal的使用**: ThreadLocal是Java中的一个类,用于在...
3. **线程状态**:记录线程执行过程中的状态,例如事务管理、计数器等。 然而,使用`ThreadLocal`也需要注意一些问题: - **内存泄漏**:如果`ThreadLocal`没有被正确清理,当线程生命周期结束但引用仍然存在时,...
ThreadLocal自JDK 1.2起就存在,它不是一个线程,而是一种管理线程局部变量的机制。每个线程都有其独立的ThreadLocal变量副本,这样每个线程都可以独立地修改自己的副本而不影响其他线程。这有助于避免并发问题,...
在实际开发中,ThreadLocal常用于缓存线程相关的数据,如数据库连接、事务管理、请求上下文等。例如,数据库连接池通常会提供一个ThreadLocal的静态变量,使得每个线程都能快速获取到专属的数据库连接,提高并发性能...
- **线程安全的配置对象**:在多层架构中,如Spring框架中,可以使用ThreadLocal来存储线程相关的配置信息,如数据库连接、事务管理等,确保这些对象不会被其他线程访问。 - **HTTP请求上下文**:在Web应用中,可以...
在Java中,代理模式常用于动态代理,允许在运行时为对象绑定额外的行为,如AOP(面向切面编程)中的事务管理。 然后,我们转向ThreadLocal。ThreadLocal是Java中的一个线程局部变量,它为每个线程都提供了一个独立...
**线程局部变量(ThreadLocal)** 在Java编程中,`ThreadLocal`是...以上就是关于`ThreadLocal`及其内部类`ThreadLocalMap`的基础知识,它们在多线程编程中起到关键作用,帮助开发者实现高效、安全的线程局部变量管理。
此外,ThreadLocal 还有很多其他的应用场景,例如在事务管理、日志记录、会话管理等方面都可以使用 ThreadLocal 来实现线程局部变量的管理。 ThreadLocal 的应用非常广泛, Java 开发者应该掌握它来提高开发效率和...
8.Spring事务的同步机制:使用ThreadLocal变量来存储当前事务的上下文,实现事务的同步。 9.Spring事务的传播机制:使用传播行为来控制事务的传播,例如REQUIRED、REQUIRES_NEW、SUPPORTS等。 10.Spring事务的回滚...
在Spring中集成Atomikos,可以实现全局的分布式事务管理,确保在分布式环境下的数据一致性。 4. **配置多数据源** 在Spring的XML配置文件中,我们需要为每个数据源创建一个`AtomikosDataSourceBean`实例,并配置...
5. **事务管理**:在使用ThreadLocal的模式下,事务管理通常与Session绑定。每个线程内的操作在同一个Session中进行,方便控制事务边界。 6. **性能优化**:ThreadLocal提供了一种高效的Session管理方式,避免了...
ThreadLocal的实现原理是基于WeakHashMap,使用弱引用来保存线程的变量,这样可以避免内存泄露的问题。 ThreadLocal是一个非常重要的类,在多线程环境下,它可以提供线程本地变量,解决多线程间共享变量的问题,...
在JavaEE中,结合DBUtil和ThreadLocal实现如下: 1. 初始化DBUtil:在应用启动时,初始化DBUtil,配置数据库连接池,并创建ThreadLocal实例,将初始的数据库连接(或空值)放入ThreadLocal中。 2. 获取连接:当需要...