Apache事务:事务性写入文件 – 如何使用resourceId
如果有人实施了交易写入文件,请帮助我。
相关主题在早期的线程( 事务写入 )中讨论过。
用例如下:
如果写入日志文件失败,则应回滚适当的数据库事务。
因此,文件的写入应该以事务方式执行。
我选择了Apache Commons Transaction lib。
并且有问题,这不让我走得更远,因为没有找到适当的文档或示例。
我创建了FileResourceManager的实例:
FileResourceManager frm = new FileResourceManager(“c:\ cur”,“c:\ cur”,true,logger);
据我从这个Apache Commons Transaction教程中了解,我应该实现以下步骤:
-
开始交易:
frm.start();
-
获取它的事务ID:
transactionId = frm.generatedUniqueTxId();
-
call方法,这是必需的,例如带有transactionId和resourceId的writeResource:
frm.writeResource(transactionId, resourceId);
这里含糊不清:
a)如何将resourceId
与真实资源连接起来,我应该以transactioanally方式编写?
b)我的文件,我将以事务方式编写的文件现在如何处理resourceId
?
谢谢你的建议。
至于没有人回答,我尝试从我的最新经验中做到这一点。
有用的文件:
例2(.PPT)
简化的算法看起来像(实际上,在example2中描述):
1.初始化FileResourceManager
2.启动FileResourceManager
3.从FileResourceManager实例获取事务ID
4.从步骤3开始具有事务Id的事务
5.编写你需要的资源 – 这里提到了事务性地写它
,所以看起来这是重要的一步!
6.提交或回滚事务
注意:关于我问的resourceId ,我的问题,只是交易文件的 名称 。 这个命名并没有描述这个属性非常好。
代码,我用过:
private static final org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(FileAppender.class); private static LoggerFacade loggerFacade = new Log4jLogger(logger); private static String tempDir = (String) System.getProperties().get("java.io.tmpdir"); private FileResourceManager frm = new FileResourceManager(tempDir, tempDir, false, loggerFacade); private static OutputStream outputStream; public void writeOut(E event) throws IOException { Object txId = null; try { frm.start(); txId = frm.generatedUniqueTxId(); frm.startTransaction(txId); outputStream = frm.writeResource(txId, fileName, true); frm.commitTransaction(txId); } catch (Exception e) { throw new IOException("DB rollback"); } }
- Apache Commons FTPClient.listFiles
- 如何在java中提供FTP地址?
- apache commons net ssl握手错误与android
- 为什么我用Apache Commons FileUpload获得“FileUploadException:Stream意外结束”?
- 在Java中通过FTP创建文件夹层次结构
- Java MySQL连接池无法正常工作
- apache-commons-config PropertiesConfiguration:丢失最后一个属性后的注释
- Apache DefaultHttpClient调用导致“java.lang.RuntimeException:Stub!”
- Apache Commons CLI选项解析器可以忽略未知的命令行选项吗?