当前位置: 首页 > 面试题库 >

Apache Transaction:以事务方式写入文件-如何使用resourceId

王刚毅
2023-03-14
问题内容

用例如下:
如果写入日志文件失败,则应回退相应的DB事务。

因此,应以事务处理方式执行写入文件的操作。

我选择了Apache Commons Transaction库。
还有一个问题,那就是我没有找到更合适的文档或示例,这让我无法走得更远。

我创建了FileResourceManager的实例

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

从本Apache Commons
Transaction教程了解到,我应该实现以下步骤:

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

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

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

这是模棱两可的:
a)我该如何resourceId与真实资源联系起来,以便我可以跨事务地写作?
b)我现在将如何处理交易的文件如何处理resourceId

谢谢你的指教。


问题答案:

到目前为止,没有人回答,我尝试从最新经验中做到这一点。

有用的文档资料:
example2(.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");
    }
}


 类似资料:
  • 我试图在操作中读取Excel文件,或向其中添加新数据并将其写回。我还试图用通量和Mono来完成一个完整的反应过程。其思想是通过webservice返回结果文件或bytearray。 我的问题是如何以非阻塞方式获取InputStream和OutputStream? 我正在使用Apache Poi库读取并生成Excel文件。 我目前有一个基于混合Mono.fromCallable()和阻塞代码获取输入

  • 问题内容: 我有一堆不是UTF-8编码的文件,我正在将网站转换为UTF-8编码。 我对要保存在utf-8中的文件使用了简单的脚本,但是文件以旧编码保存: 如何以utf-8编码保存文件? 问题答案: file_get_contents / file_put_contents不会神奇地转换编码。 您必须显式转换字符串。例如使用或。 尝试这个: 或者,使用PHP的流过滤器:

  • 问题内容: 我如何将分数写入文件? 问题答案: 您可以手动打开和关闭文件,但最好使用它,因为它可以为您处理关闭文件。 表示追加到文件中,该文件不会覆盖以前的内容- 这可能是您想要的。据我所知,您将要在print语句之后或之前添加它。如果您不懂读写文件,则应查看此链接。

  • 问题内容: 我正在Ruby中创建哈希,并希望以正确的格式将其写入JSON文件。 这是我的代码: 这是结果文件的内容: 我正在使用Sinatra(不知道哪个版本)和Ruby v 1.8.7。 如何以正确的JSON格式将其写入文件? 问题答案: 需要JSON库,并使用。 您的temp.json文件现在看起来像:

  • 问题内容: 我想知道如何将以下代码转换为将这些行输出到文本文件,而不是标准输出: 该属性文件是: 谢谢。 问题答案: 将ConsoleAppender更改为FileAppender。 我发现 有用。如果使用此选项,则必须为fileName添加一个属性,并且可能还要设置maxFileSize。这是一个示例(将它们放在log4j.properties文件中): 还有其他附加程序。 根据时间滚动。 不滚

  • 考虑以下代码: 我唯一发现的是: dump(Object data)方法接受Java对象并生成YAML文档 和 是只有我一个人,还是文档感觉非常神秘和指定?其中一半是关于我甚至从未听说过的特殊应用。我只看着它就觉得自己很傻,这让我有点生气。 不管怎样;如果你能给我任何帮助,我将不胜感激。