ser*_*nni 7 java file transactional apache-commons
如果有人实施了交易写入文件,请帮助我.
在早期的线程(事务性写入)中讨论了相关主题.
用例如下:
如果写入日志文件失败,则应回滚适当的数据库事务.
因此,文件的写入应该以事务方式执行.
我选择了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真实资源,我应该交易写作?
b)我的文件如何以交易方式编写,现在将如何resourceId?
谢谢你的建议.
到目前为止没有人回答,我尝试根据我的最新经验来做到这一点。
有用的文档:
example2(.ppt)
简化算法看起来像(实际上,在示例2中描述):
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");
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3600 次 |
| 最近记录: |