apache commons 之 transcation 简介和文件事务系统的实现

Apache Commons Transaction 旨在提供一个轻量级、标准化、高效的 Java 事务多线程编程的工具包,实现了多级锁、事务集合和事务级文件访问。

事务处理系统对数据库使用者来说,是非常熟悉的事情;但是如果将事务处理系统从数据库转移到文件系统上,估计很多同学都要一筹莫展了。实际上,无论库/框架、语言,或者文件系统级别,对文件系统操作事务的支持一直都很薄弱。

单独看一些文件系统操作(比如文件重命名、删除等),它们是原子的,但是从目前的情况看,很少有解决办法能够形成一组综合的API,全方位地支持事务性的文件IO操作。如果文件操作(例如创建、修改、重命名、删除文件)需要作为事务的一部分而连贯地执行,那么应用程序往往必须依赖于自行设计的方案,去减少系统/应用失败或并发访问时出现不一致状态的可能性。

Apache CommonsTransaction就是在这方面做的一些努力。

Apache Commons Transaction项目的目标之一是提供对文件系统的事务性访问,它的实现方式是与具体的文件系统提供者/实现无关的。这个Java库用一种悲观锁定方案来实现文件系统上的ACID事务。

Apache CommonsTransaction的核心组件是FileResourceManager,FileResourceManager创建事务、协调它掌管下的资源/文件的文件操作——复制、创建、删除、移动、写入,以及准备和提交事务。在初始化阶段要为FileResourceManager准备:

·        提交之后存放主要数据的目录

·        事务存储临时数据的目录(工作目录)

·        指示是否要对路径进行URL编码的布尔标记

·        FileResourceManager使用的日志器(logger)

启动之后,FileResourceManager紧接着将试图回滚所有未完成的事务,除非事务在系统失败或者FileResourceManager遇到不可挽回的问题时已经在提交的过程中了,在这种情况下,FileResourceManager会试图前滚事务。万一事务不能恢复,例如既不能回滚、也不能前滚,整个工作目录会由FileResourceManger标记为“脏”状态,在问题解决之前都不再允许对其进行修改。日志中的信息通常都可以帮助从“脏”状态进行手动恢复。

下面这些代码,是简单的用Apache Commons Transaction实现文件事务系统

packagetest.ffm83.commons.transcation;

importorg.apache.commons.logging.Log;

importorg.apache.commons.logging.LogFactory;

importorg.apache.commons.transaction.file.FileResourceManager;

importorg.apache.commons.transaction.file.ResourceManagerException;

importorg.apache.commons.transaction.util.CommonsLoggingLogger;

importorg.apache.commons.transaction.util.LoggerFacade;

/**

* 通过commons Transaction 进行简单的文件系统的事务控制

* 这里的log是commons-transaction包中的类

* 本应用需要导入额外的jta 相关jar包

* @author 范芳铭

*/

publicclass TransactionUsage {

public static void main(String[] args){

Log log =LogFactory.getLog(TransactionUsage.class);

LoggerFacade logger = newCommonsLoggingLogger(log);

//工作目录

String workDir ="D:/ffm83/work/";

//临时数据存放目录

String tempDir ="D:/ffm83/temp";

// 构造函数的第三个参数:false,标识是否encoding文档的url,这个一般不需要设置为true

FileResourceManager frm = newFileResourceManager(workDir, tempDir,false, logger);

String txId = "";

try {

// 这标识frm的状态为start

frm.start();

txId =frm.generatedUniqueTxId(); //获取事物ID

// 开启Transaction

frm.startTransaction(txId);

frm.deleteResource(txId,"ffm83.txt");

System.out.println("删除本目录下的文件成功");

// 提交事务

frm.commitTransaction(txId);

} catch (Exception e) {

try {

// 回滚事务

frm.rollbackTransaction(txId);

System.out.println("删除本目录下的文件失败,回滚。");

}catch (ResourceManagerException e1) {

e1.printStackTrace();

}

}

}

}

运行结果如下:

删除本目录下的文件成功

时间: 2024-08-11 09:50:32

apache commons 之 transcation 简介和文件事务系统的实现的相关文章

Apache Commons Configuration之一简介

