Пока никто не отвечает, я пытаюсь сделать это из моего последнего опыта.
Полезные документы:
example2 (.ppt)
Упрощенный алгоритм выглядит (на самом деле, как показано в примере 2):
1. инициализация FileResourceManager
2. запуск FileResourceManager
3. получить идентификатор транзакции из экземпляра FileResourceManager
4. начать транзакцию с идентификатором транзакции с шага 3
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");
}
}