您的位置:首页 > 编程语言 > Java开发

Java中的事务文件系统

2009-06-10 22:49 134 查看
Google搜索一把你能找到一些关于事务文件系统的Java实现,而我选择的是Apache的commons-transaction,为什么?因为经验告诉我从 Apache Foundation诞生的软件都是相当优秀的,并且有很完备的文档。但是commons-transaction可能属于例外了,它没有完备的文档,本文就就简单的描述commons-transaction的用法。

1. 下载并安装Jakartu Commons-Transaction

如果使用Maven,在pom.xml文件中添加以下依赖即可

<dependency>

<groupId>commons-transaction</groupId>

<artifactId>commons-transaction</artifactId>

<version>1.2</version>

</dependency>

如果你使用的是Eclipse,或者是用类notepad的工具编写程序,就要从Apache网站上下载库文件。下载的包中包含commons-transaction所依赖的第三方库,添加到classpath中即可

2. 初始化FileResourceManager

FileResourceManager frm = new FileResourceManager(storeDir, workDir, urlEncode, logger);

下面简要的介绍一下构造函数的几个参数(参考JavaDoc)

storeDir String - FileResourceManager只能对这个目录及其子目录中的文件进行操作。

workDir String - 临时目录,事务使用它来存储临时数据。

urlEncode boolean - 表示路径是否需要用URL编码,在例子中我们使用的是false

logger LoggerFacade - 在使用commons-transaction时你必须登记日志,而不能用“System.out”向屏幕上打印。

在构造完FileResourceManager后,就要开启事务了。

frm.start();

当你在启动FileResourceManager后,它会初始化自己的内部状态,现在他会查找还没有完成的事务。事务的状态将会被检查直到状态变为了“STATUS_COMMITTING",FileResourceManager会试图回滚那些失败的事务,如果回滚也失败了,那么事务就会标记为”脏“,并且需要人工干预了。这和数据库事务差不多。



3. 开始一个事务


每个事务都对应一个唯一的ID,在开始事务时必须提供这样一个唯一的ID。如果你不想自己创建一个ID,那么就让FileResourceManager代劳吧。

String txId = frm.generateUniqueTxId();

现在我们有了一个唯一的ID(txId)就可以开始事务了。

frm.startTransaction(txId);

4. 修改资源

事务启动后我们就可以对文件进行操作了,我们可以进行下面的操作:

# copyResource

# createResource

# deleteResource

# moveResource

# writeResource

下面是一个例子,我们首先删除一个文件,然后移动另一个文件

try {

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

frm.moveResource(txId, "fromFile.txt", "destinationFile.txt", true);

frm.prepareTransaction(txId);

frm.commitTransaction(txId);

} catch (ResourceManagerException e) {

e.printStackTrace();

try {

frm.rollbackTransaction(txId);

} catch (Exception e1) {

e1.printStackTrace();

}

}

注:Resource的标识都是相对于storeDir而言的 阅读全文

类别:Java 查看评论
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