今天上網(wǎng)看到apache的commons包中提供了一個Transaction,可以控制文件的事務(wù)。做了測試,看是否可以成功。
Commons-Transaction: http://commons.apache.org/transaction/
下面是測試的代碼TestTransaction.java:
Log log = LogFactory.getLog(TestTransaction.class);
//這個是commons-transaction包中的類
LoggerFacade logger = new CommonsLoggingLogger(log);;
//存儲的路徑
String toDir = "d:/";
//臨時路徑
String tempDir = "e:/";
//構(gòu)造函數(shù)的第三個參數(shù):false,標(biāo)識是否encoding文檔的url,這個一般不需要設(shè)置為true
FileResourceManager frm = new FileResourceManager(toDir, tempDir, false, logger);
//這標(biāo)識frm的狀態(tài)為start
frm.start();
//下面需要frm的狀態(tài)為start
String txId = frm.generatedUniqueTxId();
try {
//開啟Transaction
frm.startTransaction(txId);
frm.deleteResource(txId, "RFID.rtf");
// throw new Exception("sdf");
} catch (Exception e) {
try {
//回滾事務(wù)
frm.rollbackTransaction(txId);
} catch (ResourceManagerException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
//提交事務(wù)
frm.commitTransaction(txId);
在這個application運行過程中,會在tempDir產(chǎn)生一個臨時目錄(是由一些阿拉伯?dāng)?shù)字和字母組成的),里面有兩個文件夾:change和delete,還有一個日志transaction.log,而要操作的目錄就會在delete目錄中。事務(wù)的過程也是這樣的:先將file存放的tempDir,然后監(jiān)控transaction的狀態(tài),如果commit,它就會將file寫到destination中,然后刪除tempDir。不過,既然apache已經(jīng)有了這個,就可以直接拿來用了
.commons-transaction,還支持jta的事務(wù),希望將來會更加強大.