- 浏览: 207399 次
文章分类
- 全部博客 (131)
- java (22)
- linux (10)
- php (6)
- css (1)
- english (2)
- delphi (7)
- javascript (js) (4)
- 生活 (1)
- sql (1)
- Hibernate (4)
- 面试题 (2)
- android (2)
- socket (1)
- ruby (4)
- jsp (1)
- ph (0)
- 分布式 性能调优 (1)
- 用Nginx (3)
- PHP集群 (1)
- 设计模式 (2)
- 关注 (1)
- 架构师 (2)
- 后台界面 (1)
- mina (1)
- rpc (1)
- 学习 (1)
- shell (4)
- shell 空格 (1)
- Symfony框架 (1)
- svn (2)
- swing (1)
- mysql centos (1)
- 汉字,中文 (1)
- url (1)
- 压缩图 (1)
- 缓存 大型网站 (1)
- linux netstat (1)
- ThreadLocal Connection 事务 (1)
- gwt (1)
- java jetty (1)
- 网站架构 (0)
- 网站架构 淘宝网 (1)
- php yii (1)
- java基础 SCJP (1)
- (1)
- 存储过程 (1)
- 平安PAFA架构 (1)
- ibm (1)
最新评论
-
geek87:
看来起很神奇,,,
在android的spinner中,实现取VALUE值和TEXT值。 -
changkunyang:
呵呵,这个方法不错,试过了,谢谢分享
在android的spinner中,实现取VALUE值和TEXT值。 -
王路喜:
第二种方法中要修改的文件类型是什么啊?我修改了TXT的编码为G ...
ubuntu下eclipse打开window下的java文件,注释内容为乱码,解决方法 -
jxqlovejava:
hashcode前部分,全部来自java核心技术卷1.
关于对象的equal方法和hashCode方法 -
lsf171028:
关于对象的equal方法和hashCode方法
终于运用ThreadLocal实现了Connection和Transaction的管理
http://www.cjsdn.net/post/print?bid=2&id=89152
测试用例(部分)通过
public void testBeginTransaction() throws TransactionException,SQLException {
Transaction tx = null;
try {
tx = ConnectionManager.beginTransaction();
assertEquals("aaa",findProduct16());
updateProduct16();
assertEquals("萝卜",findProduct16());
assertEquals("Alice Mutton",findProduct17());
updateProduct17();
//assertEquals("白菜",findProduct17());
tx.commit();
assertTrue(tx.wasCommitted());
/*
tx.commit();
assertTrue(tx.wasCommitted());
assertEquals("萝卜",findProduct16());
*/
/*
tx.rollback();
assertTrue(tx.wasRolledBack());
assertEquals("aaa",findProduct16());
assertEquals("Alice Mutton",findProduct17());
*/
} catch (TransactionException e) {
tx.rollback();
assertTrue(tx.wasRolledBack());
throw e;
} catch (SQLException e) {
tx.rollback();
assertTrue(tx.wasRolledBack());
//throw new TransactionException(e);
}
assertTrue(ConnectionManager.currentConnection().getAutoCommit());
}
更新了一下
dao.rar (780.49k)
2.Re:终于运用ThreadLocal实现了Connection和Transaction的管理 [Re: wes109] Copy to clipboard
Posted by: wes109
Posted on: 2004-04-23 13:13
主要的管理类
public class ConnectionManager {
private static final ThreadLocal connection = new ThreadLocal();
private static ConnectionFactory factory;
private static boolean initialized = false;
private static final Log log = LogFactory.getLog(ConnectionManager.class);
private ConnectionManager() {
super();
}
private synchronized static void initialize() {
try {
factory = new Configuration().configure().buildConnectionFactory();
} catch (ConfigureException e) {
log.fatal(e);
}
log.info("ConnectionManager initialize success");
initialized = true;
}
public static Connection currentConnection() throws SQLException {
if(!initialized) {
initialize();
}
Connection conn = (Connection)connection.get();
if(conn == null) {
conn = factory.openConnection();
connection.set(conn);
}
return conn;
}
public static void closeConnection() throws SQLException {
Connection conn = (Connection)connection.get();
connection.set(null);
if(conn != null) {
conn.close();
}
}
public static Transaction beginTransaction() throws TransactionException{
Connection conn = null;
try {
conn = currentConnection();
} catch (SQLException e) {
log.error("Can't get current connection with SQLException:",e);
throw new TransactionException("Begin tracsaction fail with SQLException:", e);
}
return new TransactionFactory().beginTransaction(conn);
}
}
http://www.cjsdn.net/post/print?bid=2&id=89152
测试用例(部分)通过
public void testBeginTransaction() throws TransactionException,SQLException {
Transaction tx = null;
try {
tx = ConnectionManager.beginTransaction();
assertEquals("aaa",findProduct16());
updateProduct16();
assertEquals("萝卜",findProduct16());
assertEquals("Alice Mutton",findProduct17());
updateProduct17();
//assertEquals("白菜",findProduct17());
tx.commit();
assertTrue(tx.wasCommitted());
/*
tx.commit();
assertTrue(tx.wasCommitted());
assertEquals("萝卜",findProduct16());
*/
/*
tx.rollback();
assertTrue(tx.wasRolledBack());
assertEquals("aaa",findProduct16());
assertEquals("Alice Mutton",findProduct17());
*/
} catch (TransactionException e) {
tx.rollback();
assertTrue(tx.wasRolledBack());
throw e;
} catch (SQLException e) {
tx.rollback();
assertTrue(tx.wasRolledBack());
//throw new TransactionException(e);
}
assertTrue(ConnectionManager.currentConnection().getAutoCommit());
}
更新了一下
dao.rar (780.49k)
2.Re:终于运用ThreadLocal实现了Connection和Transaction的管理 [Re: wes109] Copy to clipboard
Posted by: wes109
Posted on: 2004-04-23 13:13
主要的管理类
public class ConnectionManager {
private static final ThreadLocal connection = new ThreadLocal();
private static ConnectionFactory factory;
private static boolean initialized = false;
private static final Log log = LogFactory.getLog(ConnectionManager.class);
private ConnectionManager() {
super();
}
private synchronized static void initialize() {
try {
factory = new Configuration().configure().buildConnectionFactory();
} catch (ConfigureException e) {
log.fatal(e);
}
log.info("ConnectionManager initialize success");
initialized = true;
}
public static Connection currentConnection() throws SQLException {
if(!initialized) {
initialize();
}
Connection conn = (Connection)connection.get();
if(conn == null) {
conn = factory.openConnection();
connection.set(conn);
}
return conn;
}
public static void closeConnection() throws SQLException {
Connection conn = (Connection)connection.get();
connection.set(null);
if(conn != null) {
conn.close();
}
}
public static Transaction beginTransaction() throws TransactionException{
Connection conn = null;
try {
conn = currentConnection();
} catch (SQLException e) {
log.error("Can't get current connection with SQLException:",e);
throw new TransactionException("Begin tracsaction fail with SQLException:", e);
}
return new TransactionFactory().beginTransaction(conn);
}
}
发表评论
-
java Swing组件大全超牛的例子
2013-02-18 16:15 13466http://www.blogjava.net/tjsjrx2 ... -
Java ClassLoader
2012-12-26 21:27 823http://blog.sina.com.cn/s/blog_ ... -
Java运行环境JRE和Java虚拟机JVM有什么关系?
2012-10-15 17:41 1107http://ghost1193.blog.163.com/b ... -
JMX 平台MXBean
2012-10-15 17:39 1987from http://1985wanggang.blog.1 ... -
linux脚本(让JAR的config放在外边)
2012-08-09 20:15 1711linux脚本(让JAR的config放在外边) http: ... -
java压缩后高清晰图
2012-07-03 17:28 1389imgscalr – Java Image Scaling L ... -
proxy代理
2012-02-07 18:01 699http://hi.baidu.com/a8431256/bl ... -
使用Java开发需要关注的那些事儿
2011-11-22 14:35 717http://blog.csdn.net/jollyant/a ... -
spring3mvc+hibernate包
2011-07-06 15:30 1271===== spring3 ============ org. ... -
spring3+ ibatis2()配置
2011-07-06 10:30 1164参考 http://blog.csdn.net/cl61917 ... -
tomcat6 + apache2 集群配置
2011-07-04 14:45 945参考 http://www.iteye.com/top ... -
web.xml listener、filter、servlet 加载顺序
2010-11-28 15:25 1065web.xml listener、filter、servlet ... -
关于对象的equal方法和hashCode方法
2010-09-14 12:27 1442from http://gumeng000.iteye.com ... -
将中文转换成unicode的工具:
2010-08-11 17:49 1731from http://hechengrong.iteye. ... -
java 问题收集
2010-07-23 16:09 7181 StringBuffer / StringBuilder ... -
html
2010-05-14 12:14 8001 <input type="text&quo ... -
web错误代码
2010-03-16 12:22 8991 http status 404 这个页路径或**.js ... -
struts 提示错误收集
2009-10-14 17:20 10271 End of content reached whil ... -
javascript单引号和双引号区别
2009-09-09 18:06 2587javascript单引号和双引号区别2009-08-27 ... -
struts1(html:checkbox)
2009-07-31 16:16 1169<html:checkbox property=&quo ...
相关推荐
总的来说,结合JDBC的事务管理和ThreadLocal,我们可以在多线程环境中更好地实现数据库操作,确保数据的一致性,并提高代码的可复用性和安全性。通过使用ThreadLocal,我们可以创建线程安全的变量,使得每个线程都能...
在上述的描述和代码中,展示了一种使用ThreadLocal实现的简单事务管理策略,它主要用于处理数据库操作时的一致性。以下是对这个实现的详细解析: 1. **ThreadLocal的使用**: ThreadLocal是Java中的一个类,用于在...
Atomikos是著名的JTA(Java Transaction API)实现之一,提供了分布式事务管理的能力。AtomikosDataSource是基于Atomikos实现的XAPool,可以协调跨多个数据源的ACID(原子性、一致性、隔离性和持久性)事务。在...
在Java JDBC中,我们可以使用Connection对象的setAutoCommit(false)方法来关闭自动提交,然后手动控制事务的开始(startTransaction)、提交(commit)和回滚(rollback)。例如,在转账操作中,如果两个账户的扣款...
在事务管理中,我们可以在ThreadLocal中存储当前线程的`Connection`对象,这样每个线程都有自己的事务上下文,避免了并发问题。 在文件`Transaction3`中,可能包含了具体实现上述模板设计模式的Java代码,包括`...
这种方式被称为ThreadLocal Session和Open Session in View模式,能够简化事务和Session的生命周期管理。 在实际应用中,需要确保正确地开启和结束Session及事务,并将其与数据访问操作结合。HibernateUtil类可以...
C3P0是一个开放源代码的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。 1. **添加依赖**: - 添加DBUtils和C3P0的jar包到项目中。 - 如果使用Maven或者Gradle等构建工具,则可以在`pom...
为了实现这一模式,推荐使用拦截器(如ServletFilter)结合ThreadLocal来管理Session和事务,这样可以在处理请求的线程中方便地访问和管理Session。 此外,Hibernate还提供了辅助API来支持行级悲观锁定,利用`...
为了实现这一机制,开发人员可能使用了诸如Spring框架的`@Transactional`注解或者手动调用`Connection`对象的`beginTransaction()`、`commit()`和`rollback()`方法。在每个线程的生命周期内,ThreadLocal会存储这个...
Spring通过AOP(面向切面编程)实现事务管理,使得事务可以在不侵入业务逻辑代码的情况下进行控制,提高了代码的可维护性和可复用性。 在描述中提到的代码示例展示了两种不同的事务处理方式:一种是传统的 JDBC ...
此外,`DAOFactory`和`ConnectionManager`是两个设计模式的应用,前者可能是工厂模式,用于创建DAO实例,后者可能是单例模式,用于管理数据库连接。 事务的ACID属性(原子性、一致性、隔离性和持久性)是事务处理的...
接下来是`HibernateUtil.java`代码示例,这是一个典型的Hibernate工具类,用于创建和管理`SessionFactory`实例。 1. **导入包:** ```java import org.hibernate.Session; import org.hibernate....
通过这种方式,我们可以完全利用 Spring 的 IoC 容器来管理 Hibernate 的配置和数据源,从而实现更高效、更简洁的开发模式。同时,Spring 还提供了强大的事务管理功能,可以通过简单的 XML 或注解配置实现对 ...
Java持久化API(Java Persistence API,简称JPA)是Java平台上的一个标准,用于管理和持久化应用程序中的对象到关系数据库。JPA通过提供对象/关系映射(ORM)功能,使得开发人员可以使用面向对象的方式来操作数据库...
为了保证事务的一致性,可以利用`ThreadLocal`来封装`Connection`,确保在同一事务中的DAO类获取的是同一个`Connection`。 #### JTA事务 JTA(Java Transaction API)用于管理分布式事务。一个完整的JTA事务包括一...
[System.InvalidOperationException] = {"ExecuteNonQuery requires the command to have a transaction when the connection assigned to the command is in a pending local transaction. The Transaction ...
11.2. 利用JDBC核心类实现JDBC的基本操作和错误处理 11.2.1. JdbcTemplate类 11.2.2. NamedParameterJdbcTemplate类 11.2.3. SimpleJdbcTemplate类 11.2.4. DataSource接口 11.2.5. SQLExceptionTranslator接口...
9.5.1. 理解Spring的声明式事务管理实现 9.5.2. 第一个例子 9.5.3. 回滚 9.5.4. 为不同的bean配置不同的事务语义 9.5.5. <tx:advice/> 有关的设置 9.5.6. 使用 @Transactional 9.5.7. 事务传播 9.5.8. 通知...
9.5.1. 理解Spring的声明式事务管理实现 9.5.2. 第一个例子 9.5.3. 回滚 9.5.4. 为不同的bean配置不同的事务语义 9.5.5. <tx:advice/> 有关的设置 9.5.6. 使用 @Transactional 9.5.7. 事务传播 9.5.8. 通知...