Транзакция Apache: запись файла транзакционно - как использовать resourceId
если кто-то реализовал транзакционную запись в файл,пожалуйста, помогите мне.
Связанная тема обсуждалась в предыдущем потоке (транзакционные писать).
сценарий использования следующий:
если запись в файл журнала не удалась,то соответствующая транзакция БД должна быть откатана.
так writinig к файлу должен быть выполнен в путь.
Я выбрал Apache Commons Сделки lib.
И есть проблема,которая не позволяет мне идти дальше, потому что не нашли соответствующей документации или примеров.
Я создал экземпляр FileResourceManager:
FileResourceManager frm = новый FileResourceManager("c:cur", "c:cur", правда, регистратор);
как я понимаю из этого Apache Commons Transaction tutorial,Я должен реализовать следующие шаги:
запуск сделки:
frm.start();
получить идентификатор транзакции для него:
transactionId = frm.generatedUniqueTxId();
метод вызова, который необходим, например writeResource с transactionId и resourceId:
frm.writeResource(transactionId, resourceId);
а вот двусмысленность:
а) как я могу подключиться resourceId
С реальным ресурсом,что я должен написать transactioanally?
b) как сделать мой файл, который я напишу транзакционно будет теперь о resourceId
?
Спасибо за совет.
1 ответов
поскольку никто не отвечает, Я пытаюсь сделать это из моего последнего опыта.
полезная documentataion:
Пример 2(.ppt)
упрощенный алгоритм выглядит так(на самом деле, изображенный в example2):
1. инициализации FileResourceManager
2. запустить FileResourceManager
3. получить идентификатор транзакции из экземпляра FileResourceManager
4. запуск сделки с идентификатор транзакции с шага 3
5. написать ресурс вам нужен-вот упоминалось написать ему транзакционно
,так что, похоже, это серьезный шаг!
6. commit или rollback транзакции
Примечание: resourceId, о чем я спросил, мой вопрос, это просто имя 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");
}
}