gpt4 book ai didi

java - Apache 事务 :write file transactionally - how to use resourceId

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:31:12 25 4
gpt4 key购买 nike

如果有人实现了事务写入文件,请帮助我。
相关主题已在较早的线程 ( transactional write ) 中讨论过。

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

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

我选择了Apache Commons Transaction库。
有问题,这不会让我更进一步,因为没有找到合适的文档或示例。

我已经创建了 FileResourceManager 实例:

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

据我了解Apache Commons Transaction tutorial ,我应该执行以下步骤:

  1. 开始事务:
    frm.start();

  2. 为其获取交易 ID:
    transactionId = frm.generatedUniqueTxId();

  3. 调用方法,需要的,例如writeResource with transactionId 和 resourceId:
    frm.writeResource(transactionId, resourceId);

这里有歧义:
a) 我如何将 resourceId 与我应该事务性编写的真实资源连接起来?
b) 我的文件如何处理,我现在将以事务方式编写关于 resourceId 的文件?

谢谢指教。

最佳答案

到目前为止没有人回答,我尝试根据我最近的经验来回答。

有用的文档:
example2(.ppt)

简化后的算法看起来像(实际上,如示例 2 所示):
1.初始化FileResourceManager
2.启动FileResourceManager
3.从FileResourceManager实例获取事务Id
4.使用第3步的交易ID开始交易
5. 编写您需要的资源 - 这里提到了事务性
编写它,看起来这是主要步骤!
6.提交或回滚事务

注意:resourceId,关于我问的,我的问题,只是 name of 交易文件。这个命名并没有很好地描述这个属性。

代码,我用过:

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

关于java - Apache 事务 :write file transactionally - how to use resourceId,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4682584/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com