Apache事务:事务性写入文件 – 如何使用resourceId

如果有人实施了交易写入文件,请帮助我。
相关主题在早期的线程( 事务写入 )中讨论过。

用例如下:
如果写入日志文件失败,则应回滚适当的数据库事务。

因此,文件的写入应该以事务方式执行。

我选择了Apache Commons Transaction lib。
并且有问题,这不让我走得更远,因为没有找到适当的文档或示例。

我创建了FileResourceManager的实例:

FileResourceManager frm = new FileResourceManager(“c:\ cur”,“c:\ cur”,true,logger);

据我从这个Apache Commons Transaction教程中了解,我应该实现以下步骤:

  1. 开始交易:
    frm.start();

  2. 获取它的事务ID:
    transactionId = frm.generatedUniqueTxId();

  3. 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"); } }