http://commons.apache.org/transaction/
有这么一个东西,其中的file包用来实现文件事务,不过具体实现方式实在不敢恭维。它完全依靠文件系统来保证它的事务,例如,它假设文件的删除、覆盖操作是一个原子操作,这样,当一个事务要修改任何一个文件的时候,它都是给你一个OutputStream,这个流输出到一个临时目录。提交的时候,它把用临时目录中的文件覆盖真正的文件。
也就是说,它不支持随机写
,假如有一个10M的文件(或者100M或者更大),哪怕一个事务中只修改一个字节,也要写10M,性能实在很差。如果仅仅是这样,对于
很多对性能没有要求的应用来说,应该还是不错的。
但它好像还有更多的问题。可以做一个实验,大致如下:
try{
开始事务
删除文件1
删除文件2
提交
}catch(){
回滚
}
我们用点手段锁住文件2,让这个文件删不掉,然后运行这个程序,同时结合源代码进行跟踪,并观察存储目录和临时工作目录的文件情况。结果发现:
1、提交的时候,当删除第一个文件的时候,它并没有把文件1复制到临时工作目录。文件1真的被删除了,这样当删文件2出错的时候,回滚是不可能的。
2、当删除文件2出错,并且代码执行到回滚的时候。真的出现了异常,说是数据库已经处于dirty的状态,不能操作了。这种情况等于是需要手工干预了。这个时候文件1被删除,文件2还在。
3、解除文件2的锁定,下次重启FileResourceManager的时候,会尝试进行恢复,结果是两个文件都被删掉。如果没有解除锁定,重启 FileResourceManager还要出错。
我觉得是非常不应该的,这样就机会没法用了,不知道他们怎么想的,还是我弄错了?
分享到:
相关推荐
`DbUtils`还提供了一些辅助方法来处理事务,如`beginTransaction()`, `commit()`, `rollback()`,使事务管理变得更加简单。这些方法可以与`ConnectionHelper`一起使用,确保在出现错误时正确地回滚事务。 7. **...
在 Spring 2.5 中,可以使用 JTA(Java Transaction API)来实现分布式事务管理。 JTA 是一个 Java 标准,用于提供分布式事务管理的支持。它可以使得事务跨越多个资源管理器,确保事务的一致性。 在 Spring 2.5 中...
commons-transaction 处理多级事务的集合 commons-validator 提供了一个简单的,可扩展的框架来在一个XML文件中定义校验器 (校验方法)和校验规则 commons-vfs 虚拟文件系统 httpcomponents-client 和 http 协议...
4. **事务管理**:DBCP2可以与JTA(Java Transaction API)集成,支持分布式事务处理。 5. **性能优化**:DBCP2提供了多种优化选项,如空闲连接检测、连接池的预热、公平锁机制等,以提升整体性能。 6. **异常处理...
commons-transaction 处理多级事务的集合 commons-validator 提供了一个简单的,可扩展的框架来在一个XML文件中定义校验器 (校验方法)和校验规则 commons-vfs 虚拟文件系统 httpcomponents-client 和 http 协议...
本教程将深入探讨如何使用Spring框架、Java Transaction API (JTA) 和 Java Open Transaction Manager (JOTM) 来实现这样的分布式事务管理。 首先,我们来了解一下JTA。JTA是Java平台的标准事务API,它允许应用程序...
10. `com.springsource.org.apache.commons.dbcp-1.2.2.osgi.jar`:Apache Commons DBCP,一个基于Apache Commons Pool的数据库连接池实现。 这些库共同构成了Spring框架的核心,为开发者提供了强大的工具集,以...
Apache Commons DBUtils是Java开发中一个非常实用的数据库操作库,尤其在处理简单和重复的数据库访问任务时,它提供了一种简洁、高效的方式。这个"commons-dbutils-1.5"版本是DBUtils项目的早期稳定版本,它包含了对...
本篇文章将聚焦于如何结合Spring和JOTM(Java Open Transaction Manager)来实现多数据源的事务管理,特别是针对使用Hibernate的情况。 JOTM是Java平台上的一个开放源代码事务管理器,它遵循JTA(Java Transaction ...
7. `commons-logging.jar`:Apache Commons Logging,一个日志抽象层,允许选择不同的日志实现。 在配置Spring与Hibernate的整合时,通常需要以下步骤: 1. **引入依赖**:在项目的`pom.xml`(如果使用Maven)或...
3. **配置DataSource**:Spring需要知道如何连接到数据库,所以需要定义一个`DataSource` bean,这里可以根据实际使用的数据库类型选择相应的实现,如Apache Commons DBCP或Oracle的UDDI。 ```xml ...
- `commons-cli-1.0.jar`: Apache Commons CLI工具包,用于解析命令行参数。 - `connector-1_5.jar`: 连接器实现库。 #### 二、Tomcat中的JNDI配置 在Tomcat中配置JNDI资源,以便Spring可以使用这些数据源。具体的...
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> ``` ##### 配置Spring内置数据源 Spring框架自带的数据源: ```xml ``` #### 将数据库连接信息...
6. **commons-pool-1.5.4.jar**:Apache Commons Pool是对象池设计模式的实现,与DBCP一起工作,用于管理数据库连接的池化。 7. **slf4j-api-1.6.0.jar**:Simple Logging Facade for Java (SLF4J) 是一个日志抽象...
这需要启用注解驱动的事务管理,例如在配置文件中添加`<tx:annotation-driven transaction-manager="transactionManager"/>`。 4. **编程式事务管理**: 通过`PlatformTransactionManager`接口的实现手动开始、提交...
在需要进行多步骤操作并要求事务一致性的情况下,可以通过`TransactionManager.startTransaction()`开启事务,然后进行操作,最后通过`TransactionManager.commit()`或`TransactionManager.rollback()`来提交或回滚...
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" ... /> <!-- 配置事务管理器 --> <!-- 启用基于注解的事务管理 --> <tx:annotation-driven transaction-manager=...
为了解决上述问题,可以考虑更改数据源的实现类,使用更高效的数据源管理方案,如`BasicDataSource`(来自Apache Commons DBCP库)。具体配置如下: ```xml <bean id="dsOracle2" class="org.apache.commons.dbcp....
### Spring如何管理事务 #### 一、Spring事务管理...<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <!-- 配置数据源参数 --> <!-- 定义事务管理器 --> <!-- 定义事务拦截器 --> ...
对于多个数据库的事务管理,Spring主要依赖于JTA(Java Transaction API)和XAResource接口来实现分布式事务。然而,JTA的XA事务通常在J2EE环境下工作,需要容器支持,比如JBoss、WebLogic等。在J2SE环境中,Spring...