1    简介 Commons Configuration软件类库提供通用配置接口,使Java应用程序从多种源读取配置文件.Commons Configuration提供简单类型访问和通过以下代码演示的多义配置参数: Double double = config.getDouble("number"); Integer integer = config.getInteger("number"); 配置参数可以从以下源加载: Properties文件 XML文档 Pr

apache commons Java包简介

更多信息,请参考:http://commons.apache.org/ 一.Commons BeanUtils说明:针对Bean的一个工具集.由于Bean往往是有一堆get和set组成,所以BeanUtils也是在此基础上进行一些包装. 二.Commons CLI说明:这是一个处理命令的工具.比如main方法输入的string[]需要解析.你可以预先定义好参数的规则,然后就可以调用CLI来解析. 三.Commons Codec说明:这个工具是用来编码和解码的,包括Base64,URL,Sound

Apache Commons工具集简介

Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下面是我这几年做开发过程中自己用过的工具类做简单介绍. 组件 功能介绍 BeanUtils 提供了对于JavaBean进行各种操作,克隆对象,属性等等. Betwixt XML与Java对象之间相互转换. Codec 处理常用的编码方法的工具类包 例如DES.SHA1.MD5.Base64等. Collections java集合框架操作. Compress java提供文件打包 压缩类库. Con

(转)Apache Commons工具集简介

Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.我选了一些比较常用的项目做简单介绍.文中用了很多网上现成的东西,我只是做了一个汇总整理. 一.Commons BeanUtils http://jakarta.apache.org/commons/beanutils/index.html 说明:针对Bean的一个工具集.由于Bean往往是有一堆get和set组成,所以BeanUtils也是在此基础上进行一些包装. 使用示例:功能有很多,网站上有详细

apache commons Math的简介和使用

apache commons Math是一组偏向科学计算为主的函数,主要是针对线性代数,数学分析,概率和统计等方面. 我虽然是数学专业毕业,当年也是抱着<数学分析>啃,但是好久不用,这些概念都开始生疏,写一点例子,仅作参考. packagetest.ffm83.commons.math; importorg.apache.commons.math3.linear.Array2DRowRealMatrix; import org.apache.commons.math3.linear.LUDec

Apache commons 之 codec 简介和入门代码

Java JDK有一个 java.security 的 package, 提供了 MessageDigest 的编码方式, Digest Algorithms 包括了 MD2, MD5, SHA-1, SHA-256, SHA-384, 及 SHA-512 等等: Codec 是Commons项目中用来处理常用的编码方法的工具类包,例如HEX.SHA1.MD5.Base64等等目前最新版本为1.4. Base64/HEX是对称加密,MD5是不可逆加密,千万要注意 一些简单的加密示例代码: pac

apache commons 之 DbUtils简介

apachecommons dbutils 是 Apache 组织提供的一个开源 JDBC 工具类库,对传统操作数据库的类进行二次封装,可以把结果集转化成List. 目前最新的版本是1.6. 官网地址为:http://commons.apache.org/proper/commons-dbutils/ DBUtils是个小巧的JDBC轻量级封装的工具包,其最核心的特性是结果集的封装,可以直接将查询出来的结果集封装成JavaBean,这就为我们做了最枯燥乏味.最容易出错的一大部分工作. 在使用DB

org.apache.commons.net.ftp.FTPClient 下载文件提示Software caused connection abort: recv failed

今天在使用FTPClient下载文件时,登录成功了,但是提示下图所示的错误信息: 出现这个问题,本以为设置的读取文件目录不对,尝试修改多次无果.为了排除路径的问题,在firefox中安装了插件"FireFTP",连接上之后,可以正常下载,于是该问题排除. 后来在http://blog.csdn.net/wangjinwei6912/article/details/6603152 看到这位朋友的提示防火墙的问题,于是打开系统的防火墙,发现系统的防火墙都是开着的,如下图所示: 尝试把防火墙

ftp org.apache.commons.net.ftp.FTPClient 判断文件是否存在

String path = "/SJPT/ONPUT/HMD_TEST/" ; FtpTool.getFTPClient().changeWorkingDirectory(path); String reply = FtpTool.getFTPClient().getReplyString().substring(0, 3); if (reply.equals("250")) { System.out.println("We will now proces